web-dev-qa-db-ja.com

Androidディープリンク:アプリとプレイストアに同じリンクを使用します

ユーザーが検索クエリを作成できるWebサイトがあります。クエリが完了するまでに数分かかる場合があります(数分から数日)。ユーザーにAndroidアプリをダウンロードして、そこへのリンクを含むメールを送信して、ユーザー。

ユーザーがアプリをインストールしているかどうかにかかわらず、このメカニズムが機能することを望みます。言い換えると:

  • ユーザーがアプリを持っている場合、識別子引数を含む deep link でアプリを開く必要があります。
  • ユーザーが持っていない場合は、アプリのページでPlayストアを開く必要があります(例:https://play.google.com/store/apps/details?id=com.bar.foo&referrer=BlahBlah)、ユーザーにインストールさせ、識別子引数を指定してアプリを開きます。

enter image description here

Android引数付きのアプリケーションを開くリンクを作成する方法はありますか?これは、アプリがインストールされているかどうかにかかわらず動作しますか?

50
Adam Matan

この回避策はうまくいくかもしれません:

  1. サーバー側で、Google Playへのリダイレクトルールを作成します。たとえば、https://www.foo.com/bar/BlahBlahhttps://play.google.com/store/apps/details?id=com.bar.foo&referrer=BlahBlahにリダイレクトします。

  2. アプリで、 サーバー側リンクをディープリンクとして登録

<data Android:scheme="https"
          Android:Host="www.foo.com"
          Android:pathPrefix="/bar" />

これで、アプリがインストールされている場合、URLがキャッチされ、パスを解析してBlahBlah部分を抽出できます。アプリがインストールされていない場合、リンクを押すと、参照URLを使用してユーザーがPlayストアにリダイレクトされます。

enter image description here

ノート:

  • /bar/BlahBlah&referrer=BlahBlahに変換されました。これは、PlayストアがURL引数を受け取り、ディープリンクメカニズムがURLパスで機能するためです(私が知る限り)
87
Adam Matan

このスキームを使用して試すことができます(ユーザーに送信されます):

intent://details?id=X&url=Y&referrer=Z#Intent;scheme=market;action=Android.intent.action.VIEW;package=com.Android.vending;end";

X:アプリのパッケージ名

Y:アプリのマニフェストで定義する必要があるディープリンクスキーム。 ( this を参照してください)ここでは、このURLを例として使用しています: " http://www.example.com/gizmos "、したがってYはこのURL。

Z:Google Play経由でアプリに渡す任意のデータを指定できます。元のパラメータ自体は「&」で区切られているため、渡すデータは「&」で区切らないでください。

私が実験したところから、このURLはブラウザに認識され、パッケージ名とディープリンクスキームに基づいてアプリにリダイレクトされます。それ以外の場合は、Google Playに移動します。

PS:Google Playはアプリにブロードキャストを行います。そのため、必ず受信機でブロードキャストを受信して​​ください。

13
Shivam Dixit

この質問はかなり古く、また非常に人気があります。したがって、このユースケースがFirebaseによって公式にサポートされていることを正確に知る価値があります。正確には Firebase Dynamic Links です。

アプリのオープンと遅延ディープリンクのみをサポートします。つまり、アプリのインストール後、アプリの起動時に、アプリのインストールに使用されたデータ(リンク)を取得できます。

App Linkingの上に構築されているため、以前と同じintent-filterが必要です。

つまり、implementation 'com.google.firebase:firebase-dynamic-links:VERSION'を追加し、FirebaseDynamicLinksクラスのインスタンスからリンクを取得する必要があります。

もちろん、Webサイト上のリンクをFirebaseコンソールで生成されたリンクに変更する必要がありますが、これらのリンクは(名前が示すように)「動的」であるため、すべてのシステムで機能します。

すべての詳細情報とそのユースケースのセットアップについては、こちらをご覧ください: https://firebase.google.com/docs/dynamic-links/use-cases/web-to-app

1
michalbrz

Adamのソリューションは、自分で構築したい場合には非常に優れています。

オープンソースSDK があります。これは、Branch Metricsによってまさにこれを行います(完全な開示、私はそこで働いています)。

基本的に、ブランチダッシュボードでURIスキームを設定し、渡すデータ(この場合はクエリパラメーターですが、決定します)とのリンクを作成します。SDKには、上記のクエリを提供するコールバックを持つメソッドがありますパラメータ(インストールまたは通常のディープリンクを使用して[ブランチ]リンクをクリック)。

0
Sahil Verma