首页 > 解决方案 > 如何调试 iOS 不接收推送通知(使用 firebase_messaging 的颤振)?

问题描述

目前,我正在使用flutter firebase_messaging 库来推送iOS 和Android 的通知。

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

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

更多信息:我可以在 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 上收到通知)。

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

标签: iosfirebaseflutterpush-notificationfirebase-cloud-messaging

解决方案


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

1.请求权限

在 iOS 上,您需要请求权限才能发送通知,否则它们永远不会到达。查看特定命令的文档。就我而言,它通过做

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();

检索它。


推荐阅读