React Native FCM iOS推送通知未发送。

9
首先,环境是React Native,我尝试按照rnfirebase包中的指示在iOS上设置推送通知,以下是我所做的步骤,并在真实的iPhone设备上进行了测试。
  1. 创建密钥

enter image description here

  1. 然后添加到Firebase

enter image description here

  1. 添加Google-service.plist文件,并按照Firebase文档中的设置进行设置

enter image description here

激活能力

在此输入图片描述
  1. 然后我安装pod包

enter image description here

  1. 运行应用程序获取令牌

enter image description here

  1. 使用云消息控制台发送令牌

通知未被传送,我不知道问题出在哪里,因为消息也是从 FCM 发送的,而在 APNS 上发生了什么错误,让我感到困惑。

提前感谢。

并且尝试通过直接连接 Pusher 来解决enter image description here,但仍然没有收到。

然后尝试使用与 Firebase 相同的证书 Onesignal,即使在测试消息上也可以正常工作。


只是为了澄清,您是在真实的iOS设备上进行测试吗?您无法使用iOS模拟器测试通知。 - Dan
@Dan 是的,我在 iPhone 上进行测试。 - krissanawat
还有几个问题,您的应用程序是在前台还是后台运行?如果在前台,请检查应用程序上的事件监听器。如果在后台,请尝试从Firebase控制台或其他方式发送它。 - Ashwin Mothilal
@krissanawat,您能否提供完整的AppDelegate.m文件以及定义“firebase”工作流程的React-Native代码? - Neeko
@Neeeko appdelegate 在这里 -> https://gist.github.com/krissnawat/4a8fdcb2526434ad3a037237ebe81eec 用于 App.js 的获取令牌代码 -> https://gist.github.com/krissnawat/c24701c42e8be641aa72bf15196e4723 - krissanawat
请查看这篇文章:https://onesignal.com/blog/ios-13-introduces-4-breaking-changes-to-notifications/ 如果您的设备正在使用 iOS 13.0 或更高版本,可能会受到最新更改的影响。建议升级版本,如此处所提供的建议:https://github.com/invertase/react-native-firebase/issues/2565#issuecomment-530367283同时,请查看此解决方案:https://github.com/invertase/react-native-firebase/issues/2956#issuecomment-562128121 - Adam Tucholski
1个回答

1
您在Pusher中使用的令牌似乎不正确。我的远程通知令牌看起来像这样。

enter image description here

我只是在测试静默推送,但正常警报的令牌看起来会很相似。这是我用来获取令牌的代码。我猜你正在向 FCM 推送一个错误的令牌。

fileprivate func convertHexDataToString(_ data: Data) -> String {
    var string: String = ""
    for i in 0..<data.count {
        string += String(format: "%02.2hhx", data[i] as CVarArg)
    }
    return string
}

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    let tokenString = convertHexDataToString(deviceToken)
    #if DEBUG
    print("APN sandbox token: '\(tokenString)'")
    Messaging.messaging().setAPNSToken(deviceToken, type: .sandbox)
    #else
    print("APN prod token: '\(tokenString)'")
    Messaging.messaging().setAPNSToken(deviceToken, type: .prod)
    #endif        
}

我获取由rnfirebase包生成的令牌,如果包错误,我在哪里获取令牌? - krissanawat
这两个方法在AppDelegate中。如果你将它们添加到那里,然后调用注册推送通知,操作系统将调用didRegisterForRemoteNotificationsWithDeviceToken方法来打印令牌。我建议先专注于让pusher工作,然后再调试FCM。如果pusher不起作用,那么FCM也不会起作用。 - TALE

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