Уведомления iOS Firebase появляются только в фоновом режиме - PullRequest
0 голосов
/ 27 августа 2018

У меня есть приложение для iOS с добавлением сообщений Firebase. Проблема заключается в том, что push-уведомления firebase появляются только в том случае, если приложение завершено или работает в фоновом режиме. Я хотел бы иметь возможность обрабатывать сообщение программно и отображать какой-то модальный режим, но метод didReceiveRemoteNotification даже не вызывается.

Вот мой AppDelegate.m

#import "AppDelegate.h"
#import "MainViewController.h"
#import "AppName-Swift.h"

@import Firebase;
@import FirebaseMessaging;
@import FirebaseInstanceID;

@implementation AppDelegate {
  LocationSyncManager* locationSyncManager;
  bool isLocationLaunch;
}

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
    isLocationLaunch = [launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey];
    [FIRApp configure];
    [FIRMessaging messaging].delegate = self;

    [self enablePushNotifications:application];

    if(isLocationLaunch) {
      if(AccountStore.shared.account != nil) {
        locationSyncManager = [LocationSyncManager shared];
        [locationSyncManager enable];
      }
    } else {
      self.viewController = [[MainViewController alloc] init];
      return [super application:application didFinishLaunchingWithOptions:launchOptions];
    }
    return nil;
}

- (void) enablePushNotifications:(UIApplication*)application {
  UIUserNotificationType allNotificationTypes =
  (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
  UIUserNotificationSettings *settings =
  [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
  [application registerUserNotificationSettings:settings];

  [application registerForRemoteNotifications];
}

- (void)messaging:(nonnull FIRMessaging *)messaging didReceiveRegistrationToken:(nonnull NSString *)fcmToken {
  [LocationSyncManager shared].deviceToken = fcmToken;
}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
  [FIRMessaging messaging].APNSToken = deviceToken;
  [FIRMessaging messaging].shouldEstablishDirectChannel = YES;
}

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
  NSLog(@"--- didFailToRegisterForRemoteNotificationsWithError %@", error);
}

// In case the user tries to open the app while it is running in the background,
// allow the webview to initialize and disable the isLocationLaunch flag.
- (void)applicationWillEnterForeground:(UIApplication *)application {
  if(isLocationLaunch) {
    self.viewController = [[MainViewController alloc] init];
    [self application:application didFinishLaunchingWithOptions:nil];
  }
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
  NSLog(@"---- RECEIVED REMOVE NOTIFICATION %@", userInfo);
}

@end

Я должен видеть ---- RECEIVED REMOVE NOTIFICATION в журналах после того, как сервер отправит PN, но этого не происходит. Почему didReceiveRemoteNotification не вызывается на переднем плане?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...