提问人:Sameera Chathuranga 提问时间:5/9/2012 最后编辑:KrunalSameera Chathuranga 更新时间:1/4/2022 访问量:33934
在应用程序内启用或禁用 Iphone 推送通知
Enable or Disable Iphone Push Notifications inside the app
问:
我有一个 iphone 应用程序,可以接收推送通知。目前,我可以通过转到 iphone 设置/通知来禁用我的应用程序的推送通知。
但我想在我的应用程序中添加一个开关或按钮来启用或禁用推送通知。
这是可以做到的,因为我在 foursqure iphone 应用程序中看到了它。他们在设置呼叫通知设置中有一个部分,用户可以为应用程序启用或禁用不同类型的通知。
我在网上寻找合适的解决方案,但仍然没有找到方法。任何人都可以给出任何想法吗?
提前致谢:)
答:
第一件事是你进入应用程序。如果您找到一些应用程序可以做到这一点,那么必须有解决方法。can not enable and disable
push notification
就像你想在应用程序内做一样,然后使用一个标识符,并根据推送通知启用和禁用按钮将其发送到服务器。因此,您的服务器端编码使用此标识符并据此工作。就像标识符说它已启用,否则您的服务器将发送通知。
您可以使用以下代码检查该用户集。enable
disable
Push Notifications
启用或禁用 Iphone 推送通知
UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
if (types == UIRemoteNotificationTypeNone)
// Yes it is..
希望,这会对你有所帮助..
评论
[仅供参考 - 很少有用户报告说它停止在iOS 10上运行]
您可以通过再次调用 和 来轻松启用和禁用应用程序中的推送通知。我已经尝试过这个,它有效。registerForRemoteNotificationTypes
unregisterForRemoteNotificationTypes
评论
实际上,可以通过注册和取消注册推送通知来启用和禁用推送通知。
启用推送通知:
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()
评论
如果您使用 to 向设备发送推送通知,则可以使用主题订阅在订阅的设备中启用推送通知,并在不希望用户在已取消订阅的设备中接收推送通知时取消订阅该主题。FireBase
要为用户订阅主题,只需导入 Firebase,然后使用以下方法:
Messaging.messaging().subscribe(toTopic: "topicName")
并取消订阅用户使用:
Messaging.messaging().unsubscribe(fromTopic: "topicName")
首先检查权限,然后进行相应的更改。
func checkPermission(completion: @escaping (_ isCameraPermissionOn: Bool) -> ()) {
let current = UNUserNotificationCenter.current()
current.getNotificationSettings(completionHandler: { permission in
switch permission.authorizationStatus {
case .authorized:
//If user allow the permission
completion(true)
case .denied:
//If user denied the permission
completion(false)
case .notDetermined:
//First time
current.requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
if granted {
completion(true)
} else {
completion(false)
}
}
case .provisional:
// @available(iOS 12.0, *)
// The application is authorized to post non-interruptive user notifications.
completion(true)
case .ephemeral:
// @available(iOS 14.0, *)
// The application is temporarily authorized to post notifications. Only available to app clips.
completion(true)
@unknown default:
print("Unknow Status")
}
})
}
叫:
AppsPermissionCheckingManager.shared.checkPermission { isPermissionOn in
DispatchQueue.main.async {
if isPermissionOn == true {
//It's on
} else {
//It's off
}
}
}
评论