-canOpenURL:および-openURL:について



About Canopenurl Openurl



最近、ユーザーのiPhoneにインストールされているアプリを知る必要があったので、いくつかの情報を確認しました。一般的に、それは主にAppleの使用によるものです。- canOpenURL: APIは、対応するAPPのスキームが有効かどうかをテストします。

APPでサポートされているすべてのスキームを知る方法

明らかに、対応するAPPがデバイス上にあるかどうかを知るには、このAPPでサポートされているすべてのスキームを知る必要があります(APPが独自のスキームを定義していない場合は、を参照してください)。 プライベートAPIを使用する )。ここで私はおそらく2つの方法があると要約しました。



  • 他の誰かがすでに組織しているスキームを使用します。このような ウィキ このページには、より有名なAPPスキームのいくつかが含まれています。もちろんこれがあります ウェブサイト ここでスキームに対応するAPPにクエリを実行できます。また、知っているAPPのスキームを追加して、背後にいるユーザーが検索できるようにすることもできます。
  • APPのスキームを確認するには、自分で行ってください。主に次のステップに分かれています。
    1. IPAパッケージを入手してください。ここでは、iTunesを使用してアプリをダウンロードできます。次に、~/Music/iTunes/iTunes Media/Mobile Applications iTunesがダウンロードしたIPAパッケージはこのディレクトリにあります。
    2. IPAパッケージの拡張子をzipに変更して、解凍できるようにします。
    3. 解凍後に開きますPayloadフォルダを右クリックしてappという名前のフォルダを展開し、Display package contentsを選択します。内部ファイルを表示できます。
    4. 上げてInfo.plistファイル、検索CFBundleURLSchemes APPがそれ自体に対して定義したスキームを見ることができます。

使用方法-canOpenURL:

上記のiOS9では、ユーザーのプライバシーを保護するために、開発者は以前ほどカジュアルにすることはできません-canOpenURL:です。通常、iOS9以降のシステムで使用されます-canOpenURL:それは以下のステップに分けられます。

  • プロジェクトファイルをクリックして、適切なTargetを選択し、Infoをクリックします。オプション、展開Custom iOS Target Properties
  • 検索または追加LSApplicationQueriesSchemesプロパティリストに移動します。また、この配列の下に対応するスキームを追加します

もちろん、プロジェクトを直接編集することもできます。Info.plistドキュメント、at LSApplicationQueriesSchemesキーの下にAPPで使用するスキームを追加します。

スキームをホワイトリストに追加することで、コードで使用できます。-canOpenURL:対応するスキームのAPPがインストールされているかどうかをテストします。スキームをホワイトリストに追加しなかった場合でも、-canOpenURL:で使用すると、クエリは失敗し、コンソールは次のような情報を出力します。

-canOpenURL: failed for URL: 'fb://' - error: 'This app is not allowed to query for scheme fb' -canOpenURL: failed for URL: 'twitter://' - error: 'This app is not allowed to query for scheme twitter'

通常の出力は次のようになります(方法-canOpenURL:テストスキームが失敗した場合、成功した場合、コンソールにはデフォルトで出力がありません。
):

-canOpenURL: failed for URL: 'fb://' - error: '(null)'

なぜこれがユーザーのプライバシーを保護するのかという疑問があるかもしれません。結局のところ、テストするスキームの多くをホワイトリストに追加できます。制限なしでホワイトリストにスキームを追加すると、アプリストアの監査時にこのメカニズムを悪用したと感じる可能性があります。そのため、APPレビューは合格しません。

iOS8 sdkでコンパイルされたコードは、iOS9システムを実行しているデバイスで実行されますが、APPがテストできるスキームの数には約50の制限があることに注意してください。

iOS9について-openURL:

私はそれをテストし、ホワイトリストにスキームを追加せずに使用しました。-openURL:対応するアプリケーションがデフォルトで開かれ、関数はtrue(デバイスがインストールされている場合)を返します。それ以外の場合、関数はfalse(リマインダーはありません)を返します。スキームがホワイトリストに追加されたら、-openURL:を使用します。ユーザーが必要かどうかにかかわらず、ウィンドウプロンプトがポップアップ表示されます(ポップアップウィンドウがない場合があります。デフォルトのジャンプの後にジャンプを選択するのは初めてですか?この時点から、AppleのAPIユーザーエクスペリエンスが良くないことがわかります)対応するアプリケーションを開き、[はい]を選択して開きます。そうしないと、アプリケーションは開かず、関数は正しく戻ります。trueまたはfalse

プライベートAPIを使用する

プライベートAPIは、Appleが提供するiOSSDKで外部に公開されていないインターフェイスクラスおよびメソッドでもあります。 OC関数呼び出しはランタイムによって決定されることがわかっています。この機能により、Appleの一部のプライベートAPIのクラス名とメソッド名が何らかの方法で取得されます。これらのAPIは簡単に使用できます。この記事では、GitHubに良い例があります。これをダウンロードできます。 デモ プライベートAPIを使用して、デバイスでサポートされているすべてのスキームと、インストールされているすべてのAPP情報を取得する方法を学習します。

プロジェクトでプライベートAPIを使用する場合は、APPのレビュー中に拒否されないように、関数呼び出しの処理を行う必要がある場合があることに注意してください。

プライベートAPIの詳細については、このStackOverflowの回答をご覧ください。 プライベートAPIとは正確には何ですか?AppleがiOSアプリを拒否するのはなぜですか?

Appleについては、アプリがプライベートAPIを使用しているかどうかを確認すると、ここで確認できます。 アップルは、プライベートAPIを使用していることをどのように認識しますか

参考資料