在应用内启用或禁用Iphone推送通知

时间:2012-05-09 05:59:38

标签: ios swift push-notification unusernotificationcenter usernotifications

我有一个iphone应用程序,可以接收推送通知。目前我可以通过转到iphone设置/通知来禁用我的应用程序的推送通知。

但我想在我的应用程序中添加一个开关或按钮来启用或禁用推送通知。

它可以完成,因为我在foursqure中看到了iphone应用程序。他们在设置呼叫通知设置中有一个部分,用户可以启用或禁用该应用的不同类型的通知。

我在网上寻找一个合适的解决方案,但仍未找到方法。任何人都可以知道如何做到这一点?

提前致谢:)

4 个答案:

答案 0 :(得分:31)

[仅供参考 - 很少有用户报告它已停止在iOS 10上工作]

您可以再次分别致电registerForRemoteNotificationTypesunregisterForRemoteNotificationTypes,轻松启用和停用推送通知。我试过这个并且有效。

答案 1 :(得分:20)

首先,您在应用内部can not enable and disable push notification。如果您找到了一些应用程序,那么必须有解决方案。

如果您想在应用程序内部进行操作,请使用一个标识符并根据推送通知启用和禁用按钮将其发送到服务器。因此,您的服务器端编码使用此标识符并根据该标识符工作。像标识符一样,它表示启用,否则服务器将发送通知,否则不会。

您可以使用以下代码检查该用户设置enabledisable Push Notifications

启用或禁用Iphone推送通知

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
if (types == UIRemoteNotificationTypeNone) 
 // Yes it is..

希望,这会对你有帮助..

答案 2 :(得分:1)

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

启用推送通知:

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

答案 3 :(得分:0)

如果您使用FireBase向设备发送推送通知,则可以使用主题订阅在已订阅的设备中启用推送通知,并在您不希望用户接收推送通知时从主题退订用户在那些尚未订阅的设备中。

要将用户订阅主题,只需导入Firebase,然后使用此方法即可:

Messaging.messaging().subscribe(toTopic: "topicName")

并取消订阅用户使用:

Messaging.messaging().unsubscribe(fromTopic: "topicName")