पृष्ठभूमि

मेरे पास एक ऐप है जो एकाधिक विंडोज़ (आईपैडओएस 13+) का समर्थन करता है और मैं किसी अधिसूचना पर टैप करने वाले उपयोगकर्ता को प्रतिक्रिया देने का उचित तरीका जानना चाहता हूं। मैं उपयोगकर्ता द्वारा टैप की गई अधिसूचना के आधार पर यूआई स्थापित करना चाहता हूं।

मैं इस तरह UNUserNotificationCenter के साझा उदाहरण पर UNUserNotificationCenterDelegate प्रॉपर्टी सेट कर रहा हूं:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    UNUserNotificationCenter.current().delegate = self
    return true
}

मैं UNUserNotificationCenterDelegate के अनुरूप हूं और निम्न विधि लागू करता हूं। जब कोई उपयोगकर्ता किसी सूचना के साथ इंटरैक्ट करता है तो यह विधि हमेशा ट्रिगर होती है:

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
    // This gets called whenever a notification is tapped, dismissed or a custom action is performed by the user from the system Notification Center UI.
    // Should my UI setup code live here?
    completionHandler()
}

एकाधिक विंडोज़ वाली सामग्री को लक्षित करना शीर्षक वाले सत्र में, Apple बताता है कि जब आपका ऐप एकाधिक विंडो का समर्थन करता है, सिस्टम निम्न गुण का उपयोग यह निर्धारित करने में सहायता के लिए करेगा कि उपयोगकर्ता द्वारा अधिसूचना पर टैप करने पर कौन सी विंडो प्रस्तुत की जाएगी:

// An identifier for the content of the notification used by the system to customize the scene to be activated when tapping on a notification.
response.notification.request.content.targetContentIdentifier

अंततः UIKit कोई अनुबंध नहीं करता है कि उपयोगकर्ता द्वारा अधिसूचना पर टैप करने के जवाब में कौन सा दृश्य (विंडो) खोला जाएगा, लेकिन यह उस दृश्य (विंडो) को खोलने के लिए अपनी पूरी कोशिश करेगा जिसे मैं सबसे अच्छा मेल खाता हूं targetContentIdentifier के लिए अधिसूचना।

यदि मेरा ऐप समाप्त होने के दौरान उपयोगकर्ता एक अधिसूचना पर टैप करता है, तो जब मेरे SceneDelegate पर निम्नलिखित फ़ंक्शन को कॉल किया जाता है, तो मैं SceneDelegate के अंदर अधिसूचना टैप के बारे में जानकारी तक पहुंच पाऊंगा:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    connectionOptions.notificationResponse
    // Should my UI setup code live here? 
    // I don't think so because `connectionOptions.notificationResponse` is sometimes nil and this method is only called once when the scene is being connected to a `UISceneSession`

}

यदि मेरा ऐप समाप्त नहीं होता है तो यह फ़ंक्शन नहीं कहा जाता है।

प्रश्न

  • मुझे यह कैसे निर्धारित करना चाहिए कि UIKit द्वारा कौन सा दृश्य खोला जा रहा है ताकि मैं अपना UI उचित विंडो में सेटअप कर सकूं?
0
Travis C. 7 जिंदा 2021, 02:00

1 उत्तर

सबसे बढ़िया उत्तर

ऐसा प्रतीत होता है कि UNNotificationResponse में targetScene नामक एक संपत्ति है और अद्यतन करने के लिए दृश्य इस संपत्ति के आधार पर निर्धारित किया जाना चाहिए: https://developer.apple.com/documentation/usernotifications/unnotificationresponse/3255096- लक्ष्य दृश्य

0
Travis C. 7 जिंदा 2021, 02:08