读取超时的 Firebase 消息注销通知失败

Posted

技术标签:

【中文标题】读取超时的 Firebase 消息注销通知失败【英文标题】:Firebase Messaging unregister notification for read_timeout failed 【发布时间】:2021-09-16 21:47:52 【问题描述】:

我试图从一台设备向另一台设备发送通知,让用户知道有一条消息等待他。

当我试图捕捉和处理 RemoteMessage 时,这是控制台打印的内容。它发生在 ios 物理设备上。

该功能以前可以完美运行,但现在无法通过设备客户端向其他用户发送通知。

功能概览:

  static Future<void> sendNotificationToOtherUser(
      String title, String body, String token) async 
    final headers = 
      'content-type': 'application/json',
      'Authorization':
          'key=I hide KEY but I assure you there is nothing wrong with key'
    ;
    List<String> list = List();
// token is not null
    list.add(token);
    final postUrl = 'https://fcm.googleapis.com/fcm/send';
    final data = 
      "registration_ids": list,
      "notification": 
        "title": '$title',
        "body": '$body',
      ,
    ;

    final response = await http.post(Uri.parse(postUrl),
        body: json.encode(data),
        encoding: Encoding.getByName('utf-8'),
        headers: headers);

    if (response.statusCode == 200) 
      // it prints 200 so works perfectly
      print(response.body);
      print('test ok push CFM');
      return true;
     else 
      print(response.body);
      print(' CFM error');
      // on failure do sth
      return false;
    
  

似乎一切正常,但由于我在下面放置的错误,其他设备无法捕获通知并显示它。 错误:


[connection] nw_endpoint_handler_set_adaptive_read_handler [C6.1 216.58.212.42:443 ready channel-flow (satisfied (Path is satisfied), viable, interface: en0, ipv4, dns)] unregister notification for read_timeout failed
[connection] nw_endpoint_handler_set_adaptive_write_handler [C6.1 216.58.212.42:443 ready channel-flow (satisfied (Path is satisfied), viable, interface: en0, ipv4, dns)] unregister notification for write_timeout failed

图书馆:

  firebase_core: ^1.0.3
  firebase_auth: ^1.0.2
  cloud_firestore: ^1.0.4
  firebase_storage: ^8.0.1
  firebase_messaging: ^10.0.0

Flutter SDK 版本:

[✓] Flutter (Channel stable, 2.2.2, on macOS 11.4 20F71 darwin-x64, locale
    en-GB)
    • Flutter version 2.2.2 at /Users/user/development/flutter
    • Framework revision d79295af24 (4 weeks ago), 2021-06-11 08:56:01 -0700
    • Engine revision 91c9fc8fe0
    • Dart version 2.13.3

【问题讨论】:

发现问题了。我需要在 Firestore 中刷新 FCM 令牌才能收到通知,因为该令牌不再有效。 您是否至少收到了推送通知?我有同样的问题,但我正在接收推送通知并且它们正在显示,但我无法访问 onMessage 侦听器甚至后台侦听器上的 RemoteMessage。我一直在寻找解决方案,非常感谢您对此的回应。 您是否尝试强制刷新 FCM 令牌?我通过这样做解决了它。 @马兹 是的,我们发现了问题,我使用的是 getAPNSToken 而不是 getToken。我们正在使用 Django 及其包来发送通知。我不知道这有什么关系,但这就是解决方法。感谢您的回复! 【参考方案1】:

如果您想隐藏这些错误,请执行以下操作:

    从 Xcode 菜单打开:产品 > 方案 > 编辑方案 左侧项目“运行”->选项卡“参数” 添加环境变量:

OS_ACTIVITY_MODE = 禁用

https://developer.apple.com/forums/thread/681040

【讨论】:

这不是解决方案。所有这一切都是关闭所有调试日志记录,包括有用的东西。

以上是关于读取超时的 Firebase 消息注销通知失败的主要内容,如果未能解决你的问题,请参考以下文章

用户注销 React Native 应用程序时如何删除 Firebase 云消息传递令牌?

注销时清除超时的问题

Firebase 会惩罚失败的推送通知吗?

无法读取邮递员的 Firebase 通知

如何从 iOS 中的 Firebase 消息通知中获取主题?

跟踪 iOS 的 Firebase 通知