我在及时上传设备令牌时遇到问题。似乎问题在于,如果授予权限的速度不够快,则不会对我的数据库进行任何更新。但是,当我重新启动应用程序(授予权限后(时,设备令牌将按预期上传到我的数据库。
这是我正在使用的代码,它在componentWillMount()
时运行。
FCM = firebase.messaging();
DB = firebase.database().ref('deviceTokens/');
getPushToken() {
FCM.requestPermissions();
FCM.getToken().then(token => {
DB.push(token);
});
}
无论如何我能解决这个问题吗?我不希望用户在授予权限后必须重新启动应用程序才能获取设备令牌。
requestPermissions
方法返回 promise,所以你需要等到函数完成它工作或失败,有两种方法可以解决你的问题
#1:使用等待
try{
await FCM.requestPermissions();
FCM.getToken().then(token => {
DB.push(token);
});
}catch(e){/*DO SOMETHING*/}
#2:使用然后方法
FCM.requestPermissions().then(() => {
FCM.getToken().then(token => {
DB.push(token);
});
}).catch(e => {/*DO SOMETHING*/} );
授予权限需要与用户交互,这需要时间。因此,您不能只是假设权限在您调用requestPermissions()
后立即存在。相反,您必须等待何时授予权限,然后获取令牌。
您可以通过等待 requestPermissions
返回的承诺来执行此操作:
FCM = firebase.messaging();
DB = firebase.database().ref('deviceTokens/');
getPushToken() {
FCM.requestPermissions().then(() => {
FCM.getToken().then(token => {
DB.push(token);
});
});
}