【问题标题】:iphone Launch Optionsiphone 启动选项
【发布时间】:2011-03-28 08:00:35
【问题描述】:

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

UILocalNotification *localNotif =
[launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

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

}

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

感谢阅读。

【问题讨论】:

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


    【解决方案1】:

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

    如果您的应用没有启动(甚至没有在后台暂停),launchOptions 将包含通知负载(键 UIApplicationLaunchOptionsRemoteNotificationKey)。

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

    本地通知流程相同(UIApplicationLaunchOptionsLocalNotificationKey in application:didFinishLaunchingWithOptions: and application:didReceiveLocalNotification:

    【讨论】:

    • 谢谢,所以当应用程序在后台时,应用程序可以获得相同的结果......我希望它在令牌自定义页面为第 2 页或第 3 页时更改页面.. .
    • 您可以在application:didFinishLaunchingWithOptions: 中执行与在application:didReceiveRemoteNotification: 中相同的操作。请记住,在第一种情况下,您的应用刚刚启动,因此您完全了解显示的内容,而在第二种情况下,用户可能在您应用中的任何位置。
    • 好的,谢谢,还有一个问题,您建议我如何更改视图?我被告知要执行 NSUserDefaults,但我想要立即执行的操作。如果用户在该页面上,则刷新它。
    【解决方案2】:

    发现一个错误:

    NSDictionary *remoteNotif = [launchOptions objectForKey:   
                                  UIApplicationLaunchOptionsRemoteNotificationKey];
    

    如果你想接收远程通知,应该使用NSDictionary而不是UILocalNotification

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

    Crash when handling remote notification when app not running

    如果您想做本地通知,请按照 Ludovic 的建议进行更改

    【讨论】:

      【解决方案3】:

      上面给出的答案是正确的。我在我的应用程序中主要使用以下 sn-p: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 中,第一次将布尔值设置为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];
                    }
                }
            

            【讨论】:

              猜你喜欢
              • 2012-02-02
              • 1970-01-01
              • 2011-09-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-02-21
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多