आवेदन (… जारी रखें userActivity…) विधि जिसे आईओएस 13 में नहीं कहा जाता है


11

हाय मैं UniversalLink का उपयोग करके ios ऐप बना रहा हूं।

यूनिवर्सल लिंक ठीक काम करता है, लेकिन कॉलबैक विधि को नहीं कहा जाता है।

मेरा AppDelegate.swift नीचे है।

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }


    func application(_ application: UIApplication,
                     willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        return true
    }

    // this method not called!!
    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
        print("called")
        return true
    }
}

इस विधि को iOS 12 सिम्युलेटर में कहा जाता है।

तो, समस्या केवल iOS 13 में हुई है।

केवल iOS13 में यह त्रुटि कंसोल में मुद्रित होती है।

पृष्ठभूमि समाप्त नहीं कर सकते: पहचानकर्ता 1 (0x1) के साथ कोई पृष्ठभूमि कार्य मौजूद नहीं है, या यह पहले ही समाप्त हो सकता है। UIApplicationEndBackgroundTaskError () में डीबग करने के लिए ब्रेक।

तो, यह समस्या का कारण हो सकता है।

मैं वास्तव में किसी की मदद की सराहना करेंगे


3
मुझे भी यही समस्या है
Emre ernder

2
इस मुद्दे के बारे में कोई अपडेट?
jfredsilva

1
किसी को भी इस मुद्दे का हल मिला?
जनवरी

@ Emre answernder मुझे एक समाधान मिला (उत्तर की जाँच करें)। उम्मीद है कि यह आपका वही मुद्दा था
Jan

@jfredsilva मुझे एक समाधान मिला (उत्तर की जाँच करें)। उम्मीद है कि यह आपका वही मुद्दा था
Jan

जवाबों:


10

मेरे मामले में, मैंने Xcode 11 पर एक नया प्रोजेक्ट शुरू किया जो SceneDelegateकि साथ ही उपयोग करता हैAppDelegate

यूनिवर्सललिंक (और शायद कई अन्य एपीआई) की तरह लग रहा है इस पर कॉलबैक का उपयोग करें SceneDelegate:

func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { }

इसके बजाय इस पर कॉलबैक AppDelegate:

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { }

एक बार जब मैंने SceneDelegateसबकुछ लागू कर दिया तो फिर से उम्मीद के मुताबिक काम करना शुरू कर दिया। मैंने इसकी कोशिश नहीं की है, लेकिन मैं मान रहा हूं कि यदि आप iOS 12 और उससे नीचे का लक्ष्य बना रहे हैं, तो आपको दोनों तरीकों को लागू करने की आवश्यकता हो सकती है।

उम्मीद है की यह मदद करेगा


यह भी नहीं है। Apple ने iOS 13 में उस मुद्दे की पुष्टि की। बेशक, वे इसे ठीक करने नहीं जा रहे हैं।
दिमित्री

जुड़ा हुआ प्रश्न: stackoverflow.com/questions/58243884/…
दिमित्री

2
बहुत बढ़िया, मैंने फंक सीन (_ दृश्य: UIScene, userActivity जारी रखें: NSUserActivity) {} SceneDelegate में {} है और यह अब पूरी तरह से ठीक काम कर रहा है @ जान, क्या कोई तरीका है जिससे हम AppDelegate और SceneDelegate के ऊपर कोड डुप्लीकेशन की स्थिति से बच सकते हैं? धन्यवाद
जिगर

@ जिगर मुझे नहीं लगता कि आपको अब AppDelegate में कोड की भी आवश्यकता है
Jan

@ जान मैंने सीनडेलेगेट को हटा दिया, यह उसके बाद ठीक काम कर रहा है।
जिगर

3

मेरे पास SceneDelegateऔर सार्वभौमिक लिंक के साथ एक समान मुद्दा था, जहां मैं NSUserActivity के लिए नहीं मिल सकता था जब ऐप बस लॉन्च किया गया था (इस मामले में पृष्ठभूमि एनएफसी ios 13 में पढ़ रहा है)।

जैसा कि @Jan द्वारा उत्तर में बताया गया है, जारी रखें उपयोगकर्ता अब सक्रियता में है SceneDelegate

अगर ऐप चल रहा है या बैकग्राउंड में है। बंद, एक सार्वभौमिक लिंक scene(_:continue:)प्रतिनिधि को आग देगा ।

यदि एप्लिकेशन पृष्ठभूमि में नहीं है, तो एक सार्वभौमिक लिंक scene(_:continue:)प्रतिनिधि से फायर नहीं करेगा । इसके बजाय, NSUserActivityसे उपलब्ध होगा scene(_:willConnectTo:options:)। जैसे।

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    if let userActivity = connectionOptions.userActivities.first {
        debugPrint("got user activity")
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.