iOS 9 URL URL के साथ इंस्टाग्राम ऐप नहीं खोल रहा है


138

निम्न URL iOS 8.3 और निम्न पर खुलता है, लेकिन यह काम नहीं करता है और iOS 9

let instagramURL = NSURL(string: "instagram://app")

URL क्यों नहीं खुलेगा?


क्या +canOpenURL:लौटाता है?
thelaws

आप क्या त्रुटि प्राप्त कर रहे हैं? यह xcode के बारे में सवाल नहीं है ।
जाल

यह विफल रहता है "अगर UIApplication.saredApplication ()। CanOpenURL (instagramURL!)" चेकिंग
Sk.Azad

कृपया यहां लेख देखें: awkwardhare.com/post/121196006730/… iOS 9 में आपको यह बताना होगा कि आपके ऐप के लिए कौन-सी url योजनाएं हैं (मैंने खुद ऐसा नहीं किया है)
thelaws

3
इसे अपनी जानकारी में जोड़ें। फाइल फ़ाइल <key> LSApplicationQueriesSchemes </ key> <array> <string> URLScma1 </ string> <string> URLScma2 </ string> <string> URLScma3 </ string> </ array>
कमलेश्वर

जवाबों:


210

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 प्रविष्टि दिखाई देगी।

लेखक यह भी अनुमान लगाता है कि यह ओएस के साथ एक बग है और एप्पल इसे बाद के रिलीज में ठीक कर देगा।


23
स्पष्टीकरण के एक बिंदु के रूप में, LSApplicationQueriesSchemes सरणी में श्वेत सूची में आने वाले किसी विशिष्ट एप्लिकेशन के स्ट्रिंग में ": //" शामिल न करें, अर्थात "comgooglemaps: //"। यदि आप ": //" canOpenUrl को शामिल करते हैं: कोई नहीं लौटाएगा और "यह एप्लिकेशन स्कीम xxx के लिए क्वेरी करने की अनुमति नहीं है" प्रदान करता है syslog / त्रुटि। हालाँकि, जब आप canOpenUrl का वास्तविक कॉल करते हैं: तो आपको अभी भी कॉलोन अर्थात् canOpenUrl: @ "comgooglemaps:" शामिल करना होगा।
EmphaticArmPump

5
वास्तव में, Apple ने हाल ही में एक अद्यतन में इसे ठीक किया। -openURL:हमेशा -canOpenURL:सीमित होते हुए भी काम करता है।
टिम जॉन्सन

इसका क्या मतलब है? अगर मैं सिर्फ सब कुछ सूची में रख सकता हूं और फिर भी इसके लिए क्वेरी करता है तो सुरक्षा कहां है?
मैकीज स्विक

@MaciejSwic एक कारण यह है कि आप Apple को पुनः सबमिट किए बिना सूची में परिवर्तन नहीं कर सकते।
Thelaws

ध्यान दें कि यह सब केवल iOS एसडीके 9 के खिलाफ संकलित ऐप्स से संबंधित है। "यदि आप iOS SDK 9.0 के साथ पुन: कनेक्ट नहीं कर रहे हैं, तो आपका ऐप 50 अलग-अलग योजनाओं (canOpenURL के बाद कॉल नं। पर सीमित) तक सीमित है", जैसा कि Developers.facebook.com/docs/ios/ios9
mkll

158

जैसा कि ऊपर कहा गया है, आप जानकारी प्लिस्ट में एक कुंजी जोड़ना चाहते हैं, यहां अधिकांश सामाजिक नेटवर्क के लिए सूची है

<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। "हा" स्नैपचैट के लिए है


Thx, मुझे लगता है कि v को सूची में "fb" जोड़ने की आवश्यकता है
शिव कृष्ण

1
@sivakrishna fb का उल्लेख यहां नहीं किया गया है। Developers.facebook.com/docs/ios/ios9
Matthieu Rouif

लेकिन अगर मैं किसी भी फेस बुक पेज को " facebook.com/.A "" पर पुनर्निर्देशित करना चाहता हूं, तो केवल fb को जोड़ने के बाद ही उसका wrkng
siva krishna

तकरीबन सही। ऑक्टोब्र 2015 में मुझे फेसबुक शेयर संवादों के अजीब यूआरएल के साथ कुछ विफलताएं मिलीं। मैंने उन्हें एक उत्तर के रूप में जोड़ा, इसे बेझिझक अपने साथ जोड़ें जो वास्तव में सही है।
पुनर्निर्माण

1
और Ha://add/[username]स्विफ्ट 3 में दोस्तों को स्नैपचैट जोड़ने के लिए
EssamSoft

87

यह iOS 9 का एक नया सुरक्षा फीचर है । अधिक जानकारी के लिए WWDC 2015 सत्र 703 देखें।

एसडीके 9 के साथ निर्मित किसी भी ऐप LSApplicationQueriesSchemesको अपनी प्लिस्ट फ़ाइल में एक प्रविष्टि प्रदान करने की आवश्यकता होती है , जो यह घोषणा करती है कि यह किन योजनाओं को क्वेरी करने का प्रयास करता है।

<key>LSApplicationQueriesSchemes</key>
<array>
 <string>urlscheme</string>
 <string>urlscheme2</string>
 <string>urlscheme3</string>
 <string>urlscheme4</string>
</array> 

