didReceiveRemoteNotification не вызывается, когда Firebase используется вместе с платформой Push - PullRequest
0 голосов
/ 29 октября 2018

Я использую Firebase для аналитики и библиотеку для push-уведомлений. Когда я использую любой из них, didReceiveRemoteNotification вызывается. Но когда я использую их обоих вместе, didReceiveRemoteNotification не вызывается.
Код:

didFinishLaunchingWithOptions :

NSString *google_app_id = @"----";
    NSString *gcm_sender_id = @"----";
    FIROptions *o = [[FIROptions alloc] initWithGoogleAppID:google_app_id GCMSenderID:gcm_sender_id];
    o.APIKey = @"----";
    o.bundleID = @"----";
    o.clientID = @"----";
    [FIRApp configureWithOptions:o];  

// Initilization of push framework 

didReceiveRemoteNotification :

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    // This method is not called when Firebase and push framework are enabled at the same time
    // It works fine when only Firebase or only push framework is enabled
    NSLog(@"Push: %@", userInfo);
}

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Это потому, что Firebase использует swizzling для перехвата методов AppDelegate.

Вы должны отключить его в info.plist вашего приложения :

<key>FirebaseAppDelegateProxyEnabled</key>
<false/>

На самом деле существует много информации о Push-уведомлениях в iOS с Firebase на GitHub. Там вы, вероятно, найдете ответы на ваши дальнейшие вопросы.

0 голосов
/ 07 ноября 2018

В документации для этого метода в Firebase Cloud Messaging сказано:

Если вы получаете уведомление, когда ваше приложение находится в фон, этот обратный вызов не будет запущен, пока пользователь не нажмет в уведомлении о запуске приложения.

мб, этот метод вызывается только тогда, когда вы нажали на уведомление о запуске приложения?

По своему опыту я имею дело с толчками с помощью следующих методов:

- (void)userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
         withCompletionHandler:(void (^)())completionHandler {

Метод получения информации о предстоящем push-уведомлении, если приложение активно. В блоке вы должны поставить константу, чтобы показать ваше уведомление:

completionHandler(UNNotificationPresentationOptionAlert);

И еще один:

(void)userNotificationCenter:(UNUserNotificationCenter *)center
       willPresentNotification:(UNNotification *)notification
         withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {

Этот метод работает с нажатием на push-уведомление. Здесь вы работаете с переходом на какой-то специальный экран.

Надеюсь, мой опыт поможет!

...