我正在将FB 5.18上的一个快速应用程序迁移到RN firebase,并且不再继续进行迁移。如果我删除并重新下载RN版本,一切正常。我已经尝试过像这样检查令牌而且我得到了两个,但它仍然无法正常工作。权限已启用,requestPermission只是一个预防措施。我也会在几分钟内对此进行50次轮询,直到一次成功。 Android上的一切工作正常。我正在使用带有FCM令牌的FCM测试消息工具进行测试。
Firebase.messaging().requestPermission()
await (Firebase.messaging() as any).ios.registerForRemoteNotifications()
const APNSToken = await (Firebase.messaging() as any).ios.getAPNSToken()
const token = Firebase.messaging().getToken()
if (APNSToken && token) sendToServer(token)
ios/Podfile
:
pod 'Firebase/Core', '~> 5.18.0'
pod 'Firebase/Database', '~> 5.18.0'
pod 'Firebase/Messaging', '~> 5.18.0'
AppDelegate.m
:
#import <Firebase.h>
#import "RNFirebaseNotifications.h"
#import "RNFirebaseMessaging.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[FIRApp configure];
[RNFirebaseNotifications configure];
...
}
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
[[RNFirebaseNotifications instance] didReceiveLocalNotification:notification];
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo
fetchCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler{
[[RNFirebaseNotifications instance] didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
}
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
[[RNFirebaseMessaging instance] didRegisterUserNotificationSettings:notificationSettings];
}
React Native
版本:
0.57.1
React Native Firebase
库版本:
5.2.4
Firebase
模块有问题:
[]身份验证
[]分析
[] Cloud Firestore
[X]云消息传递(FCM)
[] Crashlytics
[]动态链接
[]函数可调用
[]在App Messaging中
[]索引
[]邀请
[]实例ID
[] ML Kit
[X]通知
[ ] 性能监控
[]实时数据库
[]远程配置
[]存储TypeScript
吗?
[]没有
[X]是的,版本:2.8.4
ExpoKit
?
[x]不
[]是的,我没有被驱逐出境
[]是的,但我已经被驱逐到ExpoKit
[]是的,但我已经被驱逐到香草React Native
世博会版:N/A
似乎react-native-firebase Firebase.messaging().getToken()
不会返回最新的令牌。我的应用程序正在保存并使用旧令牌而不是更新新令牌 - 非常小的竞争条件。
只需使用Firebase.messaging.onTokenRefresh()
作为真相来源,以避免迁移应用程序的问题。还要确保你得到一个有效的令牌。您可能希望使用v4 - > await Firebase.iid().deleteToken()
或v5 (Firebase.messaging().deleteToken()
删除此类迁移中的令牌。然后依靠onTokenRefresh向您发送一个新的发送到您的服务器。