Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Open a view controller when a iOS push notification is received

I want to open a specific view controller when a user clicks on the received push notification message, but when I receive a push notification message and click the message, only the application opens, but it does not redirect to a specific view controller.

My code is

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {     if (applicationIsActive) {         UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Bildirim"                                                             message:[NSString stringWithFormat:@"%@ ",[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]]                                                            delegate:self cancelButtonTitle:@"Ok"                                                    otherButtonTitles:nil];         [alertView show];          UIViewController *vc = self.window.rootViewController;         PushBildirimlerim *pvc = [vc.storyboard instantiateViewControllerWithIdentifier:@"PushBildirimlerim "];          [vc presentViewController:pvc animated:YES completion:nil];      } } 

My question is related with the iOS push notifications.

like image 393
cdsoft Avatar asked Dec 24 '13 08:12

cdsoft


People also ask

Do push notifications work when app is closed iOS?

Apple does not offer a way to handle a notification that arrives when your app is closed (i.e. when the user has fully quit the application or the OS had decided to kill it while it is in the background). If this happens, the only way to handle the notification is to wait until it is opened by the user.

How do I turn on remote notifications on my iPhone?

Go to Settings and tap Notifications. Select an app under Notification Style. Under Alerts, choose the alert style that you want. If you turn on Allow Notifications, choose when you want the notifications delivered — immediately or in the scheduled notification summary.


1 Answers

You may be having issues with the if (applicationIsActive) condition.

Put a breakpoint on -didReceiveRemoteNotification and see whether it executes in different scenarios and see if it goes within the if-condition.

(unrelated to a certain extent but worth checking) this question:
didReceiveRemoteNotification when in background


Note:

-didReceiveRemoteNotification will not execute if your app was (initially) closed and you clicked on the push notification to open the app.
This method executes when a push notification is received while the application is in the foreground or when the app transitions from background to foreground.

Apple Reference: https://developer.apple.com/documentation/uikit/uiapplicationdelegate

If the app is running and receives a remote notification, the app calls this method to process the notification. Your implementation of this method should use the notification to take an appropriate course of action.
...
If the app is not running when a push notification arrives, the method launches the app and provides the appropriate information in the launch options dictionary. The app does not call this method to handle that push notification. Instead, your implementation of the application:willFinishLaunchingWithOptions: or application:didFinishLaunchingWithOptions: method needs to get the push notification payload data and respond appropriately.


So... When the app is not running and a push notification is received, when the user clicks on the push notification, the app is launched and now... the push notification contents will be available in the -didFinishLaunchingWithOptions: method in it's launchOptions parameter.

In other words... -didReceiveRemoteNotification won't execute this time and you'll also need to do this:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {     //...     NSDictionary *userInfo = [launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"];     NSDictionary *apsInfo = [userInfo objectForKey:@"aps"];      if(apsInfo) {         //there is some pending push notification, so do something         //in your case, show the desired viewController in this if block     }     //... } 

Also read Apple's Doc on Handling Local and Remote Notifications

like image 126
staticVoidMan Avatar answered Sep 18 '22 22:09

staticVoidMan