簡體   English   中英

不使用推送通知的Cordova應用程序:“缺少推送通知權利”

[英]Cordova app that doesn't use push notifications: “Missing push notification entitlement”

我們有一個基於Cordova的iOS應用程序,它不使用推送通知。 截至Cordova 3.5.0,我們對應用程序商店進行的每次提交都會生成一封電子郵件,通知我們我們的應用程序包含用於向Apple的推送通知服務注冊的API,但沒有推送通知權利。

該應用程序每次都被接受,因為我們實際上並沒有使用推送通知。 但是,如果Apple決定更改其關於這些API引用是否可接受的策略,我希望避免觸發此警告。

我們沒有遇到過早期版本的Cordova的問題,也沒有在Objective-C中做過任何工作。 這是Cordova 3.5的已知問題嗎? 搜索已經產生了一些類似問題的人,但我只找到了想要添加推送權利的人的解決方案,(而不是弄清楚Push API的引用位置並將其刪除)。 我看了看Cordova問題ML,但沒有找到任何東西。 人們都知道的任何其他線索將不勝感激!

使用的插件:
org.apache.cordova.console
org.apache.cordova.device
org.apache.cordova.file
org.apache.cordova.inappbrowser
org.apache.cordova.media
org.apache.cordova.network信息
org.apache.cordova.splashscreen

相關的電子郵件摘要,特定信息已替換為[]:

來自:iTunes Store
日期:2014年9月17日星期三下午3:49
主題:iTunes Connect:您的應用“[appName]”(Apple ID:[id])有一個或多個問題
致:[開發者]

親愛的開發者,

我們發現您最近為“[app]”投放了一個或多個問題。 您的投放成功,但您可能希望在下次投放時更正以下問題:

缺少推送通知權利 - 您的應用似乎包含用於向Apple推送通知服務注冊的API,但應用簽名的權利不包括“aps-environment”權利。 如果您的應用使用Apple推送通知服務,請確保在配置門戶中為推送通知啟用了您的應用ID,並在使用包含“aps-environment”權利的配置配置文件對應用進行簽名后重新提交。 有關詳細信息,請參閱“本地和推送通知編程指南”中的“供應和開發”。 如果您的應用不使用Apple推送通知服務,則無需執行任何操作。 您可以從將來的提交中刪除API以停止此警告。 如果您使用第三方框架,則可能需要與開發人員聯系以獲取有關刪除API的信息。

糾正問題后,您可以使用Xcode或Application Loader將新二進制文件上傳到iTunes Connect。

問候,

App Store團隊

如何通過XCODE UI(6.1)做到這一點:

Classes\\AppDelegate.m注釋掉有問題的代碼會讓您的應用程序獲得批准,您希望繼續受益於未來的Cordova升級,因此最好的方法是在編譯期間打開DISABLE_PUSH_NOTIFICATIONS符號,這樣這段代碼就可以了出。

我來自C#背景,所以我理解條件編譯,但我是XCode的新手,所以我不得不做一些研究,找出如何通過UI定義編譯符號。

結果是魔術詞是'預處理器宏'。 這就是你如何以圖形方式實現這一點(注意這是在XCode 6.1中完成的方式):

在此輸入圖像描述

希望這能幫助其他人在同樣的情況下。

Krik是對的! 我發現在/Classes/AppDelegate.m這個API調用肯定是由Cordova 3.5生成的。

我暫時沒有嘗試過,但這些行肯定可以在xCode中注釋,以避免Apple的警告。

- (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];
}

你有沒有安裝Push Plugin? 聽起來你的應用程序包中有相應的代碼。 我會在項目范圍內搜索特定的API調用,例如:

  • didRegisterForRemoteNotificationsWithDeviceToken
  • didFailToRegisterForRemoteNotificationsWithError

死代碼,文件需要刪除。

Heres的完整文檔: https//developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW2

kirkr121都是正確的。

在Cordova的最新版本中,這個有問題的代碼現在可以在#ifndef DISABLE_PUSH_NOTIFICATIONS的包裝內生成。 您需要做的就是在編譯器標志中添加-DISABLE_PUSH_NOTIFICATIONS 對於那些在XCode中target/Build Settings/Custom Compiler Flags/(both C and C++ release)這是在target/Build Settings/Custom Compiler Flags/(both C and C++ release)設置的。

在我們的構建過程中,我們一直在吹走並重建AppDelegate.m文件。 我使用的黑客是:

 sed -i "" -e "s/ifndef DISABLE_PUSH_NOTIFICATIONS/if 0/" build/cordova/platforms/ios/gThrive/Classes/AppDelegate.m
 # That uses the os/x sed to not have push notifications in the app

這讓問題消失了。

正如Charles Merriam指出的那樣,較新版本的cordova-ios可以通過設置預處理器標志DISABLE_PUSH_NOTIFICATIONS來輕松禁用觸摸推送通知。 參見錯誤歷史 。)

您需要使用cordova platform update iosplatform uninstall iosplatform install ios來獲取AppDelegate.m中的新功能。 (也許有比吹掉文件夾更好的方法?)

我找到了一個Cordova on_platform_add鈎子腳本 ,它將在您安裝iOS平台時為您編輯帶有該標志的project.pbxproj。 我需要npm install xcode以使鈎子腳本工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM