Cordova-Plugin-Firebase, iOS: устройство получает push-уведомления, но не появляется на устройстве - PullRequest
0 голосов
/ 08 ноября 2018

Тестирование плагина Cordova Firebase: работает на Android; iOS, нет такой удачи ...

Я создал необходимые идентификаторы, сертификаты и закрытые ключи в своей учетной записи разработчика и на моем Mac и настроил приложение «iOS» в консоли Firebase. К сведению: в конфигурации Cloud Messaging в Firebase я использую метод APN Auth Key, а не сертификат dev, поскольку Firebase указывает предпочтение метода Auth Key.

Итак, я создал новое приложение Cordova - образно называемое «pushnotificationsdemo», вот шаги, которые я использовал для создания приложения, настройки FCM и его тестирования:

Создание приложения Cordova с помощью плагина Firebase:

cordova —version

8.1.2 (cordova-lib@8.1.1)

cordova pushnotificationsdemo com.XXX.pushnotifications.com “Push Notifications Demo”
cd push*
cordova plugin add cordova-plugin-firebase

[скопировать «GoogleService-Info.plist», загруженный с консоли Firebase, в корневую папку нового проекта Cordova]

cordova platform add ios

* Использование cordova-fetch для cordova-ios@~4.5.4

Добавление проекта ios ...

Создание проекта Cordova для платформы iOS:

Путь: платформы / IOS

Пакет: com.foliagos.pushnotificationsdemo

Название: Демонстрация push-уведомлений

iOS проект создан с помощью cordova-ios@4.5.5

Установка "cordova-plugin-firebase" для ios

Обнаружен плагин "cordova-plugin-whitelist" в config.xml. Добавление его в проект

Установка "cordova-plugin-whitelist" для ios

Добавление cordova-plugin-whitelist в package.json

Сохранена информация о плагине для "cordova-plugin-whitelist" в config.xml

Подготовка Firebase на iOS

- обнаружение флага сохранения или автосохранения

Сохранение ios@~4.5.5 в файл config.xml ... *


Открыть проект iOS в Xcode ( версия 10.1 ):

  • Установите команду подписи в «Общие» (чтобы прекратить ошибку Code 65 при попытке создать приложение с помощью командной строки Cordova)

Я использую Xcode10, поэтому, пока я там, я также установил тип сборки на «устаревшую» систему (поскольку Cordova 8.1.2 не совместима с новой системой сборки):

  • Файл | Настройки рабочего пространства

  • Система сборки: "Legacy Build System"

И так как я хочу увидеть много отладочной информации, я также установил это в Xcode:

  • Продукт | Схема | Редактировать схему | вкладка: Аргументы -> Аргументы переданы при запуске, добавьте следующее: «-FIRAnalyticsDebugEnabled»

И добавил следующее в файл «Push-уведомления Demo-Info.plist» в папке проекта «Ресурсы»:

  • «UIBackgroundModes»

  • с помощью следующей клавиши: «дистанционное уведомление»

Я также добавил следующие настройки в config.xml Cordova, чтобы отключить резервное копирование в облаке:

<preferencename="BackupWebStorage"value="none"/>

Теперь я собираю новое приложение Cordova из командной строки (используя устаревшую систему сборки):

cordova build ios --buildFlag='-UseModernBuildSystem=0'

Архив успешно построен!

Вернувшись в Xcode, я создаю приложение, и в консоль записывается следующее:


8 нояб. 17:50:54 Демонстрация push-уведомлений [414]: - [I-ACS036002] Отчеты об экранах аналитики включены. Вызовите + [FIRAnalytics setScreenName: setScreenClass:], чтобы установить имя экрана или переопределить имя класса экрана по умолчанию. Чтобы отключить экранную отчетность, установите для флага FirebaseScreenReportingEnabled значение NO (булево) в Info.plist

2018-11-08 17: 50: 54.312 Демонстрация push-уведомлений [414: 66091] DiskCookieStorage меняет политику с 2 на 0, файл cookie: файл: /// private / var / mobile / Containers / Data / Application / 8AC0457B -0792-4A8F-8FFA-25655DB5DD8A / Библиотека / Печенье / Cookies.binarycookies

