Firebase FCM на IOS 10 разъяснения - PullRequest
0 голосов
/ 21 мая 2019

Есть ли кто-нибудь, кто может уточнить требуемые методы для FCM, используя Swift 4.2 с целью IOS> = 10, чтобы упростить: 1) отсутствие прямых «данных» сообщений….только уведомления / предупреждения через APNS 2) Я оставляю Swizzling включенным, хотя некоторые учебные пособия (без объяснения причин) говорят мне отключить его

Я обнаружил, что проблемы с устареванием IOS и некоторые ошибки в документации насторона FCM делает этот способ более запутанным, чем нужно.

можем ли мы получить простую матрицу, такую ​​как: AppState |закрыто |фон |foreground |

userAction: нет (простое поступление сообщения в IOS) отклонить уведомление нажать уведомление выбрать действие уведомления открыть приложение напрямую - не задействован метод уведомления

, вызываемый в приведенном выше сценарии:бла…

также кажется, что FCM создает свой собственный токен независимо от того, отправил ли APNS его еще;поэтому мне нужна другая логика, чтобы определить, предоставил ли пользователь разрешения, прежде чем мой сервер может предположить, что токен FCM будет работать вообще ... Я думаю, я просто не буду отправлять токен FCM на сервер, пока не буду уверен, что у меня есть токен APNS....???

Кроме того, документы FCM проясняют, что видимые для пользователя (то есть стиль оповещения / уведомления) доставляются через APNS / Apple.

Поэтому я могу предположить, что FCMсообщения не будут поступать, пока ПОСЛЕ Apple не отправит мне токен APNS.

Но я не могу прочитать или получить токен Apple из метода делегата FCM.

Этот код всегда возвращает пустую строкудля apns, поэтому я не могу определить, находится ли мое приложение в надежном состоянии или нет:

@ objc func message (_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {print ("Жетон регистрации Firebase: (fcmToken)) ") let apnsTokenData = messaging.apnsToken let apnsToken = apnsTokenData? .reduce (" ", {$ 0 + String (формат:"% 02X ", $ 1)}) ??"" print ("apnsToken: (apnsToken)")

Спасибо за любые разъяснения!

1 Ответ

0 голосов
/ 21 мая 2019

Ниже приведены функции, которые необходимо реализовать для APNS с firebase

.
  • Чтобы зарегистрироваться для push-уведомлений
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
 UNUserNotificationCenter.current().requestAuthorization(
   options: authOptions,
   completionHandler: {_, _ in })
application.registerForRemoteNotifications()
  • Для получения токена FCM
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
}
  • При получении уведомления в фоновом режиме: Если ваше приложение получило уведомление в фоновом режиме, при нажатии на это уведомление содержимое этого уведомления будет передано основной функции.
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
  // If you are receiving a notification message while your app is in the background,
  // this callback will not be fired till the user taps on the notification launching the application.

}

  • Пока приложение находится в состоянии переднего плана: Если ваше приложение получило уведомление, находясь в состоянии Foreground, при нажатии на это уведомление содержимое этого уведомления будет передано основной функции.
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
       willPresentNotification:(UNNotification *)notification
         withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {

}

Q. Я оставляю Swizzling включенным, хотя некоторые учебники (без объяснения причин) говорят мне отключить его: A. Метод Swizzling необходим для привязки токена fcm к токену apns. Если вы отключили метод swizzling, вам необходимо явно сопоставить токен fcm с токеном apns, как показано в следующем коде

  Messaging.messaging().apnsToken = deviceToken

Q. мы можем получить простую матрицу, как: AppState | закрыто | фон | передний план |: Для любого состояния приложения функции обратного вызова уже присутствуют в Appdelegate.

...