当应用程序完全关闭时,推送通知点击上的推送 ViewController 将不起作用
Posted
技术标签:
【中文标题】当应用程序完全关闭时,推送通知点击上的推送 ViewController 将不起作用【英文标题】:Push ViewController on Push Notification Tap Won't Work When App Is Completely Closed 【发布时间】:2015-09-08 23:54:44 【问题描述】:我希望我的应用在用户点击收到的推送通知时推送 NewsViewController。在 didFinishLaunching 我有:
UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeAlert |
UIUserNotificationTypeBadge |
UIUserNotificationTypeSound);
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes
categories:nil];
[[UIApplication sharedApplication]
registerUserNotificationSettings:settings];
[application registerUserNotificationSettings:settings];
[application registerForRemoteNotifications];
然后,仍然在 AppDelegate 中,我有:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
[PFPush handlePush:userInfo];
UINavigationController *nav = (UINavigationController *) self.tabBarController.selectedViewController;
NewsViewController *dvController8 = [[NewsViewController alloc] initWithNibName:@"NewsViewController" bundle:[NSBundle mainBundle]];
[nav pushViewController:dvController8 animated:YES];
if (application.applicationState == UIApplicationStateInactive)
UIAlertView *test = [[UIAlertView alloc] initWithTitle:@"INACTIVE" message:@"INACTIVE" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
[test show];
[self handleRemoteNotificationWithPayload:userInfo];
-(void)handleRemoteNotificationWithPayload:(NSDictionary *)payload
UINavigationController *nav = (UINavigationController *) self.tabBarController.selectedViewController;
NewsViewController *dvController8 = [[NewsViewController alloc] initWithNibName:@"NewsViewController" bundle:[NSBundle mainBundle]];
[nav pushViewController:dvController8 animated:YES];
如果用户在应用打开时收到推送,它会转到 NewsViewController。如果当他们点击推送通知时应用程序正在后台运行,它会转到 NewsViewController。但是,如果用户已经从应用程序切换器完全关闭了应用程序,然后点击收到的通知,它会打开应用程序,而不会转到 NewsViewController。我该如何解决这个问题?
【问题讨论】:
如果您查看我之前提供的示例,它指出您还需要在application didFinishLaunchingWithOptions
中调用它,我猜您忽略了它。这是一个新手失礼,文档会帮助你。我建议你开始和它交朋友
@soulshined 你之前从来没有回复过。当也将其放入 didFinishLaunchingWithOptions
时,它会在每次首次启动应用程序时推送该视图控制器,而不仅仅是在收到推送时。
那你设置错了。您必须进行条件检查以查看应用程序是由 userInfo 打开还是刚刚打开。你可以通过说if (userInfo)
来做到这一点,这有意义吗?
这未包含在我的其他答案中。我很抱歉。它应该是给定的。再次。你学到的所有东西都准备好了文档。你真的应该开始做。而且我之前没有收到其他通知。
@soulshined 这一定是问题所在。设置推送通知的解析文档没有关于任何 userInfo 标识符。
【参考方案1】:
很抱歉造成混乱。这是您确定是通过通知 (userInfo) 还是仅通过图标交互打开已终止应用的方式:
-(BOOL)application(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
...
NSDictionary *notificationPayload = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];
// Create a pointer to extract the userInfo
[self handleRemoteNotificationWithPayload:notificationPayload];
...
在您的方法中,您可以通过简单的交叉引用来确定它是否通过有效负载打开:
-(void)handleRemoteNotificationWithPayload:(NSDictionary *)payload
...
if (payload)
//do something or get additional parameters from dictionary to segue alternate views
...
【讨论】:
以上是关于当应用程序完全关闭时,推送通知点击上的推送 ViewController 将不起作用的主要内容,如果未能解决你的问题,请参考以下文章