不使用推送通知的Cordova应用程序:"缺少推送通知权利"

Ste*_*son 44 android ios cordova

我们有一个基于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-information
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团队

Ste*_*las 49

如何通过XCODE UI(6.1)做到这一点:

在评论有问题的代码时,Classes\AppDelegate.m您的应用程序将获得批准,您希望继续受益于未来的Cordova升级,因此最好的方法是DISABLE_PUSH_NOTIFICATIONS在编译期间打开符号,这样就可以省略这些代码.

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

结果是魔术词是'预处理器宏'.这就是你如何以图形方式实现这一点(注意这是在XCode 6.1中完成的方式):

在此输入图像描述

希望这能帮助其他人在同样的情况下.

  • 加一个详细的图像! (5认同)

小智 21

Krik是对的!我发现这个API调用/Classes/AppDelegate.m肯定是由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];
}
Run Code Online (Sandbox Code Playgroud)

  • 我遇到了同样的问题,从AppDelegate中删除了这个片段,之后没有任何警告.有用! (4认同)