Параметры запуска iphone

im не получает никаких параметров запуска после push-уведомления; heres код, который у меня есть, но не NSLogs, кажется, печатается в области отладки.

UILocalNotification *localNotif =
[launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

if (localNotif) {
    NSString *itemName = [localNotif.userInfo objectForKey:@"aps"];
    NSLog(@"Custom: %@", itemName);
} else {
    NSLog(@"//////////////////////////");

}

когда я открываю приложение (через нажатие на уведомлении push), он переходит к didReceiveRemoteNotification script, im не уверен, что это должно произойти.

спасибо за чтение.

Ответ 1

Ваше приложение получает push-уведомления через несколько путей, в зависимости от состояния вашего приложения, когда оно получено.

Если ваше приложение не запущено (даже не приостановлено в фоновом режиме), launchOptions будет содержать полезную нагрузку уведомления (клавиша UIApplicationLaunchOptionsRemoteNotificationKey).

Если он уже запущен или приостановлен в фоновом режиме, приложение получит уведомления через application:didReceiveRemoteNotification: в делетете приложения.

Процесс одинаковый для локальных уведомлений (UIApplicationLaunchOptionsLocalNotificationKey в приложении: didFinishLaunchingWithOptions: и application:didReceiveLocalNotification:)

Ответ 2

обнаружена ошибка:

NSDictionary *remoteNotif = [launchOptions objectForKey:   
                              UIApplicationLaunchOptionsRemoteNotificationKey];

Если вы хотите получать удаленное уведомление, NSDictionary следует использовать не UILocalNotification

Удаленное уведомление представляет собой полезную нагрузку, содержащую аргументы, а не локальное уведомление. Возможно, вы захотите посмотреть на этот вопрос:

Сбой при обработке удаленного уведомления, когда приложение не работает

Если вы хотите сделать локальное уведомление, измените его как предложение Людовика

Ответ 3

Ответы, приведенные выше, верны. Я использую в своем приложении следующий фрагмент: didFinishLaunchingWithOptions:

if let remoteNotifPayload = launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] as? [AnyHashable: Any] {
        notificationsController.didReceiveRemoteNotification(with: remoteNotifPayload)
    }

Ответ 4

Если вы хотите, чтобы локальное уведомление (я принимаю с вашим именем var), замените UIApplicationLaunchOptionsRemoteNotificationKey на UIApplicationLaunchOptionsLocalNotificationKey, и это должно работать.

Ответ 5

  (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 
      NSLog(@"Alert message: %@",[[userInfo valueForKey:@"aps"] valueForKey:@"alert"]);
}

Ответ 6

Вы можете использовать NSUserDefaults, чтобы сделать трюк. В AppDeligate.m, установите bool на YES в первый раз. Поэтому после этого он никогда не доходит до NO.

  -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //add this if loop
        if (![[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"])
        {
            [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedOnce"];
            [[NSUserDefaults standardUserDefaults] synchronize];
        }
    }