【问题标题】:How to correctly disable/enable push notifications如何正确禁用/启用推送通知
【发布时间】:2019-08-12 08:00:54
【问题描述】:

各位开发者您好。

我正在尝试使用 UISwitch 创建一个操作,该操作允许用户禁用/启用他们的推送通知。当我关闭开关时,我不再收到推送通知。但是,如果我尝试重新打开它,我仍然没有收到它。也使用 Firebase。

这是我的应用委托代码。我会尝试分享相关代码,但如果您需要,请随时请求更多代码。

PS:我用于切换器的代码实际上来自我在 StackOverFlow 上找到的答案。

// 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 好的,我试试看!

标签: ios swift firebase push-notification


【解决方案1】:

根据unregisterForRemoteNotifications 的文档:

您应该只在极少数情况下调用此方法,例如当 该应用程序的新版本取消了对所有类型遥控器的支持 通知。用户可以暂时阻止应用接收 通过设置的通知部分进行远程通知 应用程序。通过此方法取消注册的应用始终可以重新注册。

正确的方式(其实在我做过的项目中看到的方式)是调用一个api,告诉后端不应该发送推送通知。

【讨论】:

  • 我想知道我是否应该只是从头开始操作然后将其删除。我只是认为如果用户在收到诸如 cmets、like 等通知时感到恼火,给用户提供选项是一种很好的用户体验
  • 确实是不错的用户体验。每个应用程序都有它。你只需要引入一个新的 api 设置一个标志后端来取消注册。后端实际上不会注销设备令牌,但它会检查标志并决定是否向 APNS 发送推送通知。
  • 知道了。明天我会努力的,谢谢,我完全理解。接受答案。
猜你喜欢
  • 2022-12-10
  • 1970-01-01
  • 2016-05-17
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-02
  • 2018-09-19
相关资源
最近更新 更多