AndroidアプリのディープリンクをGoogle検索結果に表示する方法


ディープリンクをGoogleの検索結果に表示させて、シームレスにアプリを利用してもらう方法のメモです。

このメモでは、Qiitaの公式Androidアプリがあると仮定し、Googleの検索結果からアプリを起動して投稿されたアイテムを表示する方法を説明します。

## ディープリンクとは

直接深いページへ飛ぶリンクのこと。ウェブでお馴染み直リンク。

## ディープリンクを追加

[Enabling Deep Links for App Content](https://developer.android.com/training/app-indexing/deep-linking.html)

アプリ側はカスタムURLスキーム又はhttpから始まるスキームを使って起動出来るように実装します。
ウェブと同じURLを設定しておけば、ウェブにアクセスした時にアプリ起動するか選べるので結構便利です。

上記URLでも説明されてますが、例としてQiitaのスニペットページをアプリで開きたい時の実装例

```前提
パッケージ名:com.qiita
カスタムURLスキーム:qiita://
```

```:AndroidManifest.xml
<activity
    android:name="com.qiita.MainActivity"
    android:label="@string/title" >
    <intent-filter android:label="@string/filter_title">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="qiita"
              android:host="items" />
        <data android:scheme="http"
              android:host="qiita.com" />
    </intent-filter>
</activity>
```

## URIパース

ディープリンクから起動した場合、アプリは[First Click Free](http://googlewebmastercentral.blogspot.jp/2008/10/first-click-free-for-web-search.html)に対応する必要があります。
簡単に言うと、ログインしてなくても初回起動でもディープリンクを表示出来るようにってことです。

**GoogleBotは、ウェブページとアプリページが同じであるかチェックしにクロールします。必ず対応しましょう。**

![スクリーンショット 2014-07-14 21.02.44.png](https://qiita-image-store.s3.amazonaws.com/0/1901/d02a5dc5-6572-270e-ee8a-865bfbafbc8f.png)


> 重要: ディープ リンクを使ってアプリを開く際、アプリはユーザーに First Click Free（最初のクリックは登録/購読が不要）のサービスを提供する必要があります。アプリのディープ リンクは、コンテンツの表示をさえぎるプロンプト、インタースティシャル ページ、スプラッシュ画面、ログイン画面など一切なしに、ユーザーに直接コンテンツを表示する必要があります。ユーザーがその後で何か操作をするときには、ユーザーのなんらかの操作を求めるプロンプトを表示できますが、App Indexing では最初のクリックには無料のサービスの提供を必須とします。アプリを起動していない場合やユーザーがログインしていない場合でも、First Click Free を提供する必要がある点に注意してください。  


```MainActivity.java

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Intent intent = getIntent();
    String action = intent.getAction();
    Uri data = intent.getData();
	// ここでURIをパースして、アイテムIDを取得し、
	// ItemsActivity.javaなどに画面遷移する処理を実装してください。
	// しないと、ただアプリが起動するだけになります。
}

```

## ディープリンクの動作確認

```shell
adb shell am start  -W -a android.intent.action.VIEW -d "qiita://items/279ff38f05d449db840a" com.qiita
```


## Webページにアプリのディープリンクを追加

Webページにアプリのディープリンクを追加して、クロールさせGoogleに知らせる必要があります。
Headタグ内に以下のタグを追加。
GoogleBotがクロールすると検索結果に反映されるようになります。
Sitemapに指定することも出来ます。

```
<link rel="alternate" href="android-app://com.qiita/qiita/items/279ff38f05d449db840a">
```

## GooglePlayConsoleからウェブサイトを登録

AndroidアプリとWebサイトを連携させるために登録します。
追加するとWebサイトの所有者宛に連絡が行きます。
[Google ウェブマスターツール](https://www.google.com/webmasters/tools/home)で要求を承認したら完了です。

[公式手順はこちら](https://developers.google.com/app-indexing/webmasters/connect?hl=ja)
![スクリーンショット 2014-07-09 11.23.09.png](https://qiita-image-store.s3.amazonaws.com/0/1901/e09be072-010e-8d04-da75-b7f008476251.png "スクリーンショット 2014-07-09 11.23.09.png")


## 参考URL

[Google 検索用 App Indexing | アプリにディープ リンクを追加](https://developers.google.com/app-indexing/webmasters/app?hl=ja)

[Google 検索用 App Indexing | ウェブサイトにアプリのディープ リンクを追加](https://developers.google.com/app-indexing/webmasters/server?hl=ja)

[Specifying App Content for Indexing](https://developer.android.com/training/app-indexing/enabling-app-indexing.html)

[Twitter Cards | App Installs and Deep-Linking](https://dev.twitter.com/docs/cards/app-installs-and-deep-linking)

## まとめ

アプリにディープリンクを追加することで、ウェブとアプリがシームレスに連携出来るようになりました。