response-native-firebase - Проблема с быстрым переходом на response-native - iOS перестает работать - PullRequest
0 голосов
/ 07 апреля 2019

Я переношу приложение swift на FB 5.18 на RN firebase и больше не работает над миграцией.Если я удаляю и перезагружаю версию RN, все работает.Я попытался проверить токен вот так и получаю оба, но он все равно не работает.Разрешения включены, requestPermission - это всего лишь предосторожность.Я также опрашиваю это до 50 раз в течение пары минут, пока одно не будет успешным.Все на Android работает нормально.Я тестирую с помощью инструмента тестовых сообщений FCM с токеном FCM.

Firebase.messaging().requestPermission()
await (Firebase.messaging() as any).ios.registerForRemoteNotifications()
const APNSToken = await (Firebase.messaging() as any).ios.getAPNSToken()
const token = Firebase.messaging().getToken()
if (APNSToken && token) sendToServer(token)

Файлы проекта

iOS

ios/Podfile:
  • [x] Я использую Pods, и мой Podfile выглядит следующим образом:
  pod 'Firebase/Core', '~> 5.18.0'
  pod 'Firebase/Database', '~> 5.18.0'
  pod 'Firebase/Messaging', '~> 5.18.0'

AppDelegate.m:
#import <Firebase.h>
#import "RNFirebaseNotifications.h"
#import "RNFirebaseMessaging.h"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  [FIRApp configure];
  [RNFirebaseNotifications configure];
  ...
}
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
  [[RNFirebaseNotifications instance] didReceiveLocalNotification:notification];
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo
                                                       fetchCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler{
  [[RNFirebaseNotifications instance] didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
}

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
  [[RNFirebaseMessaging instance] didRegisterUserNotificationSettings:notificationSettings];
}

Environment

  • Платформа, котораяВы столкнулись с проблемой на :
    • [X] iOS
    • [] Android
    • [] iOS , но не протестировали поведениена Android
    • [] Android , но не тестировали поведение на iOS
    • [] Оба
  • Если известна, версия платформы, с которой вы столкнулись с проблемой:

    • `Все версии iOS
  • **React Native версия:

    • 0.57.1
  • React Native Firebase версия библиотеки:
    • 5.2.4
  • Firebase модулей, которые вы используете, имеет проблему:
    • [] Аутентификация
    • [] Аналитика
    • [] Облако Firestore
    • [X] Облако Сообщения (FCM)
    • [] Crashlytics
    • [] Динамические Ссылки
    • [] Функции Вызываемые
    • [] В приложении Messaging
    • [] Индексирование
    • [] Приглашения
    • [] Идентификатор экземпляра
    • [] ML Kit
    • [X] Уведомления
    • [] Мониторинг производительности
    • [] Реальное время База данных
    • [] Удаленный Конфиг
    • [] Хранилище
  • Используете ли вы TypeScript?
    • [] Нет
    • [X] Да, версия: 2.8.4
  • Используете ли вы Expo, например, ExpoKit?
    • [x] Нет
    • [] Да, у меня нет выброшено
    • [] Да, но у меня есть , извлеченный в ExpoKit
    • [] Да, но у меня есть , извлеченный в ванильный React Native
    • Expoверсия: N/A

1 Ответ

0 голосов
/ 08 апреля 2019

Похоже, с response-native-firebase Firebase.messaging().getToken() не вернет последний токен. Мое приложение сохраняло и использовало старый токен, а не обновляло новый - очень маленькое состояние гонки.

Просто используйте Firebase.messaging.onTokenRefresh() как источник правды, чтобы избежать проблем с переносом приложений. Также, чтобы убедиться, что вы получаете токен, который работает. Возможно, вы захотите удалить свой токен при переносе, например, с v4 -> await Firebase.iid().deleteToken() или v5 (Firebase.messaging().deleteToken(). Затем положитесь на TokenRefresh, чтобы отправить вам новый файл для отправки на ваш сервер.

...