URL SCHEME으로 Instagram 앱을 열지 않는 iOS 9


138

다음 URL은 iOS 8.3 이하에서 열리지 만 작동하지 않으며 iOS 9

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

왜 URL이 열리지 않습니까?


무엇을 +canOpenURL:반환합니까?
thelaws 2016 년

어떤 오류가 발생합니까? 이것은 xcode에 대한 질문이 아닙니다 .
JAL

"if UIApplication.sharedApplication (). canOpenURL (instagramURL!)"검사
실패

다음 기사를 참조하십시오 : awkwardhare.com/post/121196006730/… iOS 9에서는 앱이 찾고있는 URL 체계를 지정해야합니다 (내가 직접하지 않았습니다)
Thelaws

3
info.plist 파일 <key> LSApplicationQueriesSchemes </ key> <array> <string> URLScma1 </ string> <string> URLScma2 </ string> <string> URLScma3 </ string> </ array>에 추가
Kamleshwar

답변:


210

iOS 9은 URL 스킴 처리를 약간 변경했습니다. 앱에서 LSApplicationQueriesSchemes키 를 사용하여 호출 할 URL을 허용 목록에 추가해야 합니다 Info.plist.

여기에 게시물을 참조하십시오 : http://awkwardhare.com/post/121196006730/quick-take-on-ios-9-url-scheme-changes

주요 결론은 다음과 같습니다.

허용 목록에없는 URL에서 "canOpenURL"메서드를 호출하면이 체계를 처리하도록 등록 된 앱이 설치되어 있어도 "NO"가 반환됩니다. "이 응용 프로그램은 체계 xxx를 쿼리 할 수 ​​없습니다"syslog 항목이 나타납니다.

허용 목록에없는 URL에서 "openURL"메서드를 호출하면 자동으로 실패합니다. "이 응용 프로그램은 체계 xxx를 쿼리 할 수 ​​없습니다"syslog 항목이 나타납니다.

저자는 또한 이것이 OS의 버그이며 애플은 다음 릴리스에서이 문제를 해결할 것이라고 추측합니다.


23
명확히하기 위해 LSApplicationQueriesSchemes 배열에 허용 된 특정 앱 문자열에 ": //"를 포함하지 마십시오 (예 : "comgooglemaps : //"). ": //"를 포함하면 canOpenUrl : NO를 반환하고 "이 응용 프로그램은 체계 xxx를 쿼리 할 수 ​​없습니다"syslog / error를 제공합니다. 그러나 실제로 canOpenUrl을 호출 할 때 콜론 (예 : canOpenUrl : @ "comgooglemaps :")을 포함해야합니다.
EmphaticArmPump

5
실제로 Apple은 최근 업데이트에서이 문제를 해결했습니다. 제한된 -openURL:경우에도 항상 작동합니다 -canOpenURL:.
팀 존슨

요점이 뭐야? plist에 모든 것을 나열하고 여전히 쿼리 할 수 ​​있다면 보안은 어디에 있습니까?
Maciej Swic

@MaciejSwic 한 가지 이유는 Apple에 다시 제출하지 않고 목록을 변경할 수 없기 때문입니다.
thelaws

이 모든 것은 iOS SDK 9로 컴파일 된 앱과 관련이 있습니다. 에 지정된대로, "당신은 아이폰 OS SDK 9.0로 컴파일하지 않는 경우, 앱이 50 개 별개의 제도로 제한됩니다 (canOpenURL 호출 나중에 NO를 반환)" developers.facebook.com/docs/ios/ios9
mkll

158

위에서 말했듯이 정보 plist에 키를 추가하려고합니다. 여기에 대부분의 소셜 네트워크 목록이 있습니다.

<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 개 일치 Facebook (FBSDK 4.6) : fbapi, fbauth2, fbshareextension. "Ha"는 스냅 챗입니다


들으, 나는 V 필요가 목록에 "FB"를 추가 할 생각
시바 크리슈나

1
@sivakrishna fb는 여기에 언급되어 있지 않습니다 developers.facebook.com/docs/ios/ios9
Matthieu

하지만 " facebook.com
....

거의 좋아 Octobr 2015에서 Facebook 공유 대화 상자에서 이상한 URL로 실패했습니다. 나는 그것들을 답변으로 추가했으며, 실제로 당신에게 추가 할 수 있습니다.
elbuild

1
Ha://add/[username]신속한 3 Snapchat에서 친구를 추가 할
EssamSoft

87

이것은 iOS 9의 새로운 보안 기능입니다 . 자세한 정보는 WWDC 2015 세션 703 을보십시오.

SDK 9로 빌드 된 모든 앱 LSApplicationQueriesSchemes은 plist 파일에 항목 을 제공 하여 쿼리하려는 구성표를 선언해야합니다.

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

명확하게하기 위해. 이로 인해 사용자가 자신의 URL 체계를 입력하고 실행할 수있는 앱을 배제합니까?
Jonny

