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

RNFirebase消息传递:及时发出发送设备令牌,firebase,react-native,firebase-cloud-messaging,react-native-ios,react-native-firebase,Firebase,React Native,Firebase Cloud Messaging,React Native Ios,React Native Firebase,我在及时上载设备令牌时遇到问题。问题似乎是因为如果权限授予不够快,我的数据库将不会更新任何内容。但当我在授予权限后重新启动应用程序时,设备令牌会按预期上载到我的数据库 这是我正在使用的代码,它在componentWillMount时运行 不管怎样,我能解决这个问题吗?我不希望用户在授予权限后必须重新启动应用程序才能获得设备令牌 授予权限需要与用户交互,这需要时间。因此,您不能假设在调用requestPermissions之后权限就在那里。相反,您必须等待授予权限的时间,然后获取令牌 您可以通过等

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

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


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

授予权限需要与用户交互,这需要时间。因此,您不能假设在调用requestPermissions之后权限就在那里。相反,您必须等待授予权限的时间,然后获取令牌

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


授予权限需要与用户交互,这需要时间。因此,您不能假设在调用requestPermissions之后权限就在那里。相反,您必须等待授予权限的时间,然后获取令牌

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

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

1:使用wait 2:使用then方法 requestPermissions方法返回promise,因此您需要等待函数完成,直到它工作或失败。有两种方法可以解决您的问题

1:使用wait 2:使用then方法
FCM = firebase.messaging(); 
DB = firebase.database().ref('deviceTokens/'); 

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

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

getPushToken() {
  FCM.requestPermissions().then(() => {
    FCM.getToken().then(token => {
      DB.push(token);
     });
  });
}
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*/} );