UIAlert上的用户交互

时间:2016-01-23 17:58:41

标签: ios swift uikit apple-push-notifications uialertview

Facebook Messenger应用程序在用户与推送通知警报消息交互后自动解除UIViewController。 我想知道他们是如何检测到用户点击了警报视图上的其中一个操作。

我尝试基于推送通知委托方法实现特定的解决方案:

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData)
func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError)

不幸的是,这实际上并不可靠,特别是对于已注册推送通知的设备。

这是一个youtube视频,其工作流程由Facebook实施

learn to use the developer tools

更新:

问题是,当用户先前已删除应用程序且已注册推送通知时,会调用此方法。在这种情况下,isRegisteredForRemoteNotifications为false,因此我要求注册ForRemoteNotifications。显示警报时 - application:didRegisterForRemoteNotificationsWithDeviceToken: 即使用户未在警告对话框中单击任何选项,也会调用它。

1 个答案:

答案 0 :(得分:0)

对于iOS8及更高版本,注册如下通知:

UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound) categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];

在用户与推送通知警报消息进行交互时调用的AppDelegate didRegisterUserNotificationSettings方法中,您可以在此处注册通知。在此委托方法中,您可以检查是否允许应用程序接收推送通知以及使用哪种通知类型:

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
    // here you can check notification settings
    // and do some ui changes

    [application registerForRemoteNotifications];
}