Help us understand the problem. What is going on with this article?

【Androidアプリを】AppIndexingを使ってみた。【Googleに見て欲しい】

More than 3 years have passed since last update.

参考: Google 検索用 App Indexing

まぁ参考というか公式ドキュメントですが....
すっごく直感的ではないですよね。

とってもテキストテキストしてます。
こういうのこそ、電子書籍のリンクでも付けて無料配布すればいいのにと思っている。

どうも、そんな私です。

今回はAndroidアプリをもっと皆に知ってもらうための方法
「App Indexing」の導入をやってみましたので共有です。

App Indexingって何?

googleさん曰く
「App Indexing を使うと、Google 検索の結果を通じてアプリの使用を増加させることができます。」
だそうです。
その説明通り、検索結果でアプリに関連するものが表示、もしくはアプリと関連付けられたWebページでアプリを起動する。というようなことが可能になります。

ちなみに、ディープリンクと言うのは

android-app://com.google.android.youtube/http/www.youtube.com/watch?v=dQw4w9WgXcQ

こんな感じのURLをタップした時に関連するアプリを立ち上げるシステムのことです。
Androidでこれを見ている方は、youtubeが立ち上がると思います。

App Indexingって一括りにされてますが、

Webmasterツールとgoogle play consoleでWebサイトとアプリを連携させるApp Indexing

App Indexing API を利用してWebサイトのURLをディープリンクで接続する

が主に実装すべき事柄です。

実装1 Webmasterツールとgoogle play consoleでWebサイトとアプリを連携させるApp Indexing

此方は前々から合って、結構簡単に実装できます。
此方は公式ドキュメントを見ながらぽちぽちやればすぐです。

googleより実装イメージ

手順1:アプリにApp IndexingさせたいURLでディープリンクを設定する。

手順2:下記に従ってwebとアプリを連携させる。

参考:Google 検索での App Indexing

簡単です。ぶっちゃけディープリンクも要らないのでは....?
なしで実装してないですが、恐らく関連付けした時点で表示されているような気がします。

実装2 App Indexing API を利用してWebサイトのURLをディープリンクで接続する

此方はAPIが絡むので少々面倒。ですがそんなに難しくない。
此方も公式ドキュメントを読んで進めれば問題なし。

例えば、

前準備:アプリにどのWebページと関連付けるか考える。

http://sample.hoge.net/

というwebページとhoggame.sample.comというアプリを僕が持っているとします。

アプリのmainアクティビティが
Webのindexページと一緒です。なら、ここは紐付けます。

アプリのdetailアクティビティと
Webのdetailページが一緒です。ここも紐付けれます。

でも、アプリのcampaignアクティビティは
Webのどことも一緒じゃないので、ヒモ付は出来ません。
しかし、アプリのキャンペーンページ導線をWebに付ける。

という設定で、App Indexing APIを利用するとします。

手順1:アプリにディープリンクを設定

まずはこんな感じで

<activity android:name="hoggame.sample.com.mainActivity"
           android:label="@string/hogehoge" >

     <intent-filter>
         <action android:name="android.intent.action.VIEW" />
         <data android:scheme="http"
               android:host="sample.hoge.net"
               android:pathPrefix="/" />
         <category android:name="android.intent.category.DEFAULT" />
         <category android:name="android.intent.category.BROWSABLE" />
     </intent-filter>
 </activity>

 <activity android:name="hoggame.sample.com.detailActivity"
           android:label="@string/hogehoge" >

     <intent-filter>
         <action android:name="android.intent.action.VIEW" />
         <data android:scheme="http"
               android:host="sample.hoge.net"
               android:pathPrefix="/detail" />
         <category android:name="android.intent.category.DEFAULT" />
         <category android:name="android.intent.category.BROWSABLE" />
     </intent-filter>
 </activity>

 <activity android:name="hoggame.sample.com.campaignActivity"
           android:label="@string/hogehoge" >

     <intent-filter>
         <action android:name="android.intent.action.VIEW" />
         <data android:scheme="http"
               android:host="sample.hoge.net"
               android:pathPrefix="/app_campaign" />
         <category android:name="android.intent.category.DEFAULT" />
         <category android:name="android.intent.category.BROWSABLE" />
     </intent-filter>
 </activity>

こんな感じで設定したとしましょう。
ディープリンクの違う設定方法は公式ドキュメントをちら見して下さい。
この設定だけでもとりあえずディープリンクできます。

例えば、

//android-app://アプリID/scheme/host/pathPrefix

android-app://hoggame.sample.com/http/sample.hoge.net/

こんな感じのURLを
ディープリンクテスト
ここで叩くと、指定のアクティビティがURLで起動するかと思います。

手順2:それぞれのアクティビティにAPIを仕込む。

https://developers.google.com/app-indexing/webmasters/appindexingapi?hl=ja
基本的にはここに忠実に再現すればOK

注意点はonStart()の部分。

Uri appUri1 = Uri.parse("android-app://hoggame.sample.com/http/sample.hoge.net/");
Uri webUrl1 = Uri.parse("http://sample.hoge.net/");

