Callback Method if user declines Push Notification Prompt?

最白目 picture 最白目 · Sep 27, 2013 · Viewed 21.9k times · Source

My problem is I want to show a loading screen for the initial Push Notification Prompt "The app wants to send you push notifications."

So if the user hits yes I can proceed and start the app in the then invoked delegate methods:

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
  [self hideLoadingScreen];
}

- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
  [self hideLoadingScreen];
}

However if the user hits no, none of these methods get called, which makes sense. My question is, is there a different delegate method that gets fired if he declines?

My problem is if no is selected, the loading screens never disappear. So I somehow need to know when the user is done with the selection.

Answer

Jeff Mascia picture Jeff Mascia · Apr 25, 2014

In iOS 7, when the system's push notification prompt appears, the app becomes inactive and UIApplicationWillResignActiveNotification fires. Similarly when the user responds to the prompt (pressing either Yes or No), the app becomes active again and UIApplicationDidBecomeActiveNotification fires.

So you can listen for this notification, and then hide your loading screen.

Note: While the prompt is displayed, the Home button, Notification Center, and Control Center are disabled so they cannot trigger a false-positive UIApplicationDidBecomeActiveNotification. However if the user presses Lock button it will trigger UIApplicationDidBecomeActiveNotification.