Реагировать на собственный firebase getToken () не работает - PullRequest
1 голос
/ 03 февраля 2020

Только что обновлен, чтобы реагировать на собственный 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()) получу обещание в консоли. Что я делаю неправильно? или мне нужно обновиться до последней версии собственного встроенного 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 голосов
/ 07 апреля 2020

То, что в конечном итоге сработало для нас на iOS, - это обновление реагирующей нативной библиотеки firebase до v5.6.0 (поскольку мы пока не можем обновиться до v6).

Это потребовало от нас обновить базовые версии Podfile Firebase до ~6.13.0 согласно руководству. Сделал pod install и похоже getToken функция снова работает.

0 голосов
/ 03 февраля 2020

обновите функцию 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)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...