निम्न URL iOS 8.3 और निम्न पर खुलता है, लेकिन यह काम नहीं करता है और iOS 9
let instagramURL = NSURL(string: "instagram://app")
URL क्यों नहीं खुलेगा?
निम्न URL iOS 8.3 और निम्न पर खुलता है, लेकिन यह काम नहीं करता है और iOS 9
let instagramURL = NSURL(string: "instagram://app")
URL क्यों नहीं खुलेगा?
जवाबों:
iOS 9 ने URL स्कीम की हैंडलिंग में एक छोटा सा बदलाव किया है। आपको url को श्वेतसूची में डालना होगा कि आपका ऐप आपके LSApplicationQueriesSchemes
कुंजी का उपयोग करने के लिए कॉल करेगा Info.plist
।
कृपया यहाँ पोस्ट देखें: http://awkwardhare.com/post/121196006730/quick-take-on-ios-9-url-scheme-changes
मुख्य निष्कर्ष यह है कि:
यदि आप एक URL पर "canOpenURL" विधि कहते हैं, जो आपके श्वेतसूची में नहीं है, तो यह "NO" लौटाएगा, भले ही कोई ऐप इंस्टॉल हो जिसने इस योजना को संभालने के लिए पंजीकरण किया हो। "इस ऐप को स्कीम xxx के लिए क्वेरी करने की अनुमति नहीं है" syslog प्रविष्टि दिखाई देगी।
यदि आप "श्वेतसूची" में URL पर "OpenURL" विधि कहते हैं, तो यह चुपचाप विफल हो जाएगी। "इस ऐप को स्कीम xxx के लिए क्वेरी करने की अनुमति नहीं है" syslog प्रविष्टि दिखाई देगी।
लेखक यह भी अनुमान लगाता है कि यह ओएस के साथ एक बग है और एप्पल इसे बाद के रिलीज में ठीक कर देगा।
-openURL:
हमेशा -canOpenURL:
सीमित होते हुए भी काम करता है।
जैसा कि ऊपर कहा गया है, आप जानकारी प्लिस्ट में एक कुंजी जोड़ना चाहते हैं, यहां अधिकांश सामाजिक नेटवर्क के लिए सूची है
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fb</string>
<string>fbapi</string>
<string>fbauth2</string>
<string>fbshareextension</string>
<string>fb-messenger-api</string>
<string>twitter</string>
<string>viber</string>
<string>whatsapp</string>
<string>wechat</string>
<string>line</string>
<string>instagram</string>
<string> instagram-stories</string>
<string>kakaotalk</string>
<string>mqq</string>
<string>vk</string>
<string>comgooglemaps</string>
<string>googlephotos</string>
<string>ha</string>
<string>yammer</string>
</array>
* पहला 3 मैच फेसबुक (FBSDK 4.6): fbapi, fbauth2, fbshareextension। "हा" स्नैपचैट के लिए है
Ha://add/[username]
स्विफ्ट 3 में दोस्तों को स्नैपचैट जोड़ने के लिए
यह iOS 9 का एक नया सुरक्षा फीचर है । अधिक जानकारी के लिए WWDC 2015 सत्र 703 देखें।
एसडीके 9 के साथ निर्मित किसी भी ऐप LSApplicationQueriesSchemes
को अपनी प्लिस्ट फ़ाइल में एक प्रविष्टि प्रदान करने की आवश्यकता होती है , जो यह घोषणा करती है कि यह किन योजनाओं को क्वेरी करने का प्रयास करता है।
<key>LSApplicationQueriesSchemes</key>
<array>
<string>urlscheme</string>
<string>urlscheme2</string>
<string>urlscheme3</string>
<string>urlscheme4</string>
</array>
openURL:
। और यह आपको बताएगा कि उद्घाटन सफल रहा या नहीं।
दो ऐप्स टेस्टा और टेस्टबी को मान लेना। TestB स्थापित है, तो TestB क्वेरी करना चाहता है। "TestA" अपनी जानकारी में निम्नलिखित URL योजना को परिभाषित करता है। फाइल फ़ाइल:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>testA</string>
</array>
</dict>
</array>
दूसरा ऐप "टेस्टबी" यह पता लगाने की कोशिश करता है कि क्या "टेस्टा" कॉलिंग द्वारा स्थापित है:
[[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"TestA://"]];
लेकिन यह सामान्य तौर पर iOS9 में NO लौटेगा क्योंकि TestB की जानकारी में "TestA" को LSApplicationQueriesSchemes प्रविष्टि में जोड़ा जाना चाहिए। फाइल फ़ाइल। यह TestB की जानकारी में निम्नलिखित कोड जोड़कर किया जाता है। फाइल फ़ाइल:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>TestA</string>
</array>
एक कार्य कार्यान्वयन यहाँ पाया जा सकता है: https://github.com/gatzsche/LSApplicationQueriesSchemes-Working-Example
सेशन, 703 डब्ल्यूडब्ल्यूडीसी 2015:
जब आप iOS 9 के लिए अपना ऐप बनाते हैं तो आप URL योजनाओं का उपयोग करना जारी रख सकते हैं और आप URL योजनाओं को कॉल करना चाहते हैं, अब आपको उन्हें अपने ऐप्स Info.plist में घोषित करना होगा। एक नई कुंजी है,
LSApplicationQueriesSchemes
और यहां आपको उन योजनाओं की सूची को जोड़ना होगा जिन्हें आप करना चाहते हैं।
शेयर संवाद से फेसबुक साझा करना @Matthieu उत्तर के साथ भी विफल रहता है (जो बाकी सोशल यूआरएल के लिए 100% सही है)। मुझे फेसबुक एसडीके से उलट यूआरएल का एक सेट जोड़ना पड़ा।
<array>
<string>fbapi</string>
<string>fbauth2</string>
<string>fbshareextension</string>
<string>fb-messenger-api</string>
<string>twitter</string>
<string>whatsapp</string>
<string>wechat</string>
<string>line</string>
<string>instagram</string>
<string>kakaotalk</string>
<string>mqq</string>
<string>vk</string>
<string>comgooglemaps</string>
<string>fbapi20130214</string>
<string>fbapi20130410</string>
<string>fbapi20130702</string>
<string>fbapi20131010</string>
<string>fbapi20131219</string>
<string>fbapi20140410</string>
<string>fbapi20140116</string>
<string>fbapi20150313</string>
<string>fbapi20150629</string>
</array>
स्विफ्ट 4.2 और एक्सकोड 10.1 में
Info.plist में CFBundleURLSchemes और LSApplicationQueriesSchemes जोड़ने की आवश्यकता है।
-> अपनी परियोजना में info.plist का चयन करें,
-> राइट क्लिक करें,
-> सोर्स कोड के रूप में ओपन का चयन करें
नीचे स्क्रीन शॉट देखें
-> xml फ़ाइल खोली जाएगी
-> कॉपी - कोड के नीचे पेस्ट करें और अपनी आईडी के साथ बदलें
CFBundleURLSchemes और LSApplicationQueriesSchemes के लिए gmail, fb, twitter और में जुड़ा हुआ है।
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>li5****5</string>
<string>com.googleusercontent.apps.8***************5f</string>
<string>fb8***********3</string>
<string>twitterkit-s***************w</string>
</array>
</dict>
</array>
<key>FacebookAppID</key>
<string>8*********3</string>
<key>FacebookDisplayName</key>
<string>K************ app</string>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fb-messenger-share-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
<string>twitter</string>
<string>twitterauth</string>
<string>linkedin</string>
<string>linkedin-sdk2</string>
<string>linkedin-sdk</string>
</array>
स्क्रीन के नीचे देखें आपकी अंतिम जानकारी .plist फ़ाइल है
वैसे आप को फोन करके एक एप्लिकेशन खोल सकते हैं openURL:
या openURL:options:completionHandler:
(आईओएस 10 के बाद) सीधे सशर्त जांच किए बिना canOpenURL:
। कृपया Apple के लिए चर्चा अनुभाग में पढ़ सकते हैं canOpenURL: विधि जो कहती है:
OpenURL: विधि
LSApplicationQueriesSchemes
आवश्यकता से विवश नहीं है ।
ऐसा नहीं लगता कि किसी ने पता लगाया हो कि एम्बेडेड पैरामीटर वाले URL को कैसे निर्दिष्ट किया जाए। कोई भी URL जिसमें पैरामीटर हैं, वह LSApplicationsQueriesSchemes में विशिष्ट URL निर्दिष्ट करना संभव नहीं होगा। उदाहरण के लिए, मान लें कि मेरे पास एक ईमेल ऐप है जो प्रेषकों के ईमेल पते को पास करता है:
myemail://mailto?bob@gmail.com
IOS9 में काम करने का एकमात्र तरीका यह लगता है कि किसी भी पैरामीटर को हटा दिया जाए।
myemail
। पैरामीटर यहां कोई भूमिका नहीं निभाते हैं।
स्विफ्ट 3.1, स्विफ्ट 3.2, स्विफ्ट 4
if let urlFromStr = URL(string: "instagram://app") {
if UIApplication.shared.canOpenURL(urlFromStr) {
if #available(iOS 10.0, *) {
UIApplication.shared.open(urlFromStr, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(urlFromStr)
}
}
}
Info.plist में इन्हें जोड़ें:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>instagram</string>
</array>
जब मैंने आज अपने स्वयं के ऐप से फेसबुक को कॉल करने की कोशिश की, तो मैंने पाया कि कोई LSApplicationQueriesSchemes
कुंजी नहीं है जिसे मैं Info.plist
(Xcode संस्करण 8.2.1 (8C1002)) में जोड़ सकता हूं । मैंने उदात्त पाठ के Info.plist
साथ खोला और मैन्युअल रूप से इसे फ़ाइल में जोड़ा, फिर यह काम किया। बस आपको यह बताने के लिए कि यदि आपको कुंजी नहीं मिल रही है, तो बस इसे स्वयं जोड़ें।
+canOpenURL:
लौटाता है?