2018-11-08 17: 50: 54.558 Демонстрация push-уведомлений [414: 66091] Начиная с версии 4.5.5 собственной платформы Apache Cordova.

2018-11-08 17: 50: 54.558 Демонстрация push-уведомлений [414: 66091] Многозадачность -> Устройство: YES, Приложение: YES

2018-11-08 17: 50: 54,691 Push Nдемонстрация уведомлений [414: 66091] Использование UIWebView

2018-11-08 17: 50: 54.697 Демонстрация push-уведомлений [414: 66091] [CDVTimer] [console] 0.401020ms

2018-11-08 17: 50: 54.698 Демонстрация push-уведомлений [414: 66091] [CDVTimer] [handleopenurl] 0,479937ms

2018-11-08 17: 50: 54.707 Демонстрация push-уведомлений [414: 66091] [CDVTimer] [intetandnavigationfilter] 8.823991ms

2018-11-08 17: 50: 54.708 Демонстрация push-уведомлений [414: 66091] [CDVTimer] [жестовый обработчик] 0,429988ms

2018-11-08 17: 50: 54.708 Демонстрация push-уведомлений [414: 66091] Запуск плагина Firebase

2018-11-08 17: 50: 54.709 Демонстрация push-уведомлений [414: 66091] [CDVTimer] [firebaseplugin] 0.813961ms

2018-11-08 17: 50: 54.709 Демонстрация push-уведомлений [414: 66091] [CDVTimer] [TotalPluginStartup] 13.291001ms

2018-11-08 17: 50: 54.739 Демонстрация push-уведомлений [414: 66091] Найдено GoogleService-Info.plist, настройка: [FIRApp configureWithOptions]

2018-11-08 17: 50: 54.802 Демонстрация push-уведомлений [414: 66091] [Crashlytics] Версия 3.10.7 (130)

8 ноября 17:50:55 Демонстрация push-уведомлений [414]: 5.7.0 - [Firebase / Analytics] [I-ACS023007] Аналитика v.50101000 запущена

8 нояб. 17:50:55 Демонстрация push-уведомлений [414]: 5.7.0 - [Firebase / Messaging] [I-FCM001000] Включен прокси-сервер удаленных уведомлений FIRMessaging, что приведет к перегрузке обработчиков получателей удаленных уведомлений. Если вы предпочитаете вручную интегрировать Firebase Messaging, добавьте «FirebaseAppDelegateProxyEnabled» в ваш Info.plist и установите для него значение NO. Следуйте инструкциям по адресу:

https://firebase.google.com/docs/cloud-messaging/ios/client#method_swizzling_in_firebase_messaging

для обеспечения правильной интеграции.

8 ноября 17:50:55 Демонстрация push-уведомлений [414]: 5.7.0 - [Firebase / Messaging] [I-FCM002023] Объект не отвечает на -messaging: didReceiveRegistrationToken :. Пожалуйста, внедрите -messaging: didReceiveRegistrationToken: для предоставления токена FCM.

8 ноября 17:50:55 Демонстрация push-уведомлений [414]: 5.7.0 - [Firebase / Analytics] [I-ACS023008] Чтобы включить ведение журнала отладки, установите следующий аргумент приложения: -FIRAnalyticsDebugEnabled

2018-11-08 17: 50: 56.008 Демонстрация push-уведомлений [414: 66091] Сброс плагинов из-за загрузки страницы.

2018-11-08 17: 50: 56.165 Демонстрация push-уведомлений [414: 66091], подключенная к FCM.

2018-11-08 17: 50: 56.169 Демонстрация push-уведомлений [414: 66091] Токен InstanceID: e2Ds2K2cQbI: APA91bE… MqU

2018-11-08 17: 50: 56.358 Демонстрация push-уведомлений [414: 66091] Закончена загрузка: file: /// var / Containers / Bundle / Application / 39065AA6-1AEA-4EF5-A4D9-009185D6BE6D / Push% 20Notifications% 20Demo.app / WWW / index.html

