ios 当用户收到推送通知时,是否可以检测用户是否点击推送通知,或通过点击应用程序图标启动应用程序?

g6baxovj  于 2023-03-20  发布在  iOS
关注(0)|答案(2)|浏览(254)

是否可以检测用户是否点击了推送通知,或通过点击应用程序图标启动了应用程序?让我们考虑一种情况。应用程序处于非活动状态。用户收到了推送通知,但他打开了应用程序,不是通过通知,而是点击了应用程序图标。如何检测?

0yycz8jy

0yycz8jy1#

查看苹果关于UISceneDelgate/AppDelegate的文档
https://developer.apple.com/documentation/uikit/uiscenedelegatehttps://developer.apple.com/documentation/uikit/uiapplicationdelegate

应用程序ID变为活动应用程序将进入前景等方法。

在这些方法中添加一个断点,然后您可以根据需要继续执行操作。

thtygnil

thtygnil2#

要检测用户是否点击了推送通知,可以在“AppDelegate”类中实现“UNUserNotificationCenterDelegate”协议,并使用“userNotificationCenter(_:didReceive:withCompletionHandler:)”方法。
以下是您的“AppDelegate”类的外观:

import UserNotifications

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Set UNUserNotificationCenter Delegate
        UNUserNotificationCenter.current().delegate = self
        return true
    }
    
    // Handle notification when app is in foreground
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        // Display notification when app is in foreground
        completionHandler([.banner, .sound, .badge])
    }
    
    // Handle notification when app is in background or terminated
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
        // Check if user tapped on the notification
        if response.actionIdentifier == UNNotificationDefaultActionIdentifier {
            print("User tapped on the notification")
            // Handle the notification
        }
        completionHandler()
    }
}

仅当用户响应推送通知时才调用上述函数,如果未调用,则您可以考虑通过点击主屏幕上的应用程序图标启动应用程序。

相关问题