चीजों को स्पष्ट करने के लिए। क्या यह ऐसे ऐप्स को नियमित करेगा जो उपयोगकर्ता को अपनी स्वयं की URL योजना में प्रवेश करने देता है + उस पर अमल करता है?
जॉनी

@ जॉनी नहीं, क्योंकि आप अभी भी किसी भी यूआरएल का उपयोग करके खोलने की कोशिश कर सकते हैं openURL:। और यह आपको बताएगा कि उद्घाटन सफल रहा या नहीं।
सिंह नटण

हाँ, लेकिन canOpenURL का उपयोग नहीं किया जा सकता है इसलिए हम उपयोगकर्ता को यह नहीं बता सकते हैं कि यह काम करेगा या नहीं, उसे बस अपने लिए प्रयास करना होगा।
जॉनी

मैं Google मानचित्र खोलना चाहता हूं कि मुझे urlscheme में क्या डालना है?
कोडिंग

25

दो ऐप्स टेस्टा और टेस्टबी को मान लेना। 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


रुको, LSApplicationQueriesSchemes के स्ट्रिंग मान को "TestA" के रूप में नहीं होना चाहिए। Testist ऐप का नमूना?
निक याकिमोव

22

सेशन, 703 डब्ल्यूडब्ल्यूडीसी 2015:

जब आप iOS 9 के लिए अपना ऐप बनाते हैं तो आप URL योजनाओं का उपयोग करना जारी रख सकते हैं और आप URL योजनाओं को कॉल करना चाहते हैं, अब आपको उन्हें अपने ऐप्स Info.plist में घोषित करना होगा। एक नई कुंजी है, LSApplicationQueriesSchemesऔर यहां आपको उन योजनाओं की सूची को जोड़ना होगा जिन्हें आप करना चाहते हैं।

उदाहरण के लिए, एफबी का आवेश


1
हाँ, यह बात नहीं है। यह अभी भी comgooglemaps काम नहीं करेगा, यहां तक कि Info.plist साथ
राडू

क्या आपने इसके लिए कोई फिक्स ढूंढा?
सलमान हसरत खान

1
एक तस्वीर हज़ार शब्दों पर भारी है। स्क्रीनशॉट के लिए धन्यवाद। यह सब मुझे चाहिए था।
sean808080

3

शेयर संवाद से फेसबुक साझा करना @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>

क्या आप जानते हैं कि किसी दस्तावेज़ को देखने के लिए मैं किस ऐप का उपयोग कर सकता हूं और क्या आप मुझे इसके लिए कोड प्रदान कर सकते हैं?
निशात जहाँ

2

स्विफ्ट 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 फ़ाइल है

यहां छवि विवरण दर्ज करें


1

यह ध्यान रखना महत्वपूर्ण है कि 9.0.x पर जेलब्रोकेन फोन के साथ एक बग था जिसने यूआरएल योजनाओं को तोड़ दिया। यदि आप जेलब्रेक डिवाइस चला रहे हैं तो सुनिश्चित करें कि आप Cydia में Patcyh को अपडेट करें


1

वैसे आप को फोन करके एक एप्लिकेशन खोल सकते हैं openURL:या openURL:options:completionHandler:(आईओएस 10 के बाद) सीधे सशर्त जांच किए बिना canOpenURL:। कृपया Apple के लिए चर्चा अनुभाग में पढ़ सकते हैं canOpenURL: विधि जो कहती है:

OpenURL: विधि LSApplicationQueriesSchemesआवश्यकता से विवश नहीं है ।


0

ऐसा नहीं लगता कि किसी ने पता लगाया हो कि एम्बेडेड पैरामीटर वाले URL को कैसे निर्दिष्ट किया जाए। कोई भी URL जिसमें पैरामीटर हैं, वह LSApplicationsQueriesSchemes में विशिष्ट URL निर्दिष्ट करना संभव नहीं होगा। उदाहरण के लिए, मान लें कि मेरे पास एक ईमेल ऐप है जो प्रेषकों के ईमेल पते को पास करता है:

myemail://mailto?bob@gmail.com

IOS9 में काम करने का एकमात्र तरीका यह लगता है कि किसी भी पैरामीटर को हटा दिया जाए।


4
है ना? आपको प्लिस्ट में क्या जोड़ना चाहिए myemail। पैरामीटर यहां कोई भूमिका नहीं निभाते हैं।
सिंह राशि

0

Apple ने iOS 9 पर canOpenURL पद्धति को बदल दिया। जो ऐप्स iOS 9 और iOS 10 पर URL योजनाओं के लिए जाँच कर रहे हैं, उन्हें इन योजनाओं को घोषित करना होगा क्योंकि यह Apple को प्रस्तुत किया गया है।



0

स्विफ्ट 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>

-1

जब मैंने आज अपने स्वयं के ऐप से फेसबुक को कॉल करने की कोशिश की, तो मैंने पाया कि कोई LSApplicationQueriesSchemesकुंजी नहीं है जिसे मैं Info.plist(Xcode संस्करण 8.2.1 (8C1002)) में जोड़ सकता हूं । मैंने उदात्त पाठ के Info.plistसाथ खोला और मैन्युअल रूप से इसे फ़ाइल में जोड़ा, फिर यह काम किया। बस आपको यह बताने के लिए कि यदि आपको कुंजी नहीं मिल रही है, तो बस इसे स्वयं जोड़ें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.