完成启动后或在我们的应用程序内启用/禁用推送通知

时间:2016-09-09 07:45:47

标签: ios objective-c iphone push-notification

我需要在完成启动后在我们的应用程序内启用/禁用或注册/取消注册推送通知。我在发布后和我的应用程序"帐户设置"

中执行此功能

我试过下面的代码,但它没有用。

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

我的要求:我会以编程方式启用或禁用我的应用内的通知切换,而不是直接转到设置 - >通知。

3 个答案:

答案 0 :(得分:3)

您不应该使用unregisterForRemoteNotifications,它将完全取消注册APNS,如苹果所说

  

您应该在极少数情况下调用此方法,例如a   新版本的应用程序删除了对所有类型的遥控器的支持   通知。用户可以通过“设置”应用的“通知”部分暂时阻止应用接收远程通知。

这里是link

如果在服务器端实施禁用推送通知会更好。只是告诉你的服务器人员发送服务不发送APN。

或者您也可以打开设置应用的通知部分,如下所示

if (&UIApplicationOpenSettingsURLString != NULL){
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}

答案 1 :(得分:1)

您可以分别致电registerForRemoteNotificationTypesunregisterForRemoteNotificationTypes,在应用中轻松启用和停用推送通知。

启用

[[UIApplication sharedApplication] registerForRemoteNotifications];

禁用

[[UIApplication sharedApplication] unregisterForRemoteNotifications];

答案 2 :(得分:1)

究竟什么不起作用?

您是获得设备令牌(应用委托代理application:didRegisterForRemoteNotificationsWithDeviceToken:)还是错误(application:didFailToRegisterForRemoteNotificationsWithError:)?

作为替代解决方案,您可以在用户的​​服务器上存储用户的偏好(无论是否接收通知),而不是订阅和取消订阅。