1

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

这是我正在使用的代码,它在componentWillMount().

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

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

  }

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

4

2 回答 2

4

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

您可以通过等待返回的承诺来做到这一点requestPermissions

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

getPushToken() {
  FCM.requestPermissions().then(() => {
    FCM.getToken().then(token => {
      DB.push(token);
     });
  });
}
于 2018-01-25T14:40:25.523 回答
4

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

#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*/} );
于 2018-01-25T15:54:36.103 回答