我正在使用Firebase推送通知,我的应用已订阅一个主题,一切都很好。但是我想知道是否可以通过通知显示通知。这是我的场景:
local_user_id = 10
var payload = {
notification: {
title: "hi",
body: "this is a notification",
sound: "default"
},
data: {
user_id: "1",
message: "you should pay $3020.25"
}
};
1)控制用户is_login是否为true(真/假) 2)获取通知的消息数据并检查:
if (payload.data.user_id = local_user_id && is_login){
show_notification()
}
3)显示通知
实际上我只有通知,没有更多,我是Firebase的新手,这是我的代码:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) {
(granted, error) in
}
application.registerForRemoteNotifications()
FirebaseApp.configure()
return true
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
let dict = userInfo["aps"] as! NSDictionary
let message = dict["alert"]
print("response")
print(message)
}
我不知道该怎么做,可以吗? 预先感谢
答案 0 :(得分:3)
您无法控制在应用程序中显示隐藏通知。您可以在后端设置一些逻辑,无论是否应显示此通知。不过,我有以下可能的解决方法。
,但仅限于运行和后台模式。如果在应用离线时将 content-available 设置为0,您将无法接收或处理它。
答案 1 :(得分:0)
如果您尝试在应用程序在前台运行时仅向用户显示通知,则需要使AppDelegate符合UNUserNotificationCenterDelegate
。这是因为当应用程序运行时,通知将呈现给UNUserNotificationCenter
共享对象。
extension AppDelegate: UNUserNotificationCenterDelegate {
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void {
let content = notification.request.content
if content.data["user_id"] == local_user_id && is_login {
completionHandler(.alert)
} else {
completionHandler([])
}
}
}
您可能要确保在此块中的某个时刻执行了completeHandler,因为这是处理通知的处理程序。如果您想要静音通知,则可以使用completionHandler([])
来使警报静音。可以使用here来完成completeHandler的其他选项。