收到推送通知且应用程序在前台时如何防止弹出警报

Posted

技术标签:

【中文标题】收到推送通知且应用程序在前台时如何防止弹出警报【英文标题】:How to prevent pop up alert when receiving push notification and the app is in the foreground 【发布时间】:2020-12-28 14:51:22 【问题描述】:

我正在使用 Swift 制作一个 ios 聊天应用程序。 当用户发送新消息时,所有其他用户都会收到推送通知。 当用户不使用该应用程序时,推送通知运行良好,但是当用户使用该应用程序并与其他用户聊天时,他会收到一个弹出警报,其中包含其他用户发送的每条消息。 我想阻止此弹出警报发生。

这是 AppDelegate.swift 中的代码

// MARK: - DELEGATES FOR PUSH NOTIFICATIONS
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) 
        let installation = PFInstallation.current()
        installation?.setDeviceTokenFrom(deviceToken)
        installation?.saveInBackground(block:  (succ, error) in
            if error == nil 
                print("DEVICE TOKEN REGISTERED!")
             else 
                print("\(error!.localizedDescription)")
        )

    
 
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) 
    print("application:didFailToRegisterForRemoteNotificationsWithError: %@", error)

    
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) 
    PFPush.handle(userInfo)
    if application.applicationState == .inactive 
        PFAnalytics.trackAppOpenedWithRemoteNotificationPayload(inBackground: userInfo, block: nil)
    

这是我在视图控制器中编写的代码

let pushStr = "\(PFUser.current()![USER_FULLNAME]!): \(m["body"]!)"
                                let data = [ "badge" : "Increment",
                                            "alert" : pushStr]
                                let request = [
                                            "someKey" : id,
                                            "data" : data
                                ] as [String : Any]
                                PFCloud.callFunction(inBackground: "push", withParameters: request as [String : Any], block:  (results, error) in
                                    if error == nil 
                                        print ("\(pushStr)\n")
                                     else 
                                        print ("\(error!.localizedDescription)")
                                )

【问题讨论】:

这不是我们在这里展示代码的方式。 我编辑了问题并将代码以正确的格式放置。谢谢! 【参考方案1】:

如果您使用的是UNUserNotificationCenter

添加此方法

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) 
    if itIsChatAlert  //check by push userInfo
        completionHandler([])
     else 
        completionHandler([.alert, .sound])
    

【讨论】:

我不使用这个功能。请问还有什么建议吗? 如果你想让它工作,你应该使用它,是时候为 U 实现 UNUserNotificationCenter 了

以上是关于收到推送通知且应用程序在前台时如何防止弹出警报的主要内容,如果未能解决你的问题,请参考以下文章

检测是不是在应用未启动且用户未通过它们打开应用时收到推送通知

警报和声音在博览会推送通知中不起作用

应用在前台运行时收到 iOS 推送通知

iOS:推送通知仅在应用程序在前台运行时才有效

应用程序处于前台时未收到 Firebase 推送通知

应用程序在前台时未收到推送通知