启用和禁用远程通知

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 被调用时已经太晚了——推送已经发送、接收,并且用户可能已经看到了。正如我所说,您应该自己跟踪用户的偏好,并根据该偏好发送(或不发送)推送通知。 可能你是对的,应该是最好的方法。谢谢。

以上是关于启用和禁用远程通知的主要内容,如果未能解决你的问题,请参考以下文章

如何部分启用/禁用远程推送通知客户端?

不显示基于自定义数据的远程通知

iOS推送通知和远程通知的区别?

远程通知令牌处理

Phonegap 无需插件即可构建远程推送通知?

如何在没有证书的情况下设置远程通知? (注册护士)