反应本机firebase getToken()不起作用

时间:2020-02-03 12:33:21

标签: javascript react-native react-native-firebase

刚刚升级为可响应本机0.61.5和可响应本机firebase(v5.5.7)getToken()函数似乎没有运行,或者只是挂在了await上。

我有这个功能:

async function updatePushNotificationsEnabled(isEnabled: boolean) {
  return updateUser({ pushNotificationsEnabled: isEnabled, firebaseId: await getToken() })
}

依次调用:

async function getToken() {
  try {
    return FCM().getToken();
  } catch (error) {
    return undefined;
  }
}

如果我遵循https://rnfirebase.io/docs/v5.x.x/messaging/device-token,则似乎无法从服务器取回令牌。如果我尝试console.log(await getToken()),控制台中什么也没有。如果我console.log(FCM().getToken()),我会在控制台中获得承诺。我究竟做错了什么?还是我需要升级到最新版本的React Native Firebase?

我还检查了权限,并且设备上的权限处于启用状态,因此返回true。

我确实具有检查权限的功能,但这是在应用程序中较早完成的,而不是在我正在做的事情上完成的。

async function requestPermissionIfNeeded() {
  try {
    if (await FCM().hasPermission()) {
      return true;
    }
    await FCM().requestPermission();
    return await FCM().hasPermission();
  } catch (error) {
    return false;
  }
}

2 个答案:

答案 0 :(得分:2)

最终在iOS上为我们工作的是将react native firebase库更新为v5.6.0(因为我们尚无法更新到v6)。

这要求我们根据指南将基础Podfile Firebase版本更新为~6.13.0。做了一个pod install,看起来getToken函数又可以正常工作了。

答案 1 :(得分:0)

请像这样更新request()和&getToken()函数

async requestPermission() {
        try {
          await firebase.messaging().requestPermission();
          this.getToken();
        } catch (error) {
          alert('permission rejected');
        }
    }

async getToken() {
    let fcmToken = await AsyncStorage.getItem('device_token');
    if (!fcmToken) {
        fcmToken = await firebase.messaging().getToken();
        if (fcmToken) {
            await AsyncStorage.setItem('device_token', fcmToken);
        }
    } else {
        // do some work
        console.log('Device_token')
        console.log(fcmToken)
    }
}
相关问题