首页 > 解决方案 > 后台和前台的 Firebase iOS 推送通知

问题描述

我想向 iOS 设备发送推送通知并实现以下行为:

如果应用程序在前台,则DidReceiveRemoteNotification在通知到达时立即触发并将通知添加到通知托盘。

如果应用程序在后台或应用程序已在后台完全关闭,则将通知添加到通知托盘。

目前,如果我使用Data有效负载,我可以获得触发通知,DidReceiveRemoteNotificationNotification前提是未设置有效负载。一旦我设置Notification了有效负载,通知就会进入托盘,并且DidReceiveRemoteNotification只有在用户点击通知并打开应用程序后才会触发。

如果没有Notification负载,当应用程序在后台完全关闭时,不会收到通知(在通知托盘或应用程序中)。

我考虑过发送两个通知,一个带有Notification有效负载以确保通知托盘显示通知,而不管应用程序处于什么状态(即使它已完全终止),另一个带有Data有效负载作为Background Notification更新应用程序中的数据时该应用程序处于前台或正在运行。发送 2 条通知只是为了达到一个相当直截了当的要求而感觉不对。

标签: iosfirebasexamarinpush-notification

解决方案


要在应用程序处于前台时拦截通知,您应该实现:

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) 

并在函数体调用completionHandler.alert使其正常显示

completionHandler(.alert)

这样你就不会呈现任何东西,并且可以访问notification.request.content.userInfo这个函数内部


推荐阅读