如何调试iOS无法接收推送通知(使用firebase_messaging的Flutter)?

4

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

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

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

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

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

我没有搞乱FirebaseAppDelegateProxyEnabled,即使我收到以下消息:FIRMessaging Remote Notifications proxy enabled,将交换远程通知接收器处理程序。

我知道curl请求返回200 OK(响应代码),并且我在Android上收到了通知。
我是否忘记了任何步骤?我该如何调试?

我有一个类似的问题。我的 FCM 在安卓上正常工作,但在 iOS 上却不行,即使我按照文档中的每一步操作,甚至尝试了一些 YouTube 视频。你有关于这个问题的任何更新吗?你能弄清楚发生了什么吗? - undefined
我刚刚意识到实际上它是有效的...但只在真实设备上有效。由于某种原因,我的模拟器无法接收到通知。 - undefined
1个回答

1

根据我的经验,通常情况下,调试这个问题非常困难。我曾经遇到过类似的问题,后来发现是我犯了两个错误。虽然您可能已经解决了这个问题,但我还是在这里发布一下,希望其他人也能从中受益。

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

获取它。


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