web-dev-qa-db-ja.com

iOS 9でURL SCHEMEのInstagramアプリが開かない

次のURLはiOS 8.3以前では開きますが、iOS 9では機能しません

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

なぜURLが開かないのですか?

135
Sk.Azad

iOS 9では、URLスキームの処理に小さな変更が加えられました。あなたのアプリがあなたのInfo.plistLSApplicationQueriesSchemesキーを使うことを要求するURLをホワイトリストに載せなければなりません。

こちらの投稿を参照してください。 http://awkwardhare.com/post/121196006730/quick-take-on-ios-9-url-scheme-changes

主な結論は以下のとおりです。

ホワイトリストに登録されていないURLで「canOpenURL」メソッドを呼び出すと、このスキームを処理するように登録されているアプリがインストールされていても、「NO」が返されます。 「このアプリは方式xxxのクエリを許可されていません」というsyslogエントリが表示されます。

ホワイトリストに登録されていないURLに対して「openURL」メソッドを呼び出すと、暗黙のうちに失敗します。 「このアプリは方式xxxのクエリを許可されていません」というsyslogエントリが表示されます。

著者はまた、これはOSのバグであると推測しており、Appleはこれを今後のリリースで修正する予定です。

205
thelaws

上記のように、あなたはinfo 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>

* Facebookの最初の3試合(FBSDK 4.6):fbapi、fbauth2、fbshareextension。 「ハ」はスナップチャット用です

149
Matthieu Rouif

これはiOS 9の新しいセキュリティ機能です。詳細については、 WWDC 2015 Session 703 をご覧ください。

SDK 9でビルドされたアプリは、plistファイルにLSApplicationQueriesSchemesエントリを提供して、どのスキームをクエリしようとしているかを宣言する必要があります。

<key>LSApplicationQueriesSchemes</key>
<array>
 <string>urlscheme</string>
 <string>urlscheme2</string>
 <string>urlscheme3</string>
 <string>urlscheme4</string>
</array> 
86
Leo Natan

TestAとTestBの2つのアプリを想定しています。 TestBはTestAがインストールされているかどうかを照会したいです。 「TestA」は、info.plistファイルに次のURLスキームを定義しています。

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

2番目のアプリ「TestB」は、「TestA」が次の呼び出しによってインストールされているかどうかを調べます。

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

しかしTest9のinfo.plistファイルのLSApplicationQueriesSchemesエントリに "TestA"を追加する必要があるので、これは通常iOS9ではNOを返します。これは、TestBのinfo.plistファイルに次のコードを追加することによって行われます。

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

実用的な実装はここで見つけることができます。 https://github.com/gatzsche/LSApplicationQueriesSchemes-Working-Example

25
Awsed

セッション703 WWDC 2015より、

IOS 9用にアプリを作成してURLスキームを呼び出したい場合は、引き続きURLスキームを使用できます。これらのURLスキームは、App Info.plistで宣言する必要があります。新しいキーLSApplicationQueriesSchemesがあります、そしてここにあなたが欲しいスキーマのリストを追加する必要があるでしょうcanOpenURL。

For instance, incase of FB

21
Kaey

共有ダイアログからのFacebookの共有は、@ Matthieuの回答(他のソーシャルURLに対しては100%正しい)でも失敗します。私は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>
2
elbuild

Swift 4.2とXcode 10.1では

Info.plistにCFBundleURLSchemesとLSApplicationQueriesSchemesを追加する必要があります。

- >プロジェクト内のinfo.plistを選択してください。

- >右クリック

- >選択別名で開くソースコード

下のスクリーンショットを見てください

enter image description here

- > 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ファイルは

enter image description here

1
iOS

さて、あなたはopenURL:またはopenURL:options:completionHandler:(iOS 10以降)を直接呼び出すことで、条件付きチェックをcanOpenURL:にすることなくアプリを開くことができます。 canOpenURLについての アップルのドキュメントのディスカッションセクションを読んでください:method

openURL:メソッドはLSApplicationQueriesSchemesの要求に制約されません。

1
iphondroid

URLスキームを壊した9.0.xのジェイルブレイク電話にバグがあったことに注意することは重要です。あなたが脱獄したデバイスを実行しているなら、あなたはCydiaでPatcyhを更新するようにしてください

1
Buzzrick

埋め込みパラメータを使用してURLを指定する方法を誰もが説明しているようには見えません。パラメータを含むどのURLでもLSApplicationsQueriesSchemesで特定のURLを指定することはできません。たとえば、送信者のEメールアドレスを渡すEメールアプリがあるとします。

myemail://[email protected]

IOS9で動作させるための唯一の方法は、パラメータを削除することです。

0
Dave

Paypalの場合は、以下にURLスキームを追加してください。

enter image description here

こちら を参照してください。

0
Naveen Kumar M

Swift 3.1、Swift 3.2、Swift 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>
0
Vini App

AppleはiOS 9のcanOpenURLメソッドを変更しました。iOS9とiOS 10でURLスキームをチェックしているアプリケーションは、Appleに送信されるときにこれらのスキームを宣言する必要があります。

0
Nish