React主动推送通知onRegister令牌为空

时间:2017-11-10 09:27:49

标签: android ios react-native react-native-push react-native-push-notification

我正在使用zo0r react-native-push-notification库。

出于某种原因,当我在移动设备(appiOS上安装Android后第一次打开 PushNotification.configure({ onRegister: function(token) { console.log( 'TOKEN:', token ); }, onNotification: function(notification) { console.log( 'NOTIFICATION:', notification ); }, senderID: "YOUR GCM SENDER ID", permissions: { alert: true, badge: true, sound: true }, popInitialNotification: true, requestPermissions: true, }); 时,令牌将返回为空。

 "react": "16.0.0-alpha.6",
 "react-native": "^0.44.3",
 "react-native-push-notification": "^3.0.1"

我的问题是,如果onRegister方法将token返回为null,那么获取令牌的最佳方法是什么? 我是否必须在应用程序的其他屏幕中调用此功能?

async function* it() {
    yield "Hello";
    yield "World";
}

async function test() {
    for await (const x of it()) {
        console.log()
    }
}

感谢您的帮助,

Mikhi

2 个答案:

答案 0 :(得分:0)

这个问题FCM.getAPNSToken()FCM.requestPermissions()之后运行,所以应用程序在方法运行时没有获得推送通知的权限。

变化:

componentDidMount -> async componentDidMount 

FCM.requestPermissions(); -> await FCM.requestPermissions();

此解决方案为https://github.com/evollu/react-native-fcm/issues/528

答案 1 :(得分:0)

我遇到了同样的问题。我不知道为什么 PushNotification.configure 在 iOS 上不起作用,所以你应该使用

const fcmToken = await firebase.messaging().getToken();
if (fcmToken) {
// user has a device token
} else {
// user doesn't have a device token yet
}

而不是 PushNotification.configure,(如果您使用 await,请不要忘记使用 async),或其他方式:

firebase.messaging().getToken()
.then(fcmToken => {
 if (fcmToken) {
  // user has a device token
 } else {
  // user doesn't have a device token yet
 } 
});

而对于Android,我上面发送o的方法不起作用。但 PushNotification.configure 有效。您应该使用 PushNotification.configure 来获取 android 的令牌。您应该检查您的 SDK、firebase-messaging 版本并更新您的 android studio,因为旧版本的 Android studio 不支持新版本的 firebase-messaging。完成这些事情后,我在 Android 上成功获得了令牌。如果您在更新这些内容时遇到麻烦,我可以向您发送所有版本的详细信息以及如何更新它们。