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

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

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

왜 URL이 열리지 않습니까?



답변

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의 버그이며 애플은 다음 릴리스에서이 문제를 해결할 것이라고 추측합니다.


답변

위에서 말했듯이 정보 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”는 스냅 챗입니다


답변

이것은 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> 


답변

두 개의 앱 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 에서 찾을 수 있습니다.


답변

세션 703 WWDC 2015에서 :

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

예를 들어 FB의 경우


답변

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


답변

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 파일은 아래 화면을 참조하십시오

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