RNFirebase Messaging:问题及时发送设备令牌

时间:2018-01-25 09:09:40

标签: firebase react-native firebase-cloud-messaging react-native-ios react-native-firebase

我在上传设备令牌时遇到问题。似乎问题是因为如果没有足够快地授予权限,则没有任何内容更新到我的数据库。但是当我重新启动应用程序时(在授予权限之后),设备令牌会按预期上传到我的数据库。

这是我正在使用的代码,它在componentWillMount()时运行。

FCM = firebase.messaging(); 
DB = firebase.database().ref('deviceTokens/'); 

  getPushToken() {
    FCM.requestPermissions();
    FCM.getToken().then(token => {
      DB.push(token);
     });

  }

无论如何我解决了这个问题?我不希望用户在授予权限后必须重新启动应用程序,以便我获取设备令牌。

2 个答案:

答案 0 :(得分:4)

授予权限需要与用户进行交互,这需要时间。因此,在调用requestPermissions()后,您不能仅仅假设权限存在。相反,您必须等待授予权限的时间,然后获取令牌。

您可以通过等待requestPermissions

返回的承诺来执行此操作
FCM = firebase.messaging(); 
DB = firebase.database().ref('deviceTokens/'); 

getPushToken() {
  FCM.requestPermissions().then(() => {
    FCM.getToken().then(token => {
      DB.push(token);
     });
  });
}

答案 1 :(得分:4)

requestPermissions方法返回promise,所以你需要等到函数完成它工作或失败,有两种方法可以解决你的问题

#1:使用等待

try{
    await FCM.requestPermissions();
    FCM.getToken().then(token => {
        DB.push(token);
    });
}catch(e){/*DO SOMETHING*/}

#2:使用then方法

FCM.requestPermissions().then(() => {
    FCM.getToken().then(token => {
        DB.push(token);
     });
}).catch(e => {/*DO SOMETHING*/} );