缺少推送通知权限

152

我有一个应用程序提交时被拒绝,并收到以下消息:

缺少推送通知授权 - 您的应用似乎注册了苹果推送通知服务,但应用程序签名的授权未包括“aps-environment”授权。如果您的应用使用苹果推送通知服务,请确保您的App ID已在Provisioning Portal中启用Push Notification,并在使用包含“aps-environment”授权的Distribution provisioning profile签署应用后重新提交。

我检查了我的Ad-hoc provisioning文件,发现有aps-environment和production,但是当我打开Distribution provisioning文件时,却找不到这个设置。

是否这就是导致此错误消息和苹果拒绝的原因,我该如何解决?


我通过以下步骤简单解决了这个问题:https://dev59.com/fl4c5IYBdhLWcg3wapzz#71478084 - M Karimi
17个回答

88

是的,这就是App Store拒绝的原因。如果您的Ad-hoc预配配置文件具有aps-environment键,则意味着您的应用程序在苹果预配门户正确配置。您需要做的就是删除本地计算机上的App Store分发配置文件,然后从预配门户重新下载和安装分发配置文件。新的配置文件应该包含aps-environment键。


只是为了更加清晰明了,这个说法相当明确地表明“分发配置文件必须包含aps-environment等内容”,而且当我在文本编辑器中打开配置文件时,应该能够找到它。 - mirageservo
当我更改了分发配置文件时,我是否需要生成新的SSL证书? - mirageservo
2
不需要新的开发者证书。当您启用推送通知的分发功能时(您必须在某个时候这样做,因为您的 ad hoc 配置文件具有 aps-environment 键),iTunes 供应门户会生成一个包含 aps-environment 键的新的应用商店分发配置文件。您可能只是没有下载和安装最新的配置文件。 - tom
奇怪的事情是,当我在XCode中检查我的帐户详细信息(XCode->首选项->帐户->查看详细信息)时,我看到了刚刚下载的预配资料,但是我没有看到推送通知权限的图标...尽管如此,当我使用它进行验证或提交到应用商店时,我可以看到aps-environment在授权清单列表中。 - Raphael Royer-Rivard
@tom,我没有提供任何推送通知服务,我的AppID也没有勾选推送服务。但我仍然收到了这个警告。有什么解决办法吗? - Rushi trivedi
显示剩余5条评论

45

第一个 App ID

确保您的ID在生产环境中启用推送通知

如下图所示:

enter image description here

第二个证书

从“生产”部分创建两个证书,带有你的ID(已启用推送通知)

App Store 和 Ad Hoc 证书

Apple Push Notification service SSL (Sandbox) 证书

enter image description here

第三个配置文件

从“发布”部分创建带有你的ID的App Store 配置文件

最后

在上传应用程序时,您必须检查使用了哪个配置文件,并拥有许多授权

enter image description here

所有这些情况都会导致此问题的出现,希望对您有帮助


2
这就是我所缺少的。我必须在苹果开发者网站上使用带有推送通知的App ID创建一个新的配置文件。通过新的配置文件,最终将aps-environment授权添加到我的应用程序中。谢谢! - M. Luisa Carrión

42

8
这是典型的苹果公司。我提交构建两个小时后,他们发送了一个错误消息,关于一个我早就解决的问题(在开发门户网站上启用推送通知应用服务),并提供了一个链接到 404 页面的解释。接着发现,真正的问题是当他们升级到一个新版本的软件时,他们没有迁移我的设置(而我被锁定在这个版本)。唉。 - Rembrandt Q. Einstein
3
这里也有同样的情况。我们差点将错误信息视为苹果的故障。 - Vaiden

24

我收到了一个不同的错误信息——在通过Xcode提交应用之前没有为该应用创建特定的App Store分发配置文件。如果您已经安装过通配符App Store配置文件,则我认为Xcode会自动使用它。但是,需要使用推送通知的应用程序需要其自己的配置文件。

解决方法是为该应用创建新的App Store分发配置文件。然后,您可以下载该文件,将其拖放到Xcode中,并修改您的项目构建设置 > 代码签名 > 发布版本,以使用新的配置文件。


14
在@Vaiden的回答基础上,Xcode 8中您可以通过选择目标并点击“修复问题”来解决此问题。当然,您仍需要在苹果开发者门户网站中设置推送通知(您可以使用新的“自动管理签名”选项简化此过程,这可以帮助您省去下载配置文件的麻烦)。
请点击Apple Developer portal链接进入相关页面。
请见以下图片说明:Fix me option

10

对于那些在使用应用程序中遇到这个问题的人,实际上是在使用推送通知:

