如何调试 iOS 不接收推送通知(使用 firebase_messaging 的颤振)?

Posted

技术标签:

【中文标题】如何调试 iOS 不接收推送通知(使用 firebase_messaging 的颤振)?【英文标题】:How to debug iOS not receiving push notifications (Flutter using firebase_messaging)? 【发布时间】:2021-11-26 19:51:53 【问题描述】:

目前,我正在使用 Flutter firebase_messaging 库来推送 iosandroid 的通知。

我在 iOS 上接收由 firebase 控制台发送的通知(通过指定 apnsToken 进行通知测试)或使用旧 HTTP 协议的 curl 请求(仅通知,不发送 iOS 或 Android 有效负载)时遇到问题。 在 Android 上,这两种方法都可以正常工作并收到通知。

我已按照文档中的所有指定步骤操作,但没有成功:

启用推送通知和后台模式(后台获取和远程通知) 注册密钥并将 .r8 导出到 Firebase 控制台 APN 身份验证密钥。 注册一个APP ID(启用推送通知)。 已生成配置文件。 等待 Flutter 端的 Firebase 初始化。 在 iOS 上请求通知权限

更多信息: 我可以在 iOS 和 Android 上获取 APNs ID,所以我猜问题不在于 firebase(核心)配置,而可能在于 firebase 消息传递。但是,iOS APN(仅大写锁定字符和数字)似乎与 Android APN 确实不同。正常吗?

我没有弄乱 FirebaseAppDelegateProxyEnabled,即使我收到以下消息:FIRMessaging Remote Notifications proxy enabled, will swizzle remote notification receiver handlers.

我知道 curl 请求返回 200 OK(响应代码并且我在 Android 上收到通知)。

我忘记了什么步骤?我该如何调试?

【问题讨论】:

【参考方案1】:

根据我的经验,一般来说调试这个是相当困难的。我有一个类似的问题,我发现这是由于我犯了两个错误。虽然您可能已经解决了您的问题,但我会在此处发布此内容,以便其他人可以从中受益。

1。请求权限

在 iOS 上,您需要请求权限才能发送通知,否则它们永远不会到达。具体命令看the documentation。就我而言,它的工作原理是

FirebaseMessaging.instance.requestPermission(
  alert: true,
  announcement: false,
  badge: true,
  carPlay: false,
  criticalAlert: false,
  provisional: false,
  sound: true,
);

2。使用普通令牌,而不是 APNs 令牌

这应该很明显,但不知何故我设法认为如果Platform.isIOS,我需要使用 APNs 令牌。这当然不是真的,你应该总是使用

String? token = await FirebaseMessaging.instance.getToken();

检索它。

【讨论】:

以上是关于如何调试 iOS 不接收推送通知(使用 firebase_messaging 的颤振)?的主要内容,如果未能解决你的问题,请参考以下文章

如何注册 iOS 设备以接收推送通知?

如何在 ios Objective c 中检查推送通知是不是在后台模式下接收?

如何在前台 iOS Swift 3.0 中接收推送通知?

不接收 Twilio 聊天推送通知(Ionic 和 Firebase)

打包 iOS 应用后推送通知停止工作

如果我有免费的 iOS 开发人员配置文件,如何调试“推送通知”?