自分の開発したAndroidアプリにApp Indexingを導入してみた話

最近”App Indexing(アップインデックシング)”というのが流行っているらしく、仕事でもAppIndexing案件に携わるようになった。
しかし、実のところ、自分でもAppIndexingがなんなのかよく分かっていない。
この度プライベートで開発しているAndroidアプリ「TwitMorse」に導入してその効果を検証してみることにする。

参考にした資料
アプリでディープリンクをサポートする
ディープリンクを発行する

いずれもGoogle公式の資料です。

これによればまず、マニフェストファイルに以下のようなintent-filterを追加する。カスタムURIスキームと、httpプロトコルで始まるurlをサポートするように記述する必要があるらしい。

AndroidManifest.xml

<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:uiOptions="splitActionBarWhenNarrow"
android:configChanges="orientation|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter android:label="@string/deeplink_app_name">
<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 "takelab://twitmorse" -->
<data android:scheme="takelab"
android:host="twitmorse" />
</intent-filter>
<intent-filter android:label="@string/deeplink_app_name2">
<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 "http://takelab.sub.jp/android-app/twitmorse/twitmorse-appindexingpage" -->
<data android:scheme="http"
android:host="takelab.sub.jp"
android:pathPrefix="/android-app/twitmorse/twitmorse-appindexingpage" />
</intent-filter>
</activity>

これでアプリは
http://takelab.sub.jp/android-app/twitmorse/twitmorse-appindexingpage
というURLと

takelab://twitmorse
というカスタムURIのリンクを踏んだ時にその文字列に反応して立ち上がるということらしい。

TwitMorseを入れいてる方はリンクを踏むとアプリの選択を促されるはずである。

コレでDeepLink(ディープリンク)と言われるWeb to App(Webからアプリへ遷移)を可能にするリンクをサポートしたことになったらしい。

ここまでがインテントフィルターの話である。
つまりアプリはhttpで始まるURLとtakelab:twitmorseという文字列に反応して立ち上がる準備が整った状態である。

AppIndexingはここでは終わらないらしい。
今度はGoogleにそれを知らせる必要がある。

そこでアプリ起動時にAppIndexingAPIを叩く必要がある。

MainActivity.java

static final Uri APP_URI = Uri.parse("android-app://jp.sub.takelab.twitmorus/http/takelab.sub.jp/android-app/twitmorse/twitmorse-appindexingpage");
static final Uri WEB_URL = Uri.parse("http://takelab.sub.jp/android-app/twitmorse/twitmorse-appindexingpage");
private GoogleApiClient mClient;
private static final String APP_NAME = "ついっともーるす";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mClient = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
}
@Override
protected void onStart() {
super.onStart();
// Connect your client
mClient.connect();
// Construct the Action performed by the user
Action viewAction = Action.newAction(Action.TYPE_VIEW, APP_NAME, WEB_URL, APP_URI);
// Call the App Indexing API start method after the view has completely rendered
AppIndex.AppIndexApi.start(mClient, viewAction);
}
@Override
protected void onStop() {
// Call end() and disconnect the client
Action viewAction = Action.newAction(Action.TYPE_VIEW, APP_NAME, WEB_URL, APP_URI);
AppIndex.AppIndexApi.end(mClient, viewAction);
mClient.disconnect();
super.onStop();
}

onCreateでGoogle用のapiClientを準備。
onStartで引っ掛けたい文字列と、WebURLとアプリ用のURIを指定する。
onStopでも同じ文字列とWebURLを指定し、接続を解除している。

android-app:というスキーマは恐らくGoogle側で使われるものだと思われる。
WebUrlは自分で任意に指定したものを送信する。

これによって、Google側に

「このURLが検索に載ったら、アプリで開けるようにしてー」
という意思表示をしたことになる。(恐らく)

これをおこなった状態でアプリを開いた後、Googleアプリを開き、「ついっともーるす」と検索すると・・・

Screenshot_20160318-220134
このようにGoogleアプリがTwitMorseのサジェストをしてくれるようになる。
サジェストのTwitMorseをタップするとTwitMorseが立ち上がる。

これがAppIndexingの効果らしい。

以上

自分の開発したAndroidアプリにAppIndexingを導入してみた話

でした。

何か認識が間違っていたら教えていただけると幸いです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です