【问题标题】:App rejected because of "Missing Push Notification Entitlement"应用因“缺少推送通知权利”而被拒绝
【发布时间】:2011-04-19 15:55:49
【问题描述】:

最近我的申请在上传时被拒绝了。 Apple 审核团队说我的应用“缺少推送通知权利”

这是他们提供的信息:

缺少推送通知权利 - 您的应用向 Apple 推送通知服务注册,但应用程序签名的权利不包括所需的“aps-environment”权利。确保您已为此应用启用推送通知服务,并且您已下载包含“aps-environment”权利的分发配置文件。

我的应用程序的早期版本曾经有推送通知,而我的应用程序二进制文件从未因此而被拒绝。我应该在这里做什么?

【问题讨论】:

    标签: ios apple-push-notifications


    【解决方案1】:

    在任何文本编辑器中打开您的配置文件并搜索“环境”。

    你应该找到:aps-environment

    如果您在配置文件中没有看到 aps-environment,则您的 Apple 配置证书存在问题。

    如果您创建了没有推送通知的证书,然后又添加了推送通知服务,Apple 不会更新您的配置文件。

    您需要创建一个新的配置文件。使用这个新的 Provisioning Profile 对二进制文件进行签名,一切顺利。

    【讨论】:

    • 这个答案对我帮助很大
    【解决方案2】:

    我已经重新创建了我的分发配置文件并使用它构建了我的应用程序。此更改修复了缺少推送通知权利的问题。

    【讨论】:

      【解决方案3】:

      如果您正在提交一个 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];
      }
      

      希望这可以为您节省几个小时 ;-)

      【讨论】:

      • Cordova 4.3.0 仍然需要这个,但是他们添加了一个 DISABLE_PUSH_NOTIFICATIONS 宏来在一个地方禁用代码。现在只需在AppDelegate.m 的头部添加#define DISABLE_PUSH_NOTIFICATIONS 就可以了。
      • 对于 cordova 5.x 也是需要的。 #define DISABLE_PUSH_NOTIFICATIONS 解决了。这似乎取决于您安装的插件。在我的例子中,一个 IAP 插件会产生这个错误。
      【解决方案4】:

      我遇到了同样的问题,我通过重新创建配置文件来解决它。来自本地和推送通知指南中的"Provisioning and Development"

      团队管理员或团队代理接下来必须创建在远程通知开发的服务器端使用的配置文件(开发或分发)。供应配置文件是资产的集合,它将应用程序的开发人员及其设备与授权的开发团队相关联,并使这些设备能够用于测试。该配置文件包含证书、设备标识符、应用程序的捆绑 ID 和所有权利,包括 .所有团队成员都必须在他们将运行和测试应用程序代码的设备上安装配置文件。

      【讨论】:

      • 也适用于我,我在创建 AppStore 配置文件后为我的 AppID 启用了 APNS,因此似乎 APNS 权利未包含在配置文件中,因此您必须重新创建它。
      【解决方案5】:

      我的案例:我已经为我的 appstore 应用程序的更新实施了推送通知。由于推送通知实施之前的配置文件无效,我创建了新的 Appstore 分发配置文件,并使用新配置文件构建了应用程序并上传到商店。但是我收到一封邮件说“缺少推送通知权利”。

      发现:我发现在归档时,Xcode 使用了错误(无效/旧)的配置文件。所以从会员中心删除了旧的配置文件,它解决了问题

      【讨论】:

      • 在我的例子中,Xcode 使用自己的默认配置文件。我应该怎么做 Xcode 使用我的应用程序配置文件
      • - 您是否尝试在 Build Settings->Code Sigining 中提及您的配置文件。 - 即使在要求使用您的 prov 配置文件后,如果 Xcode 使用默认 prov 配置文件,请在会员中心删除默认 prov 配置文件
      【解决方案6】:

      我收到了同样的错误消息,但重新创建我的配置文件并没有消除它。

      相反,我发现我的应用包含一些未使用的与 APNS 相关的杂散符号(在库中)。显然,他们导致静态分析器将应用程序标记为使用推送通知(它没有)。 #ifdef-ing out the symbols 允许我的应用在没有 aps-environment 授权的情况下被接受。

      【讨论】:

      • 谢谢。经过一整天的困惑,我在这里找到了您的答案并在appDelegate中注释掉了[[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];,这似乎已经解决了。
      【解决方案7】:

      我在使用 Cordova 应用程序时也遇到了这个问题,经过一番阅读后,这似乎是当今的一个常见问题。

      为什么会这样?

      由于您提到您的应用已使用推送通知获得批准,因此最有可能的情况是您的应用的 Provisioning Profile 在提交到 AppStore 时发生了更改。也许你:

      1. 在 XCode 中重建您的项目,或者
      2. 移动到另一台计算机并忘记告诉 XCode 正确的配置文件是什么,或者
      3. 有人坐在您的计算机上并对其进行了更改,或者

      发生此问题是因为权限是通过配置文件收集的。如果您忘记将应用程序的配置文件链接到具有“推送通知”权利的 AppID(请注意,XCode 默认使用通配符开发人员配置证书自动执行此操作),那么您可能会收到此消息,直到您排序出许可。

      如何在 CORDOVA 应用程序中消除对推送通知的需求:

      收到此消息时,我正在提交一个 Cordova 应用程序,虽然 @jlapoutre 发布的解决方案足以让您的应用程序获得批准,但您希望继续从 Cordova 升级中受益,因此最好的办法是利用条件编译(即触发#ifndef DISABLE_PUSH_NOTIFICATIONS 指令,该指令告诉XCode 编译你的应用程序而忽略了这段代码)。

      条件编译在 XCode 中也称为“预处理器宏”。这就是您可以通过 UI 以图形方式完成此操作的方式(请注意,这是在 XCode 6.1 中完成的方式):

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

      【讨论】:

        【解决方案8】:

        我最近在向启用了推送服务的应用添加 Today Extension 后遇到了这个问题。终于意识到 Xcode 为 Today Extension 生成的 Mobile Provisioning 配置文件没有启用推送通知服务。一旦我为 Today Extension 启用了推送服务,来自 Apple 的警告就消失了。

        【讨论】:

          【解决方案9】:

          步骤

          1. 启用推送通知服务(生产推送 SSL 证书)

          2. 创建/重新创建分发配置文件并构建您的 具有更新的分发配置文件的应用程序。

          以下资源可能对您有所帮助

          【讨论】:

            【解决方案10】:

            我也有同样的问题。我已经解决了。

            我认为这个问题是在将推送通知功能添加到 AppID 并且没有重新创建配置时引起的。 添加 iCloud 功能时我们会收到警告:

            您为此 App ID 创建的所有新配置文件都将为 iCloud 启用。如果您希望为与此 App ID 关联的任何现有配置文件启用 iCloud,您必须手动重新生成它们

            我认为当我们在 AppID 中添加一些功能时,我们应该手动重新生成与该 AppID 相关的所有配置。

            我想是的

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-11-28
              • 2015-11-21
              • 2018-09-27
              • 2016-07-09
              • 2019-10-27
              • 2015-12-01
              相关资源
              最近更新 更多