Параметры запуска 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];
}
}