开发者问题收集

RNFirebase 消息传递:及时发出发送设备令牌

2018-01-25
840

我无法及时上传设备令牌。问题似乎是因为如果授予权限的速度不够快,我的数据库就不会更新任何内容。但是当我重新启动应用程序(在授予权限后)时,设备令牌会按预期上传到我的数据库。

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

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

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

  }

有没有办法解决这个问题?我不希望用户在授予权限后必须重新启动应用程序才能让我获取设备令牌。

2个回答

requestPermissions 方法返回承诺,因此您需要等到函数完成工作或失败,有两种方法可以解决您的问题

#1:使用 await

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*/} );
Ali Faris
2018-01-25

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

您可以通过等待 requestPermissions 返回的承诺来执行此操作:

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

getPushToken() {
  FCM.requestPermissions().then(() => {
    FCM.getToken().then(token => {
      DB.push(token);
     });
  });
}
Frank van Puffelen
2018-01-25