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
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…