缺失推送通知权限警告

70
我们已创建了一个App ID,分发证书和配置文件。最初未启用推送通知。 现在我们需要在应用程序中实现推送通知。 我们已在应用程序D中启用了推送通知,检查了配置文件,发现配置文件无效,更新后下载最新的配置文件以供下一次使用。 然后,我们通过APNS在我们的代码中集成了推送通知API。 在将应用程序上传到iTunesConnect后,我们收到了来自Apple的以下电子邮件: “亲爱的开发者, 我们发现了你最近提交的“Swanvi”交付中存在一个或多个问题。您的提交成功了,但是您可能希望在下次提交时纠正以下问题: 缺少推送通知权利 - 您的应用程序似乎包含用于注册苹果推送通知服务的API,但应用程序签名的权利不包括“aps-environment”权利。如果您的应用程序使用苹果推送通知服务,请确保您的App ID已在Provisioning Portal中启用推送通知,并在使用包括“aps-environment”权利的分发配置文件为您的应用程序签名后重新提交。有关更多信息,请参见Local and Push Notification Programming Guide中的“Provisioning and Development”。如果您的应用程序不使用苹果推送通知服务,则无需采取任何操作。您可以从未来的提交中删除API以停止此警告。如果您使用第三方框架,则可能需要联系开发人员以获取有关删除API的信息。 纠正问题后,您可以使用Xcode或Application Loader将新二进制文件上传到iTunes Connect。” 我们已重新检查了App ID。推送通知已针对开发和生产进行了启用。 在配置文件中,推送通知选项显示出来了。 为什么我们会通过电子邮件收到这个警告?

感谢您的回复。我已经阅读了参考资料,但对我来说并没有多大帮助,因为我已经按照其中所写的步骤完成了所有工作。该应用程序目前正处于等待审核的阶段,那么它会被拒绝吗? - Bis
大约一年半前,这将是拒绝应用程序的原因。我现在不太确定,因为我认为很多应用程序验证现在在组织器中“验证”应用程序时进行。因此,如果它通过了,您可能有机会获得批准,但不要指望它。 - Yanchi
嗨,@Bis,我现在遇到了同样的问题。我的应用程序状态是“等待审核”。你能否建议我该怎么做?而且,我在我的iOS应用程序中没有使用任何推送通知。 - Vaishali Modi
再次向苹果发出请求。它会被接受的。 - Bis
@Bis,你能否帮忙确认一下我的回答是否正确呢?如果是的话,你可以将其设置为正确答案,帮助其他开发人员解决类似问题。 - Anish Kumar
显示剩余2条评论
8个回答

49

你需要看到两个东西: 你在Xcode上使用的配置文件以及在developer.apple上的配置文件。

这一切都与配置文件有关。

步骤1: 进入https://developer.apple.com/account/ios/certificate/,查看你的应用程序需要的 Active iOS 分发配置文件。然后单击它,确保启用了 Push NotificationEnabled Services。如果没有,则单击编辑并按照 Apple 提供的步骤启用它。如果已启用,则很好。

distribution link

步骤2: 删除任何与您的应用程序相关的无效配置文件(只删除 YOUR app 的无效配置文件)。接下来的步骤会告诉你为什么要这样做。

步骤3: 转到 Xcode-> Preference-> View Details (for your Account) ->[可选:要确定无效的配置文件已经被删除,请右键单击任何配置文件,选择 "Show in Finder",然后从该文件夹中删除/移动所有的配置文件]。现在点击 Download All Profile。这将使用当前的配置文件替换本地配置文件。单击 DONE。

步骤4: 转到您的应用程序 Targets-> Build Settings-> 在 Code Signing 中展开您的配置文件以显示 DebugRelease 选项卡。默认情况下,它将自动使用无效的配置文件(这就是为什么你的应用程序可能会自动使用我们在步骤2中刚刚删除的无效配置文件)。对于Release,为了更安全,请选择在第1步中启用了 Push Notifications 的 Active 配置文件。

就是这样。

现在你不应该再收到任何电子邮件了。


我怎么知道哪个是无效的?我看到了多个配置文件,例如“XC *”,“XC Adhoc”,“iOS Team ...”等。 - burakcalik
@burakcalik XC配置文件是由XCode默认创建的。您应该使用您想要的那个,大多数情况下,它是您使用正确的应用程序证书自己创建的预配配置文件。对我来说,“XC *”和“XC Adhoc”都是无效的或不是正确的预配配置文件,所以我将它们删除了。您也可以这样做...在任何情况下都不会出现问题,所以不用担心。如果需要,XCode会生成新的预配配置文件。 - Anish Kumar
刷新按钮已经不存在了。XCode 8 - James O'Brien
1
@JamesO'Brien 请点击“下载全部”获取XCode 8及以上版本。它执行完全相同的功能。 - Anish Kumar
删除问题的配置文件并在您的本地系统上创建一个新的以替换它,如果您最近刚刚像我一样创建了 AFN 证书。 - Itachi

