所以我的应用程序中有这个“静音聊天室”功能。 如果聊天室静音,来自该聊天室的通知数据包含“静音= 1” 如下,
AnyHashable("aps"): {
"content-available" = 1;
alert = "Android @qwer: Gggggggg";
badge = 8;
sound = default;},
AnyHashable("custom"): {
a = {
comment = 423;
event = 133;
mute = 1;
};
}
当我收到该通知时,我根据静音布尔值确定天气以显示警报/声音
当应用程序处于前台时收到通知
时,它工作正常它类似于:
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (_ options: UNNotificationPresentationOptions) -> Void) { let userInfo = notification.request.content.userInfo
guard let data = userInfo["custom"] as? [String: Any] else { return }
guard let additional = data["a"] as? [String: Any] else {
print ("no addi")
return }
let mute = additional["mute"] as? NSNumber
if mute == 1 {
completionHandler([ .badge])
} else if mute == 0 {
completionHandler([.alert, .badge, .sound])
}}
但是当app处于后台时,事情会变得棘手,
当应用在后台时收到通知时
这种方法
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
被调用,并立即显示通知警报。
所以,当App处于后台时,我怎么想静音聊天室(不显示警报和静音)...
非常感谢!!!
答案 0 :(得分:2)
实现这一目标的最佳方式。
如果您的chatroom
为mute
,那么您的server
已经知道,因为服务器正在发送带有push notification
标志的mute : 1
因此,后端必须检查,如果mute
值为true
,则不要添加alert
& sound
中的push payload
个关键字。即使应用程序在后台/前台这将工作。
示例有效负载:
{
"aps" : {
"content-available" : 1,
"badge" : 8
}
//Custom data here.
}
答案 1 :(得分:0)
您必须实现一个Web服务,该服务接受应用程序状态的布尔值。 当您的应用程序处于后台时,您可以使用布尔值true来调用此Web服务。 对于服务器端,当此布尔值为true时,则无需从后端发送通知。