Flutter iOS 应用提交问题警告:缺少推送通知权利

Posted

技术标签:

【中文标题】Flutter iOS 应用提交问题警告:缺少推送通知权利【英文标题】:Flutter iOS app submission issue warning: Missing Push Notification Entitlement 【发布时间】:2019-08-05 15:33:44 【问题描述】:

将 Flutter 应用上传到 App Store Connect 后,我​​收到以下电子邮件警告:

尊敬的开发者,

我们发现您的应用最近交付的一个或多个问题, “[应用程序名称]”。您的投递成功,但您可能希望更正 您下次交付时会遇到以下问题:

缺少推送通知权利 - 您的应用似乎注册了 Apple 推送通知服务,但该应用 签名的权利不包括“aps-environment” 权利。如果您的应用使用 Apple Push Notification 服务, 确保您的 App ID 在 配置门户,并在使用 包含“aps-environment”的分发配置文件 权利。 Xcode 不会自动复制 aps-environment 在构建时配置配置文件的权利。这种行为是 故意的。要使用此权利,请启用推送通知 在项目编辑器的功能窗格中,或手动添加 您的权利文件的权利。有关详细信息,请参阅 https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/HandlingRemoteNotifications.html#//apple_ref/doc/uid/TP40008194-CH6-SW1.

纠正问题后,您可以使用 Xcode 或 Application 加载程序将新的二进制文件上传到 App Store Connect。

最好的问候,

App Store 团队

我不在我的应用程序中使用推送通知?为什么我会收到此警告?以及如何删除“aps-environment”权利,无论它在哪里,无论它是什么?

注意: 这个 App Store 问题在 SO 上多次出现,有时是因为人们需要添加推送通知(参见 this 和 this),有时是因为他们没有(参见this 和 this)。不过,在我的情况下,这似乎与 Flutter 相关,所以我添加了一个新问题。

【问题讨论】:

【参考方案1】:

大家都知道,只要您真的不使用推送通知,这不会导致您的应用被拒绝。因此,您可以放心 (?) 忽略此警告并继续提交您的应用。

此问题已在 GitHub here 上进行了描述,并且正在讨论解决方案 here。它显然与使用 UIApplicationDelegate 回调的 Flutter 有关:

- (void)application:(UIApplication*)application
    didReceiveRemoteNotification:(NSDictionary*)userInfo
          fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler;

我会让其他人更清楚地解释确切的原因。密切关注 GitHub 问题。

现在我将忽略警告。

更新:我提交了我的应用程序,它被接受了,从那以后它没有任何问题。所以请忽略警告。

【讨论】:

现在,这个问题应该已经解决了。更新你的 Flutter 版本github.com/flutter/flutter/issues/9984 我刚刚更新了颤振,仍然遇到这个问题@VinceVarga,有什么想法吗?来自 Flutter Doctor:Channel stable,v1.5.4-hotfix.2,在 Mac OS X 10.14.5 18F132 上,语言环境 en-US 尝试选择不同的频道,该修复已在两周前合并。稳定版的发布频率低于此(请参阅github.com/flutter/flutter/wiki/Flutter-build-release-channels)。我在 dev 上,我不再收到来自 Apple 的投诉邮件 Flutter 1.7.3 • channel dev 更新,可能还没有修复。最新状态见:github.com/flutter/flutter/issues/9984#issuecomment-505602616 这个问题在v1.12.13+hotfix.8依然存在【参考方案2】:

截至今天,这个问题在 Flutter 中仍未解决。 请参阅Issue 9984。

虽然这不会在 App Store 中造成任何拒绝,但它仍然需要修复,并且似乎有解决方法(在上述问题中也是 described):

ios/Runner/Runner.entitlements 下添加一个文件 Runner.entitlements,其中包含以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>aps-environment</key>
    <string>development</string>
</dict>
</plist>

【讨论】:

这意味着您也在请求允许发送推送通知而不实际发送推送通知,不是吗? @Suragch 基本上是的。它将推送通知环境设置为开发。如果您使用的是 XCode,它将自动设置。另见aps-environment 几个月前我添加了这个,错误消失了。然而,今天警告再次出现。我应该删除此文件还是存在与权利相关的任何其他潜在问题?【参考方案3】:

看来我的修复只修复了日志。即使委托方法是动态实现的,Apple 仍会发送电子邮件。

在我们修复它之前,您现在可以做的一件事是为您的 iOS 应用启用推送通知功能。

Xcode 有一个简单的方法来做到这一点。为此,您必须在 Signing & Capabilities 下添加“Push Notifications”。 Xcode 将为您生成“Runner.entitlements”文件。你可以关注这里

    用 Xcode 打开你的 ios 文件夹

    Runner 目标仍处于选中状态,点击Signing & Capabilities 标签,然后点击+ Capability 按钮。在过滤器字段中输入“push”,然后按 Enter。

    添加推送通知权限后,您的项目应如下所示并且您的项目中将创建 Runner.entitlements 文件

【讨论】:

这应该被标记为接受的答案!我拥有所有的功能,他们的名字旁边有(Debug) 提示。在我删除并重新添加所有这些之后,他们的标题旁边不再有 (Debug) 并且文件 Runner.entitlements 已成功生成。谢谢! 拯救了我的一天,这个答案应该被标记为正确。 在 Flutter 版本 2.2.1 上表现出色! 即使在 2 年后,这东西对我也有帮助,lol tnx m8

以上是关于Flutter iOS 应用提交问题警告:缺少推送通知权利的主要内容,如果未能解决你的问题,请参考以下文章

Flutter ios 应用提交:Info.plist 中缺少目的字符串

为啥我收到此警告“缺少推送通知权利”

iOS 应用提交:缺少 64 位支持

Flutter 中的 AndroidManifest 中缺少默认通知通道元数据

在没有推送通知的情况下使用 Parse

如何在 Flutter iOS 中激活应用内购买