如何正确禁用/启用推送通知
Posted
技术标签:
【中文标题】如何正确禁用/启用推送通知【英文标题】:How to correctly disable/enable push notifications 【发布时间】:2019-08-12 08:00:54 【问题描述】:各位开发者您好。
我正在尝试使用 UISwitch 创建一个操作,该操作允许用户禁用/启用他们的推送通知。当我关闭开关时,我不再收到推送通知。但是,如果我尝试重新打开它,我仍然没有收到它。也使用 Firebase。
这是我的应用委托代码。我会尝试分享相关代码,但如果您需要,请随时请求更多代码。
PS:我用于切换器的代码实际上来自我在 *** 上找到的答案。
// App delegate
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
print("Registered for notifications", deviceToken)
Messaging.messaging().apnsToken = deviceToken
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String)
print("Registered with FCM with token:", fcmToken)
private func attemptRegisterForNotifications(application: UIApplication)
// APNS means Apple push notification services
print("Attempting to register APNS...")
Messaging.messaging().delegate = self
UNUserNotificationCenter.current().delegate = self
// user notification auth
// all of this works for ios 10+
let options: UNAuthorizationOptions = [.alert, . badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(options: options) (granted, error) in
if let error = error
print("Failed to request auth:", error)
return
if granted
print("Auth granted.")
else
print("Auth denied")
application.registerForRemoteNotifications()
这是我在设置视图控制器中的代码
self.notificationSwitch.addTarget(self, action: #selector(action(sender:)), for: .valueChanged)...
@objc func action(sender: UISwitch)
let userDefaults = UserDefaults.standard
userDefaults.set(sender.isOn, forKey:"identifier")
if(notificationSwitch.isOn)
print("Switch is on")
UIApplication.shared.registerForRemoteNotifications()
else
print("Switch is off")
UIApplication.shared.unregisterForRemoteNotifications()
【问题讨论】:
尝试从您的服务器/firebase 以及在您的切换操作中删除设备令牌。 @charanjitsingh 好的,我试试看! 【参考方案1】:根据unregisterForRemoteNotifications 的文档:
您应该只在极少数情况下调用此方法,例如当 该应用程序的新版本取消了对所有类型遥控器的支持 通知。用户可以暂时阻止应用接收 通过设置的通知部分进行远程通知 应用程序。通过此方法取消注册的应用始终可以重新注册。
正确的方式(其实在我做过的项目中看到的方式)是调用一个api,告诉后端不应该发送推送通知。
【讨论】:
我想知道我是否应该只是从头开始操作然后将其删除。我只是认为如果用户在收到诸如 cmets、like 等通知时感到恼火,给用户提供选项是一种很好的用户体验 确实是不错的用户体验。每个应用程序都有它。你只需要引入一个新的 api 设置一个标志后端来取消注册。后端实际上不会注销设备令牌,但它会检查标志并决定是否向 APNS 发送推送通知。 知道了。明天我会努力的,谢谢,我完全理解。接受答案。以上是关于如何正确禁用/启用推送通知的主要内容,如果未能解决你的问题,请参考以下文章