如何调试 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 库来推送 ios 和 android 的通知。
我在 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 Objective c 中检查推送通知是不是在后台模式下接收?