2011-04-19 261 views
34

最近我的應用程序在上傳時遭到拒絕。蘋果審查小組表示,我的應用程序「缺少推送通知權利」因「缺失推送通知權利」而被拒絕的應用程序

這是他們所提供的信息:

缺少推送通知的權利 - 與蘋果推送通知服務您的應用註冊了,但應用程序簽名的權利不包括所需的「APS環境」權利。確保您已爲此應用啓用了推送通知服務,並且您已下載了包含「aps-environment」權利的分發配置配置文件。

我的應用程序的早期版本用於推送通知,並且我的應用程序二進制文件從未因此被拒絕。我應該在這裏做什麼?

回答

17

在任何文本編輯器中打開您的供應配置文件並搜索「環境」。

你會發現:aps-environment

如果你沒有看到你的provisioning profile aps-environment,有一個在您的蘋果設置證書的問題。

如果您在沒有推送通知的情況下創建了證書,並且稍後添加了推送通知服務,Apple不會更新您的供應配置文件。

您需要創建一個新的配置文件。使用這個新的Provisioning Profile對二進制文件進行簽名,您就可以開始使用了。

+1

+1對於尼斯答案。 – 2013-04-04 06:20:31

+1

這個答案幫了我很多 – lixiaoyu 2016-04-20 09:55:37

14

我重新創建了我的分發配置文件並使用它創建我的應用程序。此更改修復了丟失推送通知權利的問題。

3

我收到了同樣的錯誤消息,重新創建我的配置文件並沒有消除它。

相反,我發現我的應用程序包含一些不被使用的流星APNS相關符號(在庫中)。顯然,他們導致一個靜態分析器標記應用程序爲使用推送通知(它不)。 #如果確定符號允許我的應用程序在沒有API環境權限的情況下被接受。

+1

感謝您的支持。經過一整天的困惑,我發現你的答案在這裏,並註釋掉'[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];'在appDelegate中,這似乎解決了它。 – Robert 2013-02-07 10:08:28

8

我有同樣的問題,我通過重新創建配置文件來修復它。從"Provisioning and Development"本地和推送通知指南:

團隊管理員或團隊代理必須在下一個創建遠程通知開發的服務器端所使用的供應配置文件(Development或分佈)。供應配置文件是一組資產,它將應用程序的開發人員及其設備與授權的開發團隊相關聯,並使這些設備可用於測試。該配置文件包含證書,設備標識符,應用程序的包ID以及所有權利,包括。所有團隊成員必須在他們將運行的設備上安裝供應配置文件並測試應用程序代碼。

+1

也適用於我,我在創建AppStore供應配置文件後爲我的AppID啓用了APNS,因此似乎APNS權利未包含在配置文件中,因此您必須重新創建。 – schmunk 2013-01-29 16:15:09

0

我有同樣的問題。我解決了它。

我認爲這個問題會導致在AppID中添加push-notification-function並且沒有重新創建Provisioning。 添加iCloud功能時,我們將收到警告:

您爲此App ID創建的所有新配置配置文件都將啓用iCloud。如果您想要啓用的iCloud與此應用程序ID相關聯的任何現有配置的配置文件,您必須手動重新他們

我認爲,當我們加入的AppID一些功能,我們需要手動重新這些都與所有provisionings該AppID。

我是這麼認爲的

1

加入今天擴展到一個應用程序使用後,我最近遇到這個問題推送服務已啓用。最後意識到由Xcode爲Today Extension生成的Mobile Provisioning配置文件沒有啓用推送通知服務。一旦我啓用了今日推廣的推送服務,蘋果的警告消失了。

11

如果您要提交Cordova/Phonegap項目,並且您沒有使用推送通知,則應檢查以下兩種方法的Classes/AppDelegate.m。在Cordova 3.7.0中觀察到,不確定其他版本。

確保您沒有以任何其他方式使用遠程通知(仔細檢查您的插件)。然後刪除或註釋掉以下塊:

