当应用程序完全关闭时,在推送通知上推送 ViewController 点按将不起作用
Push ViewController on Push Notification Tap Won't Work When App Is Completely Closed
我希望我的应用程序在用户点击收到的推送通知时推送 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。我该如何解决这个问题?
抱歉造成混淆。这是您确定终止的应用程序是通过通知 (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
}
...
}
我希望我的应用程序在用户点击收到的推送通知时推送 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。我该如何解决这个问题?
抱歉造成混淆。这是您确定终止的应用程序是通过通知 (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
}
...
}