从iPhone应用程序启用/禁用Apple推送通知?

时间:2012-05-08 06:49:35

标签: ios iphone permissions push-notification apple-push-notifications

我对APNS还有一个疑问。这是当应用程序首次启动应用程序请求Apple推送通知权限时,如果用户接受了他们可以接收通知。如果用户取消他们无法收到任何通知。我清楚吗?

现在我怀疑是,

  1. 如果用户第一次取消推送通知服务(几次点击Cancel按钮),如果他们想要收到Apple推送通知,则可以再次启用Apple推送通知对于来自App的特定用户。

  2. 如果用户首先接受Apple推送通知服务,并且在几天后如果他们不想接收通知,则可以在我们的应用中禁用APNS?我希望你理解我的怀疑。任何人都可以澄清这个疑问吗?

  3. 可以在我们的iPhone应用程序中执行以上方案吗?

  4. 请帮帮我。提前谢谢。

7 个答案:

答案 0 :(得分:16)

您可以使用UIRemoteNotificationType enabledTypes = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];读取应用的权限,然后使用不同类型执行按位和操作,以查看哪些已启用。您也可以拨打unregisterForRemoteNotifications来停用通知。你不能做的一件事是打开通知,虽然你可以指导用户。

答案 1 :(得分:15)

很遗憾,您无法从应用代码启用或禁用应用的推送通知。请求权限的对话框仅显示一次。 通常,其他应用程序通过进入设置 - >向用户显示启用/禁用推送通知的指令。通知 - > AppName的。

答案 2 :(得分:4)

我的要求是使用UISwitch启用和禁用pushnotificaton。为了从代码中启用推送通知,请在按钮操作中使用此功能。

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
   (UIRemoteNotificationTypeBadge |  UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

要禁用

[[UIApplication sharedApplication] unregisterForRemoteNotifications];
NSLog(@"UnRegistered for pushnotification");

答案 3 :(得分:1)

1.从您的应用程序中取出它只是在用户首次安装后打开您的应用程序时出现..如果他决定允许它,他可以从设备设置激活。

2.可以从应用程序和设置中完成..如果要从应用程序中禁用它,您可以将设备令牌(决定禁用推送通知)发送到您的服务器并将其存储为ex。作为“没有通知列表”,当发送有效负载时,您忽略这些令牌,这样他们就不会收到通知。

3.我已经回答了。

祝你好运。

答案 4 :(得分:1)

当您第一次授予iPhone的设备令牌向APN服务器注册时,您可以接收推送通知。稍后您可以通过设备设置→通知→您的应用启用/禁用。

答案 5 :(得分:0)

您可以使用此代码在iOS 9中提供支持

    if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]) {

    UIUserNotificationType types = [[[UIApplication sharedApplication] currentUserNotificationSettings] types];

    if (types == UIUserNotificationTypeNone) {
        // Do something
        NSLog(@"");
    }
} else {

    UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];

    if (types == UIRemoteNotificationTypeNone) {
        // Do something
        NSLog(@"");
    }
}

请参阅How to update code using enabledRemoteNotificationTypes because it is "not supported in iOS 8"?

答案 6 :(得分:0)

务实地说,可以启用&通过注册和取消注册推送通知来禁用推送通知。

启用推送通知:

if #available(iOS 10.0, *) {
   // For iOS 10.0 +
   let center  = UNUserNotificationCenter.current()
   center.delegate = self
   center.requestAuthorization(options: [.sound, .alert, .badge]) { (granted, error) in
        if error == nil{
           DispatchQueue.main.async(execute: {
                 UIApplication.shared.registerForRemoteNotifications()
           }) 
        }
   }
}else{
    // Below iOS 10.0

    let settings = UIUserNotificationSettings(types: [.sound, .alert, .badge], categories: nil)
    UIApplication.shared.registerUserNotificationSettings(settings)

    //or
    //UIApplication.shared.registerForRemoteNotifications()
}

委派方法

@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {

}

@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {

}


func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    // .. Receipt of device token
}


func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
    // handle error
}

停用推送通知:

UIApplication.shared.unregisterForRemoteNotifications()