17

@Djeeraj V.S.是正确的。Cordova增加了一些条件编译,以便对于不需要推送通知的应用程序可以取消此要求。

您可以按照这个答案Classes\AppDelegate.h中注释掉代码,但最好通过UI添加编译符号DISABLE_PUSH_NOTIFICATIONS,以便您可以继续受益于未来的Cordova升级。

我来自.NET背景,所以我熟悉条件编译,但必须花费一些时间来解决如何在XCode中使编译器标志工作。

事实证明,这里的魔术词是“预处理器宏”。以下是如何通过UI图形方式完成(请注意,这是XCode 6.1中完成的方式):

enter image description here

希望这能帮助其他处于同样情况下的人们。


2
OP 正在尝试为一款之前不支持 Push 的应用程序添加推送通知功能。而这个答案似乎是关于移除错误添加的推送功能的。 - pkamb
不清楚为什么这个答案会出现在这个问题上——它绝对不是问题“我们已经在App ID中启用了推送通知..关于丢失的电子邮件...”的答案。需要解释它是一个回答什么的,以及为什么它在这里。 (stackoverflow可能出现了故障吗?) - ToolmakerSteve

14
在我的情况下,我再次检查了项目属性中的“功能”页面,并在相应的APNS菜单中按下了“修复问题”按钮。现在它应该看起来像这样: enter image description here XCode 11. 处理“能力”按钮(+)的按下操作 enter image description here

1
这不够。 - Tom
1
@Tom,在我的情况下,它是这样的。 - Vyacheslav
抱歉,我的评论末尾没有发送:我还必须将自动生成的授权文件复制到项目的根目录。 - Tom
@Tom,所以你可以写下自己的答案。如果你找到了另一个解决方案,就不需要对这个答案进行负评。 - Vyacheslav
在XCode 10.1中,他们从功能选项中删除了推送通知选项。我该如何关闭它? - Mohammad Mirzakhani
1
@MohammadMirzakhani 添加了新的截图。 - Vyacheslav

3

我通过以下步骤解决了这个问题:

  1. 使用 Xcode 打开您的项目
  2. Runner 选项卡中点击 Signing & Capabilities,然后点击 + Capability 按钮。在筛选字段中输入 push 并按 Enter 键。
  3. 添加 push notifications 权限后,将在您的项目中创建 Runner.entitlements 文件。

2
我遇到了同样的警告,以下是我解决问题的方法。
首先,在存档项目时,如果您在授权中没有看到“aps-environment”,而您的应用程序使用推送通知,则会出现问题。
解决步骤如下:
1. 确保您的分发配置文件在苹果门户网站上有效。如果无效,则重新生成它。 2. 如果您的分发配置文件有效,请在XCode中导航到“Preferences”,然后单击“View Details”。此时,在“Provisioning Profiles”下,请确保您没有无效的分发配置文件。如果有无效的文件,则右键单击并将其移到废纸篓中。如果您没有有效的文件,则可以从门户网站下载。 3. 转到“Build Settings -> Code Signing”,然后为所有内容选择分发配置文件。
这时,如果您进行存档操作,您可以在授权中看到“aps-environment”,并且不会收到警告电子邮件。

2

根据我的情况,以下方法奏效了。 Xcode 9.2

  1. Build Target > Signing 中禁用出现的 Automatically manage signing
  2. 手动导入provisioning profile。

1

2021 Xcode 12.4

我有类似的问题。我的应用程序使用推送通知。在旧版本中,我从未收到过这样的来自苹果的邮件。我认为自动管理签名存在一些问题。
解决方案手动进行应用程序签名

  1. 禁用“自动管理签名”选项,该选项位于签名和能力下。
  2. 手动导入描述文件。 enter image description here

0

我有一个 Cordova 应用程序,之前有通知功能,但想从应用程序中删除它。我尝试按照上面的答案操作,但在上传构建时仍然遇到了此问题。我意识到,我安装了一个插件,该插件使用了通知设置,并且某种方式保持了一些通知的激活设置。

我通过完全删除 ios 平台 cordova platform rm ios,再次添加它 cordova platform add ios 并确保从 ios.jsonfetch.json 文件中删除了插件来解决这个问题。


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