そのうち日本にも上陸するだろう Google「App Indexing」の intent-filter の記述

 

11月の初旬頃、アナウンスされた「App Indexing」。

Google検索での検索結果画面に、ダイレクトでアプリを起動できるボタンが表示されるようになるというやつ。

App_Indexing_for_Google_Search_—_Google_Developers

App Indexing for Google Search — Google Developers App Indexing for Google Search — Google Developers

今はまだ、日本では、いや、USでも、公開されてないような雰囲気ですが。

まずは登録すればUSから利用できるようになるとか。

App_Indexing_-_Expression_of_Interest

App Indexing - Expression of Interest App Indexing - Expression of Interest

利用の手順としては、公開サイトやそのサイトマップに「おれおれスキーム」なURLを埋め込んでおきなさい、と。
きっとクローラが持っていくのでしょう。

App_Indexing_for_Google_Search_—_Google_Developers

そして、アプリ側には、ブラウザ上のクリックに反応する <intent-filter> を記述しておきなさい、以下2つのURIに対してのクリックに反応するよ、と。

・ http://www.example.com/gizmos 
・ example://gizmos

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <!-- Accepts URIs that begin with "example://gizmos" -->
    <data android:scheme="example"
          android:host="gizmos" />
    <!-- Accepts URIs that begin with "http://www.example.com/gizmos" -->
    <data android:scheme="http"
          android:host="www.example.com"
          android:pathPrefix="gizmos" />
</intent-filter>

この記述をアプリに適用したら、以下のコマンドで試してみたらいいらしい。

$ adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos" com.example.android

で、やってみたら、

両方ダメなんですけど。

$ adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos" com.example.android
Starting: Intent { act=android.intent.action.VIEW dat=example://gizmos pkg=com.example.android }
Error: Activity not started, unable to resolve Intent { act=android.intent.action.VIEW dat=example://gizmos flg=0x10000000 pkg=com.example.android }
$ adb shell am start -W -a android.intent.action.VIEW -d "http://www.example.com/gizmos" com.example.android
Starting: Intent { act=android.intent.action.VIEW dat=http://www.example.com/gizmos pkg=com.example.android }
Error: Activity not started, unable to resolve Intent { act=android.intent.action.VIEW dat=http://www.example.com/gizmos flg=0x10000000 pkg=com.example.android }

<data> 部分の属性の優先順位とか、未設定の場合のデフォルトの使用とか、なんかあるのかな。

あと pathPrefix の「/(スラッシュ)」も。

すこし変更、2つに分けて、

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <!-- Accepts URIs that begin with "example://gizmos" -->
    <data android:scheme="example"
          android:host="gizmos" />
</intent-filter&gt;
<intent-filter&gt;
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <!-- Accepts URIs that begin with &quot;http://www.example.com/gizmos” -->
    <data android:scheme="http"
          android:host="www.example.com"
          android:pathPrefix="/gizmos" />
</intent-filter>

で、再度コマンドラインから、

$ adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos" com.example.android
Starting: Intent { act=android.intent.action.VIEW dat=example://gizmos pkg=com.example.android }
Status: ok
Activity: com.example.android/.MainActivity
ThisTime: 77
TotalTime: 77
Complete
$ adb shell am start -W -a android.intent.action.VIEW -d "http://www.example.com/gizmos" com.example.android
Starting: Intent { act=android.intent.action.VIEW dat=http://www.example.com/gizmos pkg=com.example.android }
Status: ok
Activity: com.example.android/.MainActivity
ThisTime: 80
TotalTime: 80
Complete

となっていける。ブラウザリンクからもアプリが起動できたりするけど、はたして。。。

example://gizmos

http://www.example.com/gizmos

すこし思うのは、そのアプリを端末にインストールしてない場合は、ブラウザ上でどう表示されるのか。

上記WEB設定により、クローラが持っていった情報には「アプリのID」は含まれているので、GooglePlayStore のURLを知らないわけではないけども。。。

App Indexing for Google Search — Google Developers App Indexing for Google Search — Google Developers


関連ワード:  AndroidGoogleアプリニュース便利な設定評判速報開発