我在推送通知后没有获得任何启动选项;继承了我的代码,但NSLog的非代码似乎在调试区域中打印。
UILocalNotification *localNotif =
[launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (localNotif) {
NSString *itemName = [localNotif.userInfo objectForKey:@"aps"];
NSLog(@"Custom: %@", itemName);
} else {
NSLog(@"//////////////////////////");
}
当我打开应用程序时(通过按下推送通知上的视图),它会转到didReceiveRemoteNotification脚本,我不确定这是否意味着发生..
感谢阅读。
答案 0 :(得分:17)
您的应用程序会通过多个路径接收推送通知,具体取决于收到应用时的应用状态。
如果您的应用未启动(甚至未在后台暂停),则launchOptions
将包含通知有效内容(密钥UIApplicationLaunchOptionsRemoteNotificationKey
)。
如果它已在后台运行或暂停,则应用会通过您的应用代表中的application:didReceiveRemoteNotification:
收到通知。
本地通知的过程相同(应用程序中的UIApplicationLaunchOptionsLocalNotificationKey:didFinishLaunchingWithOptions:和application:didReceiveLocalNotification:
)
答案 1 :(得分:1)
发现错误:
NSDictionary *remoteNotif = [launchOptions objectForKey:
UIApplicationLaunchOptionsRemoteNotificationKey];
如果您想接收远程通知,则应使用NSDictionary
而不是UILocalNotification
远程通知是一个有效负载,包含参数,而不是本地通知。您可能想看看这个网址问题:
Crash when handling remote notification when app not running
如果您想进行本地通知,请将其更改为Ludovic的建议
答案 2 :(得分:1)
上面给出的答案是正确的。我在我的应用程序中主要使用以下代码片段:didFinishLaunchingWithOptions:
if let remoteNotifPayload = launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] as? [AnyHashable: Any] {
notificationsController.didReceiveRemoteNotification(with: remoteNotifPayload)
}
答案 3 :(得分:0)
如果您想要本地通知(我假设使用您的var名称),请将UIApplicationLaunchOptionsRemoteNotificationKey
替换为UIApplicationLaunchOptionsLocalNotificationKey
,这应该可以。
答案 4 :(得分:0)
(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
NSLog(@"Alert message: %@",[[userInfo valueForKey:@"aps"] valueForKey:@"alert"]);
}
答案 5 :(得分:0)
您可以使用NSUserDefaults
来完成这项工作。在AppDeligate.m
中,首次将布尔设置为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];
}
}