2018-11-08 17: 50: 56.373 Демонстрация push-уведомлений [414: 66153] [Fabric] не удалось загрузить настройки Ошибка Domain = FABNetworkError Code = -5 "(null)" UserInfo = {type = 2, request_id = 7f2cefa10b4df773f0466752024ec30a, content_type = application / json; charset = utf-8, код_состояния = 403}

2018-11-08 17: 50: 56.537 Демонстрация push-уведомлений [414: 66091] Полученное событие: deviceready


Приложение работает на подключенном iPhone ( iOS версия 9.3.5 ) и отображает заставку демонстрационного приложения Cordova «Device Ready».

Теперь я смогу отправить Push-уведомление на iPhone с приложением Cordova? Для этого я захожу в консоль Firebase и отправляю Облачное сообщение (я использую ключ аутентификации APN), отправляю его с указанием токена экземпляра (показанного в предыдущем выводе консоли) в опции «Тест на устройстве» и получить следующий вывод в консоли Xcode:


2018-11-08 18:03:31.091 Push Notifications Demo[414:66091] {
    "collapse_key" = "com.XXX.pushnotificationsdemo";
    from = 293106682585;
    notification =     {
        body = "Test notification to iOS device";
        e = 1;
    };
    tap = 0;
}

Отлично! Устройство получило уведомление. НО я не получаю всплывающих уведомлений на самом устройстве.

ПРИМЕЧАНИЕ: приложение не запрашивало разрешение на использование Push-уведомлений (я получил этот запрос, когда тестировал с помощью плагина «fcm»)

Ладно, это может быть потому, что приложение находится на переднем плане? Поэтому я нажимаю кнопку «Домой» на iPhone, чтобы поместить его на задний план, и получаю это в консоли Xcode:


2018-11-08 18: 07: 05.856 Демонстрация push-уведомлений [414: 66091] Отключено от FCM


Не так здорово, теперь устройство отключено от FCM!

Я возвращаю приложение на передний план и вуаля! Консоль теперь сообщает:


2018-11-08 18: 08: 26.581 Демонстрация push-уведомлений [414: 66091], подключенная к FCM.

2018-11-08 18: 08: 26.586 Демонстрация push-уведомлений [414: 66091] Токен InstanceID: e2Ds2K2cQbI: APA91bE… MqU


Так что дела идут не очень хорошо! Похоже, что мое приложение Cordova не использует APN для отправки уведомлений на устройство, а вместо этого использует Firebase напрямую (предположим: Firebase не может обрабатывать, когда приложение находится в фоновом режиме, а APN может, следовательно, APN не используется)

Это мой второй день, когда я пытался заставить APN работать через cordova-plugin-firebase (я также попробовал плагин “fcm”, и он также оказался пустым), разумеется, версия Cordova для Android сработала коробки.

У кого-нибудь есть мысли о том, что я делаю неправильно?


Инструкции, которые я использовал для настройки Firebase для использования с iOS:

https://medium.com/@felipepucinelli/how-to-add-push-notifications-in-your-cordova-application-using-firebase-69fac067e821

1 Ответ

0 голосов
/ 23 января 2019

Сначала в настройках XCode Preference под Location Advanced выберите местоположение сборки на «Unique». Это должно помочь вам брать сборки непосредственно из Xcode. Во-вторых, в разделе регистрации FCM поместите средство проверки платформы для iOS, если да, то запросите разрешение для уведомлений в iOS. Это может быть достигнуто с помощью.

getDeviceToken() {
    if (this.platform.is('ios')) {
      this.firebase.grantPermission()
        .then((success) => {
          if (success) {
            this.doGetDeviceToken();
          }
        });
    } else {
      this.doGetDeviceToken();
    }
   }

doGetDeviceToken() {
    this.firebase.getToken()
      .then((token) => this.setToken(token))
      .catch((error) => this.handleError(error));
    this.firebase.onTokenRefresh()
      .subscribe((token) => this.setToken(token));
  }

Если эти два шага не помогли решить проблему, удалите и попробуйте добавить плагины Firebase, а также платформы iOS. Это должно работать.

...