- (void) application:(UIApplication*)application 
    didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken 
{ 
    // re-post (broadcast) 
    NSString* token = [[[[deviceToken description] 
     stringByReplacingOccurrencesOfString:@"<" withString:@""] 
     stringByReplacingOccurrencesOfString:@">" withString:@""] 
     stringByReplacingOccurrencesOfString:@" " withString:@""]; 

    [[NSNotificationCenter defaultCenter] postNotificationName:CDVRemoteNotification object:token]; 
} 

- (void) application:(UIApplication*)application 
    didFailToRegisterForRemoteNotificationsWithError:(NSError*)error 
{ 
    // re-post (broadcast) 
    [[NSNotificationCenter defaultCenter] postNotificationName:CDVRemoteNotificationError object:error]; 
} 

希望這可以節省你幾個小時;-)

+3

Cordova 4.3.0仍然需要這個,但是他們增加了一個DISABLE_PUSH_NOTIFICATIONS宏來禁用一個地方的代碼。現在只需在'AppDelegate.m'的頭部添加'#define DISABLE_PUSH_NOTIFICATIONS',就可以了。 – jlapoutre 2015-05-29 09:52:02

+0

也爲cordova 5.x這是必要的。 '#define DISABLE_PUSH_NOTIFICATIONS'解決了它。這似乎取決於您安裝的插件。在我的情況下,IAP插件會產生這個錯誤。 – 2016-04-19 07:33:01

4

我的情況:我已經實現推送通知的更新我的應用商店應用。由於推送通知推送之前的供應配置文件變爲無效,因此我創建了新的Appstore-distribution provisioning配置文件,並使用新配置文件構建應用程序並上傳到商店。但是我收到一封郵件,裏面寫着「丟失推送通知權利」。

查找:我發現在歸檔時,Xcode使用了錯誤的(無效/舊的)配置文件。所以刪除了會員中心的老供應配置文件,它解決了這個問題

Screenshot while validating the archive

+0

就我而言,Xcode使用自己的默認配置文件。我應該怎麼做Xcode使用我的應用程序調配配置文件 – 2015-09-10 10:32:19

+0

- 您是否嘗試在構建設置 - >代碼簽名中提及您的配置文件。 - 即使在請求使用您的配置文件後,如果Xcode使用默認配置文件,請刪除成員中心中的默認配置文件 – NaveenRaghuveer 2015-09-11 06:25:47

3

我也有這個問題了科爾多瓦的應用程序,並做一點閱讀後似乎這是一個常見的問題現在。

爲什麼會發生?

由於您提到您的應用已通過推送通知獲得批准,因此最有可能的情況是您的應用的提供配置文件在提交給AppStore時已更改。也許你:

  1. 重建Xcode中的項目,或
  2. 移動到另一臺計算機,忘了告訴的XCode什麼正確的配置文件是或
  3. 有人坐在您的計算機上,並改變了它,或

發生此問題的原因是權限是通過配置配置文件收集的。如果您忘記將應用的供應配置文件鏈接到具有「推送通知」權利的AppID(請注意,XCode默認通過使用通配符開發者供應證書自動執行此操作),那麼您可能會收到此消息,直到您排序取得許可。

如何卸下需要推送通知在科爾多瓦的應用程序:

我提交科爾多瓦的應用程序時,我得到這個消息,同時發表@jlapoutre這套解決方案可以讓您的應用獲得批准,您希望繼續從Cordova升級中獲益,所以最好的做法是利用條件編譯(即觸發#ifndef DISABLE_PUSH_NOTIFICATIONS指令,該指令告訴XCode編譯您的應用程序時省略這部分代碼)。

條件編譯在XCode中也稱爲「預處理器宏」。這是怎樣的,你可以通過圖形化的用戶界面做到這一點(注意,這其中的XCode 6.1所做的那樣):

enter image description here

希望這有助於其他人在那裏在同樣的情況。

相關問題