@Jonny 아니요 openURL:.를 사용하여 URL을 열려고 시도 할 수 있기 때문 입니다. 그리고 개통이 성공했는지 여부를 알려줍니다.
레오 나탄

예, 그러나 canOpenURL을 사용할 수 없으므로 사용자에게 작동하는지 여부를 알 수 없으므로 사용자가 직접 시도해야합니다.
Jonny

urlscheme에 무엇을 넣어야합니까?
coding22

25

두 개의 앱 TestA 및 TestB를 가정합니다. TestB는 TestA가 설치되어 있는지 조회하려고합니다. "TestA"는 info.plist 파일에 다음 URL 체계를 정의합니다.

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>testA</string>
        </array>
    </dict>
</array>

두 번째 앱 "TestB"는 다음을 호출하여 "TestA"가 설치되어 있는지 확인합니다.

[[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"TestA://"]];

그러나 "TestA"를 TestB info.plist 파일의 LSApplicationQueriesSchemes 항목에 추가해야하므로 iOS9에서 NO를 반환합니다. 다음 코드를 TestB의 info.plist 파일에 추가하면됩니다.

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>TestA</string>
</array>

실제 구현은 https://github.com/gatzsche/LSApplicationQueriesSchemes-Working-Example 에서 찾을 수 있습니다.


잠깐, TestB 앱의 into.plist에서 LSApplicationQueriesSchemes 키의 문자열 값이 "testA"가 아니어야합니까?
Nik Yekimov

22

세션 703 WWDC 2015에서 :

iOS 9 용 앱을 빌드 할 때 URL 스킴을 계속 사용할 수 있으며 URL 스킴을 호출하려면 앱 Info.plist에서이를 선언해야합니다. 새로운 키가 LSApplicationQueriesSchemes있으며 여기에 canOpenURL을 사용하려는 스키마 목록을 추가해야합니다.

예를 들어 FB의 경우


1
그래, 그렇지 않아 info.plist를 사용해도 여전히 comgooglemaps가 작동하지 않습니다
Radu

이것에 대한 해결책을 찾았습니까?
Salman Hasrat Khan

1
그림은 1000 단어의 가치가 있습니다. 스크린 샷 주셔서 감사합니다. 내가 필요한 전부였다.
sean808080

3

@Matthieu 답변 (나머지 소셜 URL의 경우 100 % 정확)으로도 공유 대화 상자에서 Facebook을 공유 할 수 없습니다. Facebook SDK에서 반대로 URL 세트를 추가해야했습니다.

<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>

문서를 보는 데 사용할 수있는 앱을 알고 있으며 해당 코드를 제공 할 수 있습니까?
Nishat Jahan

2

Swift 4.2 및 Xcode 10.1에서

info.plist에서 CFBundleURLSchemes 및 LSApplicationQueriesSchemes를 추가해야합니다.

-> 프로젝트에서 info.plist를 선택하십시오.

-> 오른쪽 클릭

-> 소스 코드로 열기를 선택하십시오.

아래 스크린 샷을 참조하십시오

여기에 이미지 설명을 입력하십시오

-> xml 파일이 열립니다

-> 복사-아래 코드를 붙여 넣고 ID로 바꿉니다.

gmail, fb, twitter 및 링크 된 CFBundleURLSchemes 및 LSApplicationQueriesSchemes

<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>

최종 info.plist 파일은 아래 화면을 참조하십시오

여기에 이미지 설명을 입력하십시오


1

9.0.x의 탈옥 전화기에 URL 스킴이있는 버그가 있음에 유의해야합니다. 탈옥 된 장치를 사용하는 경우 Cydia에서 Patcyh를 업데이트하십시오


1

조건부 검사없이 직접 openURL:또는 openURL:options:completionHandler:(iOS 10 이상) 을 호출하여 앱을 열 수 있습니다 canOpenURL:. canOpenURL : 메소드에 대한 Apple 문서토론 섹션 을 읽으십시오 .

openURL : 메소드는 LSApplicationQueriesSchemes요구 사항에 의해 제한되지 않습니다 .


0

매개 변수가 포함 된 URL을 지정하는 방법을 아무도 다루지 않은 것 같습니다. 매개 변수가 포함 된 URL은 LSApplicationsQueriesSchemes에서 특정 URL을 지정할 수 없습니다. 예를 들어, 발신자 이메일 주소를 전달하는 이메일 앱이 있다고 가정합니다.

myemail://mailto?bob@gmail.com

iOS9에서 작동하는 유일한 방법은 매개 변수를 제거하는 것입니다.


4
응? plist에 추가해야 할 것은 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

오늘 내 앱에서 Facebook에 전화를하려고 할 때 (Xcode 버전 8.2.1 (8C1002))에 LSApplicationQueriesSchemes추가 할 수 있는 키 가 없다는 것을 Info.plist알았습니다. Sublime Text로Info.plist with를 열고 파일에 수동으로 추가 한 다음 작동했습니다. 키를 찾을 수없는 경우 직접 추가하면됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.