我需要在完成启动后在我们的应用程序内启用/禁用或注册/取消注册推送通知。我在发布后和我的应用程序"帐户设置"
中执行此功能我试过下面的代码,但它没有用。
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];
}
我的要求:我会以编程方式启用或禁用我的应用内的通知切换,而不是直接转到设置 - >通知。
答案 0 :(得分:3)
您不应该使用unregisterForRemoteNotifications
,它将完全取消注册APNS,如苹果所说
您应该在极少数情况下调用此方法,例如a 新版本的应用程序删除了对所有类型的遥控器的支持 通知。用户可以通过“设置”应用的“通知”部分暂时阻止应用接收远程通知。
这里是link
如果在服务器端实施禁用推送通知会更好。只是告诉你的服务器人员发送服务不发送APN。
或者您也可以打开设置应用的通知部分,如下所示
if (&UIApplicationOpenSettingsURLString != NULL){
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}
答案 1 :(得分:1)
您可以分别致电registerForRemoteNotificationTypes
和unregisterForRemoteNotificationTypes
,在应用中轻松启用和停用推送通知。
启用
[[UIApplication sharedApplication] registerForRemoteNotifications];
禁用
[[UIApplication sharedApplication] unregisterForRemoteNotifications];
答案 2 :(得分:1)
究竟什么不起作用?
您是获得设备令牌(应用委托代理application:didRegisterForRemoteNotificationsWithDeviceToken:
)还是错误(application:didFailToRegisterForRemoteNotificationsWithError:
)?
作为替代解决方案,您可以在用户的服务器上存储用户的偏好(无论是否接收通知),而不是订阅和取消订阅。