iphone启动选项

时间:2011-03-28 08:00:35

标签: iphone push-notification apple-push-notifications

我在推送通知后没有获得任何启动选项;继承了我的代码,但NSLog的非代码似乎在调试区域中打印。

UILocalNotification *localNotif =
[launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

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

}

当我打开应用程序时(通过按下推送通知上的视图),它会转到didReceiveRemoteNotification脚本,我不确定这是否意味着发生..

感谢阅读。

6 个答案:

答案 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];
        }
    }