iphone启动选项

问题描述:

在推送通知后我没有收到任何启动选项;继承人代码我有,但非NSLogs似乎打印在调试区域。iphone启动选项

UILocalNotification *localNotif = 
[launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 

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

} 

当我打开应用程序(通过按下视图中的推送通知),它进入didReceiveRemoteNotification脚本,即时通讯,如果不知道这就是意味着要发生..

感谢您的阅读。

您的应用程序通过多个路径接收推送通知,具体取决于您的应用在接收时的状态。

如果您的应用程序未启动(甚至未在后台暂挂),launchOptions将包含通知有效负载(密钥UIApplicationLaunchOptionsRemoteNotificationKey)。

如果它已经在后台运行或暂停,该应用程序将通过您的应用程序代理中的application:didReceiveRemoteNotification:收到通知。

过程可用于本地通知(UIApplicationLaunchOptionsLocalNotificationKey在应用中:didFinishLaunchingWithOptions:和application:didReceiveLocalNotification:)相同

+0

感谢,所以是什么,所以当应用程序在后台应用程序可以得到同样的结果。我希望它改变时,页面令牌自定义页面是第2页或第3页... – user633268 2011-03-28 08:24:55

+0

您可以在'application:didFinishLaunchingWithOptions:'中执行相同的操作,而不是'application:didReceiveRemoteNotification:'中的操作。请记住,在第一种情况下,您的应用程序刚刚启动,因此您完全知道所显示的内容,在第二种情况下,用户可能位于应用程序中的任何位置。 – Jilouc 2011-03-28 08:34:18

+0

好的谢谢,还有一个问题,你会如何推荐我改变视图?我被告知要做NSUserDefaults,但我想要的东西,会马上去。如果用户在该页面上,则刷新它。 – user633268 2011-03-28 08:49:57

如果你想要一个本地通知(我假设你的var名称)替换UIApplicationLaunchOptionsRemoteNotificationKeyUIApplicationLaunchOptionsLocalNotificationKey这应该工作。

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

一个错误的地点:

NSDictionary *remoteNotif = [launchOptions objectForKey: 
           UIApplicationLaunchOptionsRemoteNotificationKey]; 

如果要接收远程通知,NSDictionary应使用不是UILocalNotification

远程通知是一个负载,包含参数,而不是本地通知。你可能想看看这个网址的问题:

Crash when handling remote notification when app not running

如果你想要做本地通知,改变它像朱利的建议

您可以使用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]; 
     } 
    } 

上面给出的答案是正确的。我主要是用在我的应用程序下面的代码片段中:didFinishLaunchingWithOptions:

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