Android Cordova应用程序不支持';t使用推送通知:";缺少推送通知权限“;

Android Cordova应用程序不支持';t使用推送通知:";缺少推送通知权限“;,android,ios,cordova,Android,Ios,Cordova,我们有一个基于Cordova的iOS应用程序,不使用推送通知。从Cordova 3.5.0开始,我们向app store提交的每一份文件都会产生一封电子邮件,通知我们我们的应用程序包含用于向苹果推送通知服务注册的API,但没有推送通知权限 该应用程序每次都被接受,因为我们实际上什么都不使用推送通知。然而,如果苹果决定改变他们关于这些API引用是否可接受的政策,我希望避免触发此警告 我们以前的Cordova版本没有遇到过这个问题,我们自己也没有在Objective-C中做过任何工作。这是Cordo

我们有一个基于Cordova的iOS应用程序,不使用推送通知。从Cordova 3.5.0开始,我们向app store提交的每一份文件都会产生一封电子邮件,通知我们我们的应用程序包含用于向苹果推送通知服务注册的API,但没有推送通知权限

该应用程序每次都被接受,因为我们实际上什么都不使用推送通知。然而,如果苹果决定改变他们关于这些API引用是否可接受的政策,我希望避免触发此警告

我们以前的Cordova版本没有遇到过这个问题,我们自己也没有在Objective-C中做过任何工作。这是Cordova 3.5的已知问题吗?搜索产生了一些有类似问题的人,但我只为那些希望添加推送权限的人找到了解决方案(而不是找出推送API的引用位置并将其删除)。我看了一下科尔多瓦发行的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商店
日期:2014年9月17日星期三下午3:49
主题:iTunes Connect:您的应用程序“[appName]”(苹果ID:[ID])有一个或多个问题
致:[开发商]

尊敬的开发商:

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

缺少推送通知权限-您的应用程序似乎包含用于向Apple推送通知服务注册的API,但应用程序签名的权限不包括“aps环境”权限。如果您的应用程序使用Apple推送通知服务,请确保您的应用程序ID已在设置门户中启用推送通知,并在使用包含“aps环境”权限的分发设置配置文件对您的应用程序进行签名后重新提交。有关更多信息,请参阅《本地和推送通知编程指南》中的“资源调配和开发”。如果您的应用程序未使用Apple推送通知服务,则无需执行任何操作。您可以从以后的提交中删除API以停止此警告。如果使用第三方框架,则可能需要联系开发人员以获取有关删除API的信息

更正问题后,可以使用Xcode或应用程序加载程序将新的二进制文件上载到iTunes Connect

问候,

应用商店团队


您是否在某个时候安装了推送插件?听起来您的应用程序包中有相应的代码。我会在项目范围内搜索特定的API调用,例如:

  • didRegisterForRemoteNotificationsWithDeviceToken
  • 未注册远程通知错误
死代码、文件需要删除


以下是完整的文档:

克里克是对的!我在Cordova 3.5生成的
/Classes/AppDelegate.m
中发现了这个API调用

我暂时还没有试过,但这些行肯定可以用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];
}
-(无效)应用程序:(UIApplication*)应用程序
DidRegisterForRemotonificationswithDeviceToken:(NSData*)deviceToken
{
//转播
NSString*标记=[[[deviceToken描述]
StringByReplacingOfString:@“with String:@”]
StringByReplacingOfString:@“和字符串:@]”发生;
[[NSNotificationCenter defaultCenter]postNotificationName:CDVRemoteNotification对象:令牌];
}
-(无效)申请:(UIApplication*)申请
注册远程通知失败错误:(n错误*)错误
{
//转播
[[NSNotificationCenter defaultCenter]postNotificationName:CDVRemoteNotificationError对象:error];
}
和都是正确的

在科尔多瓦的最新版本中,这个冒犯代码现在在“C++”的包中产生了帮助。适用于XCode内部的建筑

在我们的构建过程中,我们经常清理和重建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 ios
platform uninstall ios
platform install ios
才能在AppDelegate.m中获得新的文件(也许有比吹走文件夹更好的方法?)


我找到了一个可以在您安装iOS平台时为您编辑带有该标志的project.pbxproj。我需要
npm安装xcode
才能让钩子脚本正常工作。

如何通过xcode用户界面(6.1)执行此操作:

虽然在
Classes\AppDelegate.m
中注释掉有问题的代码将使您的应用程序获得批准,但您希望继续从未来的Cordova升级中获益,因此最好的方法是在编译过程中打开
禁用推送通知
符号,以便忽略这部分代码

我来自C#背景,所以我理解条件编译,但我对XCo是新手