用户拒绝推送通知提示时的回调方法?

最白目*_*最白目 35 objective-c push-notification apple-push-notifications ios

我的问题是我想显示初始推送通知提示的加载屏幕"应用程序想要向您发送推送通知".

因此,如果用户点击,yes我可以继续并在随后调用的委托方法中启动应用程序:

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

- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
  [self hideLoadingScreen];
}
Run Code Online (Sandbox Code Playgroud)

但是,如果用户点击no,则不会调用这些方法,这是有道理的.我的问题是,是否有一个不同的委托方法,如果他拒绝,会被解雇?

我的问题是如果no被选中,加载屏幕永远不会消失.所以我不知何故需要知道用户何时完成选择.

Jef*_*cia 32

在iOS 7中,当系统的推送通知提示出现时,应用程序变为非活动状态,并且UIApplicationWillResignActiveNotification将触发.类似地,当用户响应提示时(按"是"或"否"),应用程序再次变为活动状态,并且UIApplicationDidBecomeActiveNotification将触发.

因此,您可以收听此通知,然后隐藏加载屏幕.

注意:显示提示时,"主页"按钮,"通知中心"和"控制中心"将被禁用,因此无法触发误报UIApplicationDidBecomeActiveNotification.但是,如果用户按下"锁定"按钮,则会触发UIApplicationDidBecomeActiveNotification.

  • 我可以确认这种行为在 iOS 10 中仍然存在 (2认同)
  • 我可以确认这种行为在 iOS 12 中仍然存在 (2认同)

Grz*_*ski 6

您始终可以获取当前允许的通知类型:

UIRemoteNotificationType notificationTypes = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
Run Code Online (Sandbox Code Playgroud)

请记住,用户还可以在手机设置中禁用通知.

如果你在didRegisterForRemoteNotificationsWithDeviceToken上检查,你应该看看你要求的类型是否已启用.

  • 我的问题是didRegisterForRemoteNotificationsWithDeviceToken和didFailToRegisterForRemoteNotificationsWithError永远不会被调用,如果用户在提示符上没有命中. (6认同)
  • iOS 8 SDK中的API已更改.在iOS> = 8.0时,您必须检查`[[UIApplication sharedApplication] currentUserNotificationSettings] .categories`. (6认同)