iOS 6:收到推送通知后更新视图,但应用已关闭

Sta*_* S. 4 push-notification apple-push-notifications ios ios6

应用程序收到推送通知后,我想更改主要部分按钮的标题ViewController.为了实现这个行为,我在我的应用程序委托方法中覆盖了application: didReceiveRemoteNotification:重新实例化UINavigationController控制器的方法,我想将其更新为根视图控制器,将按钮的标题设置为我想要的:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
       UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:self.welcomeViewController];
       [self.window setRootViewController:navController];
       [self.welcomeViewController.buttonToUpdate setTitle: @"Updated Text" forState: UIControlStateNormal];
}
Run Code Online (Sandbox Code Playgroud)

虽然这可能不是最好的解决方案(也许我可以UIButtons完全忘记并使视图控制器使用UITableView其行充当按钮?),但它适用于以下场景:

1)应用程序在前台.弹出推送通知提醒,用户触摸OK,视图更新正常.

2)应用程序在后台/关闭.设备处于锁定模式.推送通知到达,用户解锁设备,应用程序加载,查看也更新正常.

例如,当用户使用其他应用程序并且推送通知到达时,问题就出现了,但是用户不是通过推送通知而是通过点击应用程序图标来打开应用程序.在这种情况下,application: didReceiveRemoteNotification:似乎没有被调用,问题中的视图永远不会更新.

希望我的解释清楚.我愿意接受有关不同方法的建议,或者如何使用我的方法处理最后一个方案.

谢谢!

Era*_*ran 8

来自APNS开发指南:

让我们回顾操作为应用程序提供本地通知或远程通知时的可能方案.

当应用程序未在前台运行时,将传递通知.在这种情况下,系统显示通知,显示警报,标记图标,或者播放声音.

作为所呈现的通知的结果,用户点击警报的动作按钮或点击(或点击)应用程序图标.如果点击操作按钮(在运行iOS的设备上),系统将启动应用程序,应用程序将调用其委托的应用程序:didFinishLaunchingWithOptions:method(如果已实现); 它传递通知有效负载(用于远程通知)或本地通知对象(用于本地通知).

如果在运行iOS的设备上轻触应用程序图标,则应用程序会调用相同的方法,但不会提供有关通知的信息.

您遇到的行为是点击应用图标时的预期行为.在这种情况下,就像用户正常启动应用程序并且没有推送通知一样.在这种情况下,您可以选择显示不同内容的唯一方法是在应用程序启动时联系您的服务器,并获取一些信息,指示最近发送到该设备的推送通知.

  • 我准备发布类似的东西.当您的应用在后台时(在大多数情况下),您无法更改其状态.我们一直使用后端服务器检查状态作为解决方案. (2认同)