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

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

现在我怀疑,

  1. 第一次如果用户在几天之后再次从应用中取消推送通知服务(点击Cancelbutton),如果他们想要接收苹果推送通知,则可以从App再次为该特定用户启用苹果推送通知。

  2. 如果用户先接受苹果推送通知服务,并在几天之后不接收通知,那么可以在我们的应用程序中禁用APNS ? 我希望你明白我的怀疑。 任何人都可以澄清这个疑问吗?

  3. 在我们的iPhone应用程序中可以做到这些情况吗?

请帮帮我。 提前致谢。

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

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

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

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

为了禁用

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

1.从你的应用程序没有它刚刚出现第一次安装后,用户打开你的应用程序..如果他决定允许它,他可以从设备设置激活。

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

我已经回答了。

祝你好运。

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

您可以使用此代码在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中不受支持”?

实际上,可以通过注册和取消注册推送通知来启用和禁用推送通知。

启用推送通知:

 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()