有没有办法防止用户在从Firebase发送推送通知后收到推送通知



我想知道我是否可以通过Firebase向用户发送多个推送通知,然后在用户在设备上看到它们之前拦截它们,并允许我的应用程序有选择地允许通知。

这可能吗?

如果是这样,我需要使用哪种方法?(来自react-native-firebaseiOS(

您可以

尝试使用UNNotificationServiceExtension(可从iOS 10获得(。您需要向项目添加扩展(示例如何添加(。

在扩展中实现方法- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent *contentToDeliver))contentHandler;后。

它将在向用户显示通知之前被调用,您可以尝试执行一些操作(例如:将一些数据保存到本地(。

请注意,它仅适用于iOS 10 rich notifications(如何使用Firebase实现它(。

附言希望对您有所帮助!

编辑

在 Apple 文档中写道:

重写此方法并使用它来修改 未公开内容 随通知一起传递的对象。

更新:

您可以尝试从服务器发送静默推送通知,检查它并创建本地通知以在需要时向用户显示。

FireBase 通知可以在应用程序处于前台状态时处理。首先,您可以在控制器和 info.plist 中从"始终"更改使用通知。设置后,您可以在应用程序委托或视图控制器中控制通知。

new

您可以向用户发送静默通知,并将实际通知安排为本地通知

参考这个

(在火力基地的情况下( 只有在应用处于前台时,通知才可管理。如果应用在后台运行,则无法处理,因为用户将收到通知,并且在点击通知之前不会通知应用。

发送带有"content-available" : 1的静默远程通知,并决定是否要向用户显示它。

{
    "aps" = {
        "content-available" : 1,
        "sound" : ""
    };
    // add custom key value for message
}

如果要向用户显示它,请获取消息的自定义键值对,并触发本地通知以显示用户。它也将在后台工作。 UIBackgroundMode需要为远程通知启用。

您可以发送将在前台和后台接收的数据通知。在iOS中,它们由委托方法处理 application(_:didReceiveRemoteNotification:fetchCompletionHandler:) ,处理后,您可以决定是否为用户创建推送。

@update

用于在低于 10 的 iOS 上接收数据消息(非推送(

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
      handleNotification(data: userInfo)
      completionHandler(UIBackgroundFetchResult.newData)
}

在 iOS10 上

func applicationReceivedRemoteMessage(_ remoteMessage: FIRMessagingRemoteMessage) {
      handleNotification(data: remoteMessage.appData)
}

然后我只需检查自定义字段是否有我需要的数据,并使用通知中心创建本地通知

fileprivate func handleNotification(data: [AnyHashable : Any]) {
      guard let topic = data["topic"] as? String else { return }
      if data["receiver"] as? String == UserManager.shared.current(Profile.self)?.uuid && topic  == "coupons" {
        displayNotification(data: data)
      }
}
fileprivate func displayNotification(data: [AnyHashable : Any]) {
        if #available(iOS 10.0, *) {        
            let content = UNMutableNotificationContent()
            content.title = data["notification_title"] as! String
            content.body = data["notification_body"] as! String
            let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 1, repeats: false)
            let request = UNNotificationRequest.init(identifier: data["topic"] as! String, content: content, trigger: trigger)
            UNUserNotificationCenter.current().add(request)
        } else {
            if currentNotification != nil {
                UIApplication.shared.cancelLocalNotification(currentNotification!)
            }
            let notification = UILocalNotification()
            notification.fireDate = Date()
            notification.category = data["topic"] as? String
            notification.alertBody = data["notification_body"] as? String
            if #available(iOS 8.2, *) {
                notification.alertTitle = data["notification_title"] as? String
            }
            currentNotification = notification
            UIApplication.shared.scheduleLocalNotification(currentNotification!)
        }
}

请记住,这适用于数据通知而不是推送通知,但在Firebase中,您可以发送这两种类型。

相关内容

  • 没有找到相关文章

最新更新