启用和禁用远程通知
Posted
技术标签:
【中文标题】启用和禁用远程通知【英文标题】:Enable & disable remote notifications 【发布时间】:2014-11-17 20:09:49 【问题描述】:应用程序的用户必须能够通过按开/关按钮来启用/禁用远程通知。
应用在“didFinishLaunchingWithOptions”中注册远程通知。 当用户单击按钮禁用远程通知时,代码为
// Register for Push Notifications, if running ios 8
if ([application respondsToSelector:@selector(registerUserNotificationSettings:)])
UIUserNotificationType userNotificationTypes = UIUserNotificationTypeNone;
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes categories:nil];
[application registerUserNotificationSettings:settings];
[application registerForRemoteNotifications];
else
// Register for Push Notifications before iOS 8
[application registerForRemoteNotificationTypes:UIRemoteNotificationTypeNone];
这行得通。远程通知已禁用!
但是当用户再次点击启用远程通知时
if ([application respondsToSelector:@selector(registerUserNotificationSettings:)])
UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound);
UIUserNotificationSettings * settingsAvailable = [UIUserNotificationSettings settingsForTypes:userNotificationTypes categories:nil];
[application registerUserNotificationSettings:settingsAvailable];
[application registerForRemoteNotifications];
else
// Register for Push Notifications before iOS 8
[application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound)];
应用未注册任何类型(警报、徽章或声音)
一些建议?提前致谢。
【问题讨论】:
【参考方案1】:您应该在这里分离出两个概念:首先是要求用户获得接收推送通知的权限,这就是您正在做的事情。获得该权限后,请勿将其关闭。据我了解,您只能请求此权限一次,之后必须在设置应用程序中进行更改(设置 -> 通知)。
您可能应该做的是要求启用一次推送通知,同时在应用程序中跟踪您的推送是在哪里生成的,无论用户是否想要接收推送。 permission 级别由 iOS 管理。次要(开/关)级别由您管理。
【讨论】:
我试图这样做。每次当按钮打开或关闭时,我都会将此选项存储在 userDefault 中并尝试让/或不接收 AppDelegate “didReceivePushNotifications”中的推送通知,但我不知道为什么远程通知仍然是通过电话获得的 您所做的一切都毫无意义。当 didReceiveRemoteNotification 被调用时已经太晚了——推送已经发送、接收,并且用户可能已经看到了。正如我所说,您应该自己跟踪用户的偏好,并根据该偏好发送(或不发送)推送通知。 可能你是对的,应该是最好的方法。谢谢。以上是关于启用和禁用远程通知的主要内容,如果未能解决你的问题,请参考以下文章