最近我们的推送证书即将过期,所以我们按照苹果公司提供的标准方式创建了新的开发/生产推送证书(我不会在这里详细解释,当更新您的推送证书供一年使用时,在网络上有大量的信息)。

然而,在这样做之后,这个问题就出现了。无论我们做了什么,我们提交应用程序后都会收到来自苹果的电子邮件。当我们检查苹果成员中心中的分发配置文件设置时,一切看起来都很正常(Push已为我们的App ID启用了生产/开发环境,并且我们的分发配置文件仍然连接到此App ID,我们只是像标准惯例一样为它创建了新的推送证书,供另一年使用)。

最后,这就是最终解决我的方法:

  1. 创建一个新的分发配置文件,指向你的App ID(保留当前的配置文件)
  2. 在Xcode中,通过设置 > 帐户 > 选择你的帐户 > 详情 > 点击刷新图标来刷新你的配置文件
  3. 为你的应用程序手动创建一个授权清单plist文件:
    • 文件菜单 > 新建文件...
    • 选择iOS > 资源 > 属性列表
    • 将新文件命名为“foo.entitlements”(通常,“foo”是目标名称)
    • 点击“Entitlements File”旁边的(+),以添加一个顶级项目(属性列表编辑器将由于文件扩展名而使用正确的模式)
  4. 确保在你的目标的构建设置中使用了这个授权清单文件(目标 > 构建设置 > 搜索“Entitlements”,在CODE_SIGN_ENTITLEMENTS中设置您刚刚创建的授权清单文件的路径)
  5. 确保您的目标中的配置文件/代码签名身份正确地设置为适当的分发配置文件/签名身份(这应该很明显)
  6. 我不确定这是否会影响它(因为目标设置覆盖了工程设置,但我仍然这样做了),请确保您的项目配置文件/签名身份与目标相匹配
在 entitlements 文件中,右键单击空文件并选择“显示原始键/值”。 在 entitlements 文件中添加一个名为“aps-environment”的新条目,并将其值设置为“production”。 需要注意的一点是,如果您之前使用了 keychain-access-groups 权限,则还要在此处添加该密钥,因为某种原因,当我手动执行此操作时,该密钥被清除了。确保值与先前构建中使用的值相同(可以通过在组织者中查找先前构建,在尝试提交到应用商店之前选择您的团队,然后在提交应用程序之前点击“(X)权限”字符串旁边的箭头以展开权限,并查看 keychain-access-group 权限的值来找到该值)。 将您的应用程序存档并尝试提交到最终的“提交”按钮。现在,您应该看到这个应用程序现在是使用您在成员中心创建的新的配置文件进行构建的。现在取消掉它。 回到苹果成员中心,删除您在第1步中创建的新的配置文件。 回到 Xcode,在重复第2步时再次刷新您的配置文件列表。 现在重新对您的应用程序进行归档,您应该看到该应用程序是使用您想要使用的旧的分发配置文件进行构建的,并且正确地具有 aps-environment 权限。提交即完成。

谢谢。#8 对我来说被设置为开发模式,这可能是我们的问题。 - ingage
1
非常感谢,我在这个问题上浪费了整整一天的时间。第四步是问题所在,由于某种原因,在应用商店上传时如果没有指定CODE_SIGN_ENTITLEMENTS,则会忽略授权。 - Mark Kazakov

10

我曾经遇到过同样的问题,我的解决方案是在Target -> Capabilities中添加推送通知的权限。


5
这是我解决问题的方法。(我已经尝试过切换功能开/关、重新创建配置文件等方法。)
构建设置选项卡中,在代码签名权利中,我的.entitlements文件没有链接到所有部分。一旦我将它添加到任何SDK部分,错误就被解决了。 enter image description here

4

修正意见 大家好,我开发了一个应用程序,没有使用任何推送通知功能,但我仍然收到了一封电子邮件。在检查苹果商店连接中我用来创建应用程序的证书、ID和配置文件的捆绑标识符时,我意识到推送通知已经被打开。

你需要做的是:

1.前往苹果开发者登录网站,在那里可以管理你的证书等; 2.选择右侧的“证书、ID和配置文件”选项卡; 3.现在选择“标识符”; 4.从右侧列表中选择捆绑 ID; 5.现在向下滚动,直到看到推送通知; 6.将其关闭; 7.存档你的构建版本并重新上传到苹果商店连接。

希望这可以帮助到你!


4

在iOS开发门户网站的Provisioning Portal中,检查您的应用程序ID是否已启用推送功能。 如果未启用,则启用它,为您的应用程序ID配置推送SSL证书并下载它, 然后再次在Keychain中安装,最后下载您的分发配置文件并安装到Xcode图书馆中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接