web-dev-qa-db-ja.com

Android Instant Appのモジュールにパラメーターにアクセスして渡す方法

通常のインストール済みアプリでは、次の手法を使用できます。 ディープリンク URLから特定のアプリケーションを開くだけでなく、特定のFacebook投稿や地図上の特定の座標などの特定のセクション/機能にリダイレクトすることもできます。

リンクをダウンロードして実行する特定のモジュールを既に指しているため、インスタントアプリでこれを読むことができませんが、上記のモジュールにアクセスするだけでなく、いくつかのパラメーターを渡すこともできますか?

例えば:

これは、マップアプリケーションの表示専用モジュールがダウンロードされるリンクです: "www.myinstantappexample.com/onlyviewmap

特定の座標セットを指すようにする場合、リンクはどのように構成されますか?次のようになりますか: "www.myinstantappexample.com/onlyviewmap/?x=0.000&y=0.000

私がグーグルを見つけることができたということから、この側面をカバーしておらず、私は本当にそれを頭で包むことができません。

10
user8037871

インスタントアプリとディープリンク

インスタントアプリ アプリリンクに依存 動作し、アプリリンクはディープリンクの一種です。そのため、インスタントアプリでは引き続きディープリンクが可能であり、実際にはそれらの機能にとって絶対的に重要です。ただし、URIスキームのディープリンク(Androidアプリ)で依然として一般的です)は、notをサポートしています。

通常のアプリとインスタントアプリの違いは、Playストアから完全なパッケージをダウンロードする代わりに、ユーザーがクリックするアプリリンクに応じてデバイスが単一のアクティビティのみを読み込むことです。ユーザーにとってよりシームレスなエクスペリエンスですが、基盤となるテクノロジーは同じように機能します。

カスタムパラメータを渡す

ユーザーがhttp://www.myinstantappexample.com/onlyviewmap/?x=0.000&y=0.000などのアプリリンク対応URLをクリックすると、アプリが開いた後にその文字列全体がアプリ内に返されます。 x変数とy変数を自分で解析する必要がありますが、それらは利用可能です。このようなもの:

Uri data = this.getIntent().getData();
if (data != null && data.isHierarchical()) {
    String uri = this.getIntent().getDataString();
    Log.i("MyApp", "Deep link clicked " + uri);
}

必要なものを見つけるには、uri値を操作するだけです。

カスタムパラメータの代替アプローチ

または、リンクを強化するために Branch.io (完全開示:ブランチチームに所属しています)を使用することもできます。 インスタントアプリのフルサポート があり、これにより、はるかに使いやすいデータ形式で作業できます。このようなリンクを作成して、動作のすべての部分を制御できます。

branch.link({
    tags: [ 'tag1', 'tag2' ],
    channel: 'facebook',
    feature: 'dashboard',
    stage: 'new user',
    data: {
        x: '0.000',
        y: '0.000',
        '$desktop_url': 'http://myappwebsite.com',
        '$ios_url': 'http://myappwebsite.com/ios',
        '$ipad_url': 'http://myappwebsite.com/ipad',
        '$Android_url': 'http://myappwebsite.com/Android',
        '$og_app_id': '12345',
        '$og_title': 'My App',
        '$og_description': 'My app\'s description.',
        '$og_image_url': 'http://myappwebsite.com/image.png'
    }
}, function(err, link) {
    console.log(err, link);
});

代わりにhttp://myappname.app.link/iDdkwZR5hxのようなURLを取得し、リンクをクリックするとアプリ内で次のようなものが表示されます。

{
    tags: [ 'tag1', 'tag2' ],
    channel: 'facebook',
    feature: 'dashboard',
    stage: 'new user',
    data: {
        x: '0.000',
        y: '0.000'
    }
}
3
Alex Bauer

特定の座標セットを指すようにする場合、リンクはどのように構成されますか?

URLに追加情報を含める方法はユーザー次第です。 URLパラメータを介して、またはパス自体にある可能性があります。例えば。

_https://www.myinstantappexample.com/location/2/user/5_ _https://www.myinstantappexample.com/onlyviewmap/?x=1.2&y=3.4_

次に、受信ActivityのURLを解析します。 Uri クラスには、 getQueryParameter()getPathSegments() これを簡単にします。

たとえば、このURLを解析するには:

_https://www.myinstantappexample.com/onlyviewmap/?x=1.2&y=3.4_

Activityで次のようなことを行います。

_Uri uri = getIntent().getData();
String x;
String y;
if (uri != null) {
  x = uri.getQueryParameter("x"); // x = "1.2"
  y = uri.getQueryParameter("y"); // y = "3.4"
}
if (x != null && y != null) {
  // do something interesting with x and y
}
_
14
AdamK

そのためには、「ツール」->「アプリリンクアシスタント」の「アプリリンクアシスタント」を使用する必要があります。

次に、リンクを確認し、パスセレクタで、「pathPrefix」オプションが選択されていることを確認します。

次に、アクティビティのOnCreateメソッドの下部(最近編集​​したリンクに関連する)に次のコードを追加します。

Intent appLinkIntent = getIntent();
String appLinkAction = appLinkIntent.getAction();
Uri appLinkData = appLinkIntent.getData();
// then use appLinkData.getQueryParameter("YourParameter")

「editConfigurations」オプションを使用して、これをテストおよびデバッグし、そのウィンドウを開いて、instantAppモジュール(最近編集​​したリンクで起動したモジュール)を編集し、URLフィールドに必要なURLパラメーターを追加します。 (その後、そのモジュールを実行します:D)

これが役立つことを願っています。

3