//公式はボタンだけど別にViewならボタンじゃなくてもいい
AppIndexingLink item1 = new AppIndexingLink(appUri1, webUrl1, this.findViewById(R.id.view));

List<AppIndexingLink> outlinks = new ArrayList<AppIndexingLink>();
outlinks.add(item1);

final String TITLE = "App Indexing API Title";

// タイトルの設定
AppIndex.AppIndexApi.view(mClient, this, APP_URI, TITLE, WEB_URL, outlinks);

ここは

http://sample.hoge.net/

というURLが叩かれたら

android-app://hoggame.sample.com/http/sample.hoge.net/

というディープリンクでアプリを引っ掛けますよ。と言う設定です。つまり、WebのindexページをAndroidが開こうとしたと検知した時に、開く候補にアプリを出す。というものです。
そこでアプリが選ばれればアプリが指定したアクティビティで開く。

という感じです。例えば、

Uri appUri1 = Uri.parse("android-app://hoggame.sample.com/http/sample.hoge.net/detail");
Uri webUrl1 = Uri.parse("http://sample.hoge.net/detail");

//公式はボタンだけど別にViewならボタンじゃなくてもいい
AppIndexingLink item1 = new AppIndexingLink(appUri1, webUrl1, this.findViewById(R.id.view));

List<AppIndexingLink> outlinks = new ArrayList<AppIndexingLink>();
outlinks.add(item1);

final String TITLE = "App Indexing API Title";

// タイトルの設定
AppIndex.AppIndexApi.view(mClient, this, APP_URI, TITLE, WEB_URL, outlinks);

というような感じに設定しておいて

http://sample.hoge.net/detail/123

というようなURLが叩かれてもアプリは拾うことが出来ますし、

onCreate()の中に

if (Intent.ACTION_VIEW.equals(intent.getAction())) {
    //暗黙的インテント経由で起動された時の処理(ディープリンクで起動したら)
    String uri = String.valueOf(intent.getData().getPath());
    String[] uriStrings = uri.split("/");
    //= uriStrings[0] > detail
    //= uriStrings[1] > 123
}

という記述をしておけば、アクティビティが立ち上がった後に、123というパラメータを取得できます。
また

final String TITLE = "App Indexing API Title";

// タイトルの設定
AppIndex.AppIndexApi.view(mClient, this, APP_URI, TITLE, WEB_URL, null);

こうしておけば反応するURLがなくなります。
ですが、Web上の何処かaタグで

android-app://hoggame.sample.com/http/sample.hoge.net/detail

を設定しておけばAndroidはアプリがなきゃgoogleplayを見に行かせるし、有ればアプリを立ち上げる挙動を行ってくれるので便利です。

それぞれタイトルが設定できるのですが、アプリをインデックスするときにそのタイトルを見てインデックスしているので、しっかり付けてあげましょう。

というか、グーグルがどうやったらきちんとAndroidアプリをクロールしてくれるのかよくわかってない...
えろいひと誰か教えてください('A`)

App Indexing APIを実装する上でのルール

ディープ リンクを開くと、その後何も操作せずに関連コンテンツが表示される(新しくインストールしたアプリでも、アプリが「First Click Free」を提供している)

割と重要なことなのに公式ドキュメントはpタグでさらっと書いてます。

ディープ リンクを開くと、その後何も操作せずに関連コンテンツが表示される

webとアプリを紐付けているので、
アプリで引っ掛けるURLを開いた時に、そのURLに対応したアクティビティが開かれるわけなんですが、

それが「アプリを開かずに遷移したWebページと同じコンテンツ」でなければいけないようです。
と言ってもそれを判断する方法が現状ないので大丈夫では有りますが、

グーグルが定めたルール的には宜しくないようです。

「First Click Free」

というのは、所謂スプラッシュとか挟むんじゃねーぞ?って意味です。
そして、バックキーを押したらブラウザアプリに戻ってこれる状態の事を言います。

Androidアプリ製作者ならなんとなく察するかもしれませんが、
アクティビティを立ち上げた後に、バックキーで何か表示するようにしてたり、
ディープリンクでアクティビティを二枚立ち上げたりしない限り、

バックキー>アクティビティ終了>何も残らないのでアプリも終了

というステータスになりますが、それが正しい状態で、そこになにかはさもうものなら
Webmasterツールにエラーが起きてますと言われるようです。

それにしても、どうして公式ドキュメントはこうゆうことをよく読まないと分からない位置に配置するんでしょうか...(疑惑)

App Indexingの今後

現在の仕様だと Webサイトがないとアプリをしっかりクロールできない ようです。
一応引っ掛けることは出来るようなのですが、どうも精度があまりよろしくない(ように感じる)。
しかし、将来的にアプリ単体でクロールできるようにするとの話なので、
前準備として実装するのはいいかもですね!

Webサイトを持たないアプリ的にはあまり意味を持たない機能であることは確かです。

ですが、それなら公式サイトを何でも適当に立ち上げればよい話ですよね。

そうすることでASO(SEO?)としての価値は高まる事間違いなし、ですね。

それでは、あぢゅー。

mmusasabi
(*´д`*)パッション!!
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした