2016-01-23 88 views
2

Facebook用户应用程序在用户与推送通知警报消息交互后自动关闭UIViewController。 我想知道他们如何检测用户点击了警报视图中的某个操作。UIAlert上的用户交互

我试图实现基于推送通知委托方法具体的解决方案:

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

不幸的是这是不是真的可靠,特别是对于那些已经注册的推送通知的设备。

这是一个YouTube视频与Facebook的实现工作流程

https://www.youtube.com/embed/sCg3vYx9hlw

UPDATE:

的问题是,当用户预先已删除的应用程序,并已经注册了这个方法被调用推送通知。在这种情况下,isRegisteredForRemoteNotifications是false,所以我要求registerForRemoteNotifications。显示警报时 - 即使用户未在警报对话框中单击任何选项,也会调用应用程序:didRegisterForRemoteNotificationsWithDeviceToken: 。

回答

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]; 
} 
+0

我已更新答案并提供了更多详细信息。即使用户未在警报对话框中单击任何选项,该方法有时也会被调用。 – Giuseppe

+0

你在谈论'registerForRemoteNotifications'和'isRegisteredForRemoteNotifications'和'application:didRegisterForRemoteNotificationsWithDeviceToken:'。我正在讨论'registerUserNotificationSettings'。请确保你没有犯错。 – shpasta