2016-02-10 8 views
10

मेरे पास myApp पर लक्षित एक आईओएस सार्वभौमिक लिंक है। जब मैं किसी अन्य ऐप में उस लिंक पर क्लिक करता हूं, myApp खुलता है और सही भुगतान सही तरीके से प्रदर्शित करता है, यह काम कर रहा है।wkwebview अभी भी सार्वभौमिक लिंक को संभालने नहीं है

लेकिन myApp में WKWebView का उपयोग कर एक अंतर्निहित ब्राउज़र शामिल है। जब मैं अपने अंतर्निर्मित ब्राउज़र के भीतर से एक ही सार्वभौमिक लिंक पर क्लिक करता हूं, तो आईओएस myApp पर लिंक नहीं भेजता है, यह जाता है और एक वेबपृष्ठ प्राप्त करता है।

Apple docs कहना

आप एक SFSafariViewController, WKWebView, या UIWebView वस्तु का दृष्टांत तो एक सार्वभौमिक लिंक को संभालने के लिए, IOS आपका ऐप्लिकेशन खोलने की सफारी में अपनी वेबसाइट खोलता बजाय। हालांकि, यदि उपयोगकर्ता एक एम्बेडेड SFSafariViewController, WKWebView, या UIWebView ऑब्जेक्ट के भीतर एक सार्वभौमिक लिंक टैप करता है, तो आईओएस आपके ऐप को खोलता है।

मैं इस similar question जहां सुझाव एक WKWebView प्रतिनिधि परिभाषित करने के लिए था ध्यान दें। मेरे पास WKWebView दोनों प्रतिनिधि हैं जो myApp में परिभाषित और उपयोग में हैं, और यह मदद नहीं कर रहा है। यह other question में बहुत सारे अपवॉट हैं लेकिन कोई जवाब नहीं।

मेरा WKWebView वास्तव में अन्य ऐप्स के सार्वभौमिक लिंक खोल सकता है। यदि मैं myAppWKWebView के भीतर से https://open.spotify.com/artist/3hv9jJF3adDNsBSIQDqcjp लिंक पर क्लिक करता हूं तो यह किसी इंटरमीडिएट वेबपृष्ठ को खोलने के बिना स्पॉटिफा ऐप खोलता है (भले ही myApp में लंबे समय तक प्रेस मेनू "स्पॉटिफ़ाई में खोलें" की पेशकश नहीं करता है)। लेकिन जब मैं myApp के भीतर से क्लिक करता हूं तो आईओएस myApp पर सार्वभौमिक लिंक नहीं देगा।

ज्यादा परीक्षण के बाद, मैं पता चलता है कि मैं विशिष्ट URL खोज और प्रदर्शन रद्द करके सार्वभौमिक लिंक के साथ जुड़े एक वेबपेज को दिखाने से रोका जा सकता है:

func webView(webView: WKWebView, decidePolicyForNavigationResponse navigationResponse: WKNavigationResponse, decisionHandler: (WKNavigationResponsePolicy) -> Void) { 
    if let urlString = navigationResponse.response.URL?.absoluteString { 
     if urlString.hasPrefix(myULPrefix) { // it's a universal link targetted at myApp 
      decisionHandler(.Cancel) 
      return 
     } 
    } 
    decisionHandler(.Allow) 
} 

मैं फैसले में यह करने के लिए है प्रतिक्रिया के लिए हैंडलर, कार्रवाई के लिए एक नहीं। जब मैं ऐसा करता हूं, तो सार्वभौमिक लिंक myApp पर डिलीवरी के लिए कतारबद्ध है। लेकिन यह वास्तव में आईओएस द्वारा वितरित नहीं किया जाता है जब तक कि मैं अपना ऐप छोड़ देता हूं (उदाहरण के लिए, होम बटन मारकर) और इसे फिर से लॉन्च करें। appDelegate समारोह ऊपर

func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {} 

संदर्भित एप्पल डॉक्स में इस संदेश को वितरित के रूप में निर्दिष्ट नहीं बुलाया जाता है। यह है जब मैं अधिक पारंपरिक डीप्लिंक करता हूं - myApp खोलने के लिए सफारी में एक सार्वभौमिक लिंक पर क्लिक करना।

क्या यह एक बग है? या एक सुविधा? या मैं हमेशा के रूप में, गलत पेड़ को भौंकने वाला हूँ?

धन्यवाद!

+0

लगता है जैसे यह एक बग हो सकता है? मैं इसे ऐप्पल के साथ https://bugreport.apple.com –

+0

के माध्यम से बढ़ाने की अनुशंसा करता हूं क्या आपको कोई समाधान मिला है? – AntiMoron

+0

मैं हाल ही में उस परियोजना पर काम नहीं कर रहा हूं, इसलिए मुझे नहीं पता कि कुछ भी बदल गया है या नहीं। हमने इसे होम बटन हिट करने और लिंक प्राप्त करने के लिए ऐप को पुन: दर्ज करने के साथ छोड़ा। यह हमारे उपयोगकर्ताओं के लिए अपेक्षाकृत दुर्लभ है इसलिए अधिक काम करना उपयोगी नहीं था। मैंने व्यक्तिगत रूप से इसे ऐप्पल को एक बग के रूप में सबमिट नहीं किया है। क्षमा करें, मैं अभी और अधिक नहीं कर सकता :-( – emrys57

उत्तर

0

यह व्यवहार होगा यदि आपका wkwebview wep पृष्ठ डोमेन नाम आपके सार्वभौमिक लिंक डोमेन नाम के समान है। शॉट में, अगर सफारी में वेब पेज खोला गया है, तो SFSafariVC, WKWebView या UIWebView में आपके ऐप के ऐप लिंक (सार्वभौमिक लिंक) डोमेन के समान डोमेन है, यह सार्वभौमिक लिंक tirgger नहीं करेगा,

+0

क्या आपके पास इसके लिए प्रलेखन है? – CoachNono

+0

मुझे नहीं लगता कि ऐप्पल ने इसे दस्तावेज किया है। यह व्यवहार मैंने सार्वभौमिक लिंक के व्यावहारिक उपयोग में देखा है। –

संबंधित मुद्दे