不使用推送通知的cordova应用程序:“缺less推送通知权利”

我们有一个基于cordova的iOS应用程序,不使用推送通知。 从Cordova 3.5.0开始,我们向应用程序商店提交的每个提交信息都会通过电子邮件通知我们,我们的应用程序包括用于向Apple的推送通知服务注册的API,但不具有推送通知权利。

该应用程序每次都被接受,因为我们实际上并没有使用任何推送通知。 不过,我想避免触发这个警告,以防苹果决定改变他们的政策是否这些API参考是可以接受的。

我们没有遇到以前版本的Cordova的问题,而且在Objective-C中我们自己也没有做过任何工作。 这是Cordova 3.5的一个已知问题吗? search已经产生了一些有类似问题的人,但我只find想要添加推送权利的人的解决scheme(而不是找出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
date:2014年9月17日星期三下午3:49
主题:iTunes Connect:您的应用程序“[appName]”(Apple ID:[id])有一个或多个问题
致:[开发人员]

亲爱的开发者

我们发现您最近一次发送“[app]”的一个或多个问题。 您的交货成功,但您可能希望在下一次交货时更正以下问题:

缺less推送通知权利 – 您的应用程序似乎包含用于注册Apple推送通知服务的API,但应用程序签名的权利不包含“aps-environment”权利。 如果您的应用程序使用Apple推送通知服务,请确保您的应用程序ID在供应门户中启用了推送通知,并在使用包含“aps-environment”权利的分发供应configuration文件签署应用程序后重新提交。 请参阅本地和推送通知编程指南中的“供应和开发”了解更多信息。 如果您的应用程序不使用Apple推送通知服务,则不需要执行任何操作。 您可以从将来的提交中删除API来停止此警告。 如果您使用第三方框架,则可能需要联系开发人员以获取有关删除API的信息。

纠正问题后,您可以使用Xcode或Application Loader将新的二进制file upload到iTunes Connect。

问候,

App Store团队

克里克是对的! 我发现这个API在/Classes/AppDelegate.m当然是由Cordova 3.5生成的。

我暂时没有尝试过,但是这些行当然可以在xCode中注释,以避免苹果的警告。

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

如何通过XCODE UI来实现(6.1):

虽然注释Classes\AppDelegate.m代码会让你的应用程序获得批准,但是你希望继续从未来的Cordova升级中受益,所以最好的方法是在编译过程中打开DISABLE_PUSH_NOTIFICATIONS符号,出。

我来自C#的背景,所以我了解条件编译,但我是XCode的新手,所以我不得不做一些研究,找出如何通过用户界面定义编译符号。

原来的魔术字是“预处理器macros”。 这就是你可以如何完成这个graphics(请注意,这是在XCode 6.1中完成的方式):

在这里输入图像说明

希望这可以帮助其他人在相同的情况下。

你有没有安装Push插件? 听起来就像你的应用程序包中有相应的代码。 我会做一个项目范围的search特定的API调用,例如:

  • didRegisterForRemoteNotificationsWithDeviceToken
  • didFailToRegisterForRemoteNotificationsWithError

死代码,文件需要被删除。

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

正如Charles Merriam指出的那样,新版本的cordova-ios通过设置预处理器标志DISABLE_PUSH_NOTIFICATIONS可以很容易地禁用触摸推送通知。 ( 查看错误历史logging )

您将需要cordova platform update iosplatform uninstall iosplatform install ios以获得AppDelegate.m中的新function。 (也许有比吹走文件夹更好的方法吗?)

我find了一个Cordova on_platform_add钩子脚本 ,当你安装iOS平台时,将会为你编辑project.pbxproj。 我需要npm install xcode来使钩子脚本工作。

kirk和r121都是正确的。

在最新版本的Cordova中,这个违规代码现在在#ifndef DISABLE_PUSH_NOTIFICATIONS的包装中有#ifndef DISABLE_PUSH_NOTIFICATIONS生成。 所有你需要做的是添加-DISABLE_PUSH_NOTIFICATIONS到你的编译器标志。 这是在XCode内部target/Build Settings/Custom Compiler Flags/(both C and C++ release)设置的。

在我们的构build过程中,我们一直在吹拂和重buildAppDelegate.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 

这只是让问题消失了。