Проблемы с обменом сообщениями в Firebase под iOS - PullRequest
0 голосов
/ 09 февраля 2020

Пожалуйста, ознакомьтесь с новыми находками ниже

Несмотря на то, что я выполнил шаги по настройке в Firebase_messaging документах, я не могу заставить FCM работать должным образом на iOS.

Сообщения DATA работают как положено. Сообщения УВЕДОМЛЕНИЯ не отображаются вообще, независимо от того, находится приложение на переднем плане или в фоновом режиме.

Android уведомления работают, как и предполагалось. Эта проблема возникает только в iOS и только для уведомлений.

Я тестирую на физическом устройстве (iPhone SE) и продолжаю сталкиваться с той же проблемой, даже если приложение развернуто с помощью TestFlight.

void configureFirebase(prefs) async {
  try {
    await _firebaseMessaging.requestNotificationPermissions();
    _firebaseMessaging.configure(
      onMessage: (Map<String, dynamic> message) async {
        print(message);
        onMessage(message);
      },
      //  onBackgroundMessage: myBackgroundMessageHandler,
      onLaunch: (Map<String, dynamic> message) async {
        print("onLaunch: $message");
        onMessage(message);
      },
      onResume: (Map<String, dynamic> message) async {
        print("onResume: $message");
        onMessage(message);
      },
    );
  } catch (e) {
    print(e);
  }
}

Когда приложение скомпилировано, я получаю следующее:

2020-02-09 11:39:34.414043+0100 Runner[236:3651] Configuring the default Firebase app...
2020-02-09 11:39:34.439940+0100 Runner[236:3782] 6.16.0 - [Firebase/Core][I-COR000004] App with name __FIRAPP_DEFAULT does not exist.
2020-02-09 11:39:34.462336+0100 Runner[236:3651] Configured the default Firebase app __FIRAPP_DEFAULT.
2020-02-09 11:39:34.509495+0100 Runner[236:3797] flutter: Observatory listening on http://127.0.0.1:49413/sW_P16TvXjA=/
2020-02-09 11:39:34.530782+0100 Runner[236:3782] 6.16.0 - [Firebase/Messaging][I-FCM001000] FIRMessaging Remote Notifications proxy enabled, will swizzle remote notification receiver handlers. If you'd prefer to manually integrate Firebase Messaging, add "FirebaseAppDelegateProxyEnabled" to your Info.plist, and set it to NO. Follow the instructions at:
https://firebase.google.com/docs/cloud-messaging/ios/client#method_swizzling_in_firebase_messaging
to ensure proper integration.
2020-02-09 11:39:34.535881+0100 Runner[236:3783] 6.16.0 - [Firebase/Analytics][I-ACS023007] Analytics v.60202000 started
2020-02-09 11:39:34.536403+0100 Runner[236:3783] 6.16.0 - [Firebase/Analytics][I-ACS023008] To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled (see https://help.apple.com/xcode/mac/8.0/#/dev3ec8a1cb4)
2020-02-09 11:39:34.562674+0100 Runner[236:3783] 6.16.0 - [Firebase/Analytics][I-ACS031025] Analytics screen reporting is enabled. Call +[FIRAnalytics setScreenName:setScreenClass:] to set the screen name or override the default screen class name. To disable screen reporting, set the flag FirebaseScreenReportingEnabled to NO (boolean) in the Info.plist
2020-02-09 11:39:34.567991+0100 Runner[236:3782] 6.16.0 - [Firebase/Analytics][I-ACS023012] Analytics collection enabled

Если я отключаю FirebaseAppDelegateProxyEnabled в info.plist, ниже находится стек:

2020-02-09 12:23:03.053017+0100 Runner[290:10393] Configuring the default Firebase app...
2020-02-09 12:23:03.054198+0100 Runner[290:10584] 6.16.0 - [Firebase/Core][I-COR000004] App with name __FIRAPP_DEFAULT does not exist.
2020-02-09 12:23:03.099604+0100 Runner[290:10393] Configured the default Firebase app __FIRAPP_DEFAULT.
2020-02-09 12:23:03.142294+0100 Runner[290:10596] flutter: Observatory listening on http://127.0.0.1:49543/dD-x0XTr2qQ=/
2020-02-09 12:23:03.151748+0100 Runner[290:10583] 6.16.0 - [Firebase/Analytics][I-ACS023007] Analytics v.60202000 started
2020-02-09 12:23:03.152298+0100 Runner[290:10583] 6.16.0 - [Firebase/Analytics][I-ACS023008] To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled (see https://help.apple.com/xcode/mac/8.0/#/dev3ec8a1cb4)
2020-02-09 12:23:03.153920+0100 Runner[290:10599] 6.16.0 - [Firebase/Analytics][I-ACS025036] App Delegate Proxy is disabled
2020-02-09 12:23:03.166991+0100 Runner[290:10599] 6.16.0 - [Firebase/Analytics][I-ACS031025] Analytics screen reporting is enabled. Call +[FIRAnalytics setScreenName:setScreenClass:] to set the screen name or override the default screen class name. To disable screen reporting, set the flag FirebaseScreenReportingEnabled to NO (boolean) in the Info.plist
2020-02-09 12:23:03.172381+0100 Runner[290:10580] 6.16.0 - [Firebase/Analytics][I-ACS023012] Analytics collection enabled

Есть идеи, что здесь может происходить? Это очень странное поведение, которое я понятия не имею, откуда даже начинать отладку.

Буду очень признателен за любую помощь или указания на возможные решения.


Добавление конфигурации сообщений, используемой в PyFCM на всякий случай это было источником проблемы:

push_service = FCMNotification(api_key=fcmServerKey)

testDATA = {
  'title': 'Test title',
  'body': 'Test body',
  'click_action': 'FLUTTER_NOTIFICATION_CLICK',
  'otherFields': 'Other fields here',
}

result = push_service.notify_single_device(
  registration_id = token,
  message_title='Test title',
  message_body='Test body',
  data_message = testDATA,
  time_to_live=0,
  delay_while_idle=False,
  extra_notification_kwargs=extraKWARGS,
  content_available=True  
)

Новые результаты:

УВЕДОМЛЕНИЯ получены в симуляторе iOS. Однако они отображаются только тогда, когда приложение находится на переднем плане. Pu sh уведомления НЕ работают. Тем не менее, я читал, что уведомления pu sh не работают на симуляторе iOS, поэтому может быть поэтому.

Учитывая, что у меня нет видимых ошибок, и я их отлаживал безрезультатно около 30 часов спустя, насколько вероятно, что моя проблема с уведомлениями изолирована от этого одного физического устройства (iPhone SE в моем распоряжении), возможно, из-за того, что FCM считает его автономным или его регистрационный идентификатор недействительным?.

У меня нет других айфонов для тестирования.

Приложение полностью функционально и готово во всех других отношениях ... Должен ли я считать это единичным делом и представить свое приложение?

1 Ответ

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

Я наконец-то решил эту проблему.

Я использую firebase_messaging 6.0.9 и Flutter 1.12.13 + 8, MacOS Catalina с iOS 13 на iPhone SE.

Давайте разберемся с чем-то одним: поведение firebase_messaging на iOS глючит.

Что я по сути сделал:

1) Очистите код и убедитесь, что реализация FCM было точно так же, как документы.

2) Разрешения FCM выполнялись в одиночку, без каких-либо других разрешений одновременно

3) Продолжайте создавать новые проекты и копировать библиотеку внутри них, пока один из они работают [*]

Так что да, теперь это работает. Неудовлетворительное решение, но, тем не менее, решение.

[*] Как только я убедился, что у кода практически нет причин сбоя, FCM все еще не работал. Я сделал все, что в моих силах, чтобы очистить проект и пакеты Flutter; пока FCM не работал на iOS. Поэтому я создал другой проект и скопировал в него свой код. А потом я начал получать разные ошибки, которые мне так и не удалось устранить. Поэтому я продолжал создавать новые проекты, каждый из которых приводил к новой, exoti c и неразрешимой ошибке, которую я потратил несколько часов, пытаясь отладить; иногда getToken не обнаруживался, иногда токен был нулевым; в других случаях requestNotifications не было обнаружено; другие firebase_messaging не обнаружены ... et c. Тогда одна из установок работала. И теперь кажется, что уведомления работают как положено на iOS.


Edit:

Он вернулся к неработоспособности после внесения некоторых изменений в код и перекомпиляции (хотя я сделал никаких изменений в модуле FCM или сценариях XCode).

Сброс iPhone исправил это на этот раз. Запуск этого в производство будет кошмаром.

...