当应用程序处于活动状态时,iOS 处理推送通知点击

Posted

技术标签:

【中文标题】当应用程序处于活动状态时,iOS 处理推送通知点击【英文标题】:iOS handling Push notification tap when app is active 【发布时间】:2019-07-25 07:11:52 【问题描述】:

当应用程序处于活动状态时,如何处理推送通知点击? didReceiveRemoteNotification userInfo: [AnyHashable : Any]ios 设备接收到推送通知时调用,并且在用户点击通知时调用相同的函数。我如何在这个函数中区分这个函数是如何被调用的?我正在使用OneSignal 的推送通知,以防有必要了解问题。

【问题讨论】:

当您的应用将ResignActive时保存标志,在didReceiveRemoteNotification中检查它 【参考方案1】:

OneSingal 有闭包,可以通知您有关通知和用户操作的信息。我就是这样用的

func initOneSignalNotifications(withLaunchOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) 
        let onesignalInitSettings = [kOSSettingsKeyAutoPrompt: false]

        OneSignal.initWithLaunchOptions(launchOptions, appId: Constants.oneSignalKey, handleNotificationReceived:  (receivedNotification) in

            //Notification is received

        , handleNotificationAction:  (notificationResult) in
            //Notification was tapped
        , settings: onesignalInitSettings)

        OneSignal.inFocusDisplayType = OSNotificationDisplayType.notification;
        OneSignal.promptForPushNotifications(userResponse:  accepted in
            FileHandler.log(message: "Notification permission granted: \(accepted)", tag: .application, logLevel: .info)
        )
    

这里的inFocusDisplayType 表示当您的应用打开时,OneSignal 仍会显示通知。

【讨论】:

【参考方案2】:

如果你的目标是iOS 10以上,你可以处理点击。

func userNotificationCenter ( _ center : UNUserNotificationCenter, didReceive
response : UNNotificationResponse, withCompletionHandler completionHandler :
@escaping () -> Void ) 
        // perform notification received/click action as per third party SDK as per their document
    

否则,您需要使用didReceiveRemoteNotification userInfo: [AnyHashable : Any] 中的标志来管理它。

【讨论】:

以上是关于当应用程序处于活动状态时,iOS 处理推送通知点击的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序处于非活动状态并运行代码时,Swift iOS 应用程序会收到推送通知

当应用程序处于活动状态时,phonegap 通用推送 ios 警报

应用程序处于非活动状态时无法接收静默通知 iOS

如何在应用程序处于非活动状态时获取推送通知ios swift3

在后台接收推送通知 iOS

iOS 推送通知和 GCM