21

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

现在我的疑问是,

  1. Cancel第一次,如果用户在几天后再次从应用程序中取消推送通知服务(单击按钮),如果他们希望收到 Apple 推送通知,则可以从应用程序中再次为特定用户启用 Apple 推送通知。

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

  3. 有可能在我们的 iPhone 应用中实现以上这些场景吗?

请帮我。提前致谢。

4

7 回答 7

16

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

于 2012-05-08T07:14:33.530 回答
15

遗憾的是,您无法通过应用代码为您的应用启用或禁用推送通知。请求许可的对话框只显示一次。通常,其他应用程序会通过进入设置-> 通知-> 应用程序名称向用户显示启用/禁用推送通知的说明。

于 2012-05-08T06:54:00.967 回答
5

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

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

为了禁用

[[UIApplication sharedApplication] unregisterForRemoteNotifications];
NSLog(@"UnRegistered for pushnotification");
于 2014-06-27T11:58:02.093 回答
1

当您第一次授予权限时,您的 iPhone 的设备令牌会在 APN 服务器上注册,然后您就可以收到推送通知。稍后您可以从您的设备设置 → 通知 → 您的应用程序启用/禁用。

于 2012-08-29T09:10:18.117 回答
1

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

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

3.我已经回答了。

祝你好运。

于 2012-05-08T06:58:42.430 回答
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()
于 2017-06-24T05:48:23.113 回答
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(@"");
    }
}

请参阅如何使用 enabledRemoteNotificationTypes 更新代码,因为它“在 iOS 8 中不受支持”?

于 2015-12-17T08:48:51.543 回答