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:
)相同
如果你想要一个本地通知(我假设你的var名称)替换UIApplicationLaunchOptionsRemoteNotificationKey
UIApplicationLaunchOptionsLocalNotificationKey
这应该工作。
(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)
}
感谢,所以是什么,所以当应用程序在后台应用程序可以得到同样的结果。我希望它改变时,页面令牌自定义页面是第2页或第3页... – user633268 2011-03-28 08:24:55
您可以在'application:didFinishLaunchingWithOptions:'中执行相同的操作,而不是'application:didReceiveRemoteNotification:'中的操作。请记住,在第一种情况下,您的应用程序刚刚启动,因此您完全知道所显示的内容,在第二种情况下,用户可能位于应用程序中的任何位置。 – Jilouc 2011-03-28 08:34:18
好的谢谢,还有一个问题,你会如何推荐我改变视图?我被告知要做NSUserDefaults,但我想要的东西,会马上去。如果用户在该页面上,则刷新它。 – user633268 2011-03-28 08:49:57