我在上传设备令牌时遇到问题。似乎问题是因为如果没有足够快地授予权限,则没有任何内容更新到我的数据库。但是当我重新启动应用程序时(在授予权限之后),设备令牌会按预期上传到我的数据库。
这是我正在使用的代码,它在componentWillMount()
时运行。
FCM = firebase.messaging();
DB = firebase.database().ref('deviceTokens/');
getPushToken() {
FCM.requestPermissions();
FCM.getToken().then(token => {
DB.push(token);
});
}
无论如何我解决了这个问题?我不希望用户在授予权限后必须重新启动应用程序,以便我获取设备令牌。
答案 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,所以你需要等到函数完成它工作或失败,有两种方法可以解决你的问题
try{
await FCM.requestPermissions();
FCM.getToken().then(token => {
DB.push(token);
});
}catch(e){/*DO SOMETHING*/}
FCM.requestPermissions().then(() => {
FCM.getToken().then(token => {
DB.push(token);
});
}).catch(e => {/*DO SOMETHING*/} );