在完成启动后或在我们的应用程序内启用/禁用推送通知
Posted
技术标签:
【中文标题】在完成启动后或在我们的应用程序内启用/禁用推送通知【英文标题】:Enable/Disable push notification after did finish launch or inside our app 【发布时间】:2016-09-09 07:45:47 【问题描述】:完成启动后,我需要在我们的应用程序中启用/禁用或注册/取消注册推送通知。我将在启动后并在我的应用“帐户设置”中执行此功能
我尝试了下面的代码,但它不起作用。
if (cell.switchButton.on)
if ([[UIApplication sharedApplication]respondsToSelector:@selector(isRegisteredForRemoteNotifications)])
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
[[UIApplication sharedApplication] registerForRemoteNotifications];
else
[[UIApplication sharedApplication] unregisterForRemoteNotifications];
我的要求:我将以编程方式在我的应用程序中启用或禁用通知切换,而不是直接转到设置 -> 通知。
【问题讨论】:
什么错误?请解释 在设置页面中禁用 APNS 后检查一次是否调用了您是否已完成启动 【参考方案1】:你不应该使用unregisterForRemoteNotifications
,它会像苹果说的那样完全注销APNS
您应该只在极少数情况下调用此方法,例如当 该应用程序的新版本取消了对所有类型遥控器的支持 通知。用户可以通过“设置”应用的“通知”部分暂时阻止应用接收远程通知。
这里是link
如果您在服务器端实现禁用推送通知会更好。刚刚告诉您的服务器人员提供服务以不发送 APN。
或者您也可以打开设置应用程序的通知部分,如下所示
if (&UIApplicationOpenSettingsURLString != NULL)
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
【讨论】:
可以通过编程方式启用和禁用通知切换。我的意思是我不会去设置和禁用或启用切换。而不是我可以在我的应用程序中以编程方式切换切换。 for swift --> if let appSettings = NSURL(string: UIApplicationOpenSettingsURLString) UIApplication.shared.openURL(appSettings as URL) 【参考方案2】:您可以通过分别调用registerForRemoteNotificationTypes
和unregisterForRemoteNotificationTypes
在您的应用程序中轻松启用和禁用推送通知。
启用
[[UIApplication sharedApplication] registerForRemoteNotifications];
禁用
[[UIApplication sharedApplication] unregisterForRemoteNotifications];
【讨论】:
【参考方案3】:究竟是什么不工作?
您是否获得了设备令牌(应用委托的application:didRegisterForRemoteNotificationsWithDeviceToken:
)或错误(application:didFailToRegisterForRemoteNotificationsWithError:
)?
作为替代解决方案,您可以将用户的偏好(是否接收通知)存储在您的服务器上,而不是订阅和取消订阅。
【讨论】:
以上是关于在完成启动后或在我们的应用程序内启用/禁用推送通知的主要内容,如果未能解决你的问题,请参考以下文章