[Android]インストール時のリファラを取得する


Google Analytics SDK for Android – Google Analytics for Mobile – Google Code

Google Analytics for Androidで利用されているように、インストール時のリファラ情報を活用したい場合の簡単な説明とサンプルコードを書いておきたいと思います。

やることは、以下のようになります。今回は既にアプリが存在するものとして進めます。

  • BroadcastReceiverを継承したクラスの定義
  • AndroidManifest.xmlの修正

広告

BroadcastReceiverを継承したクラスの定義

まずは、リファラ情報を受け取る為のReceiverを定義します。

org.fukata.andorid.example.receiver.ExampleReceiver

package org.fukata.android.example.receiver;
 
import java.net.URLDecoder;
 
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
 
public class ExampleReceiver extends BroadcastReceiver {
	static String TAG = ExampleReceiver.class.getSimpleName();
 
	@Override
	public void onReceive(Context context, Intent intent) {
		// get referrer
		String referrer = URLDecoder.decode( intent.getStringExtra("referrer") );
		Log.d(TAG, String.format("referrer: %s", referrer));
	}
 
}

AndroidManifest.xmlの修正

定義したExampleReceiverでハンドリングするために、AndroidManifest.xmlにを追加します。

AndroidManifest.xml

< ?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
	package="org.fukata.android.example" android:versionName="1" android:versionCode="1">
	<application android:icon="@drawable/icon" android:label="@string/app_name">
 
		...
 
		<receiver android:exported="true" android:name=".receiver.ExampleReceiver">
			<intent -filter>
				<action android:name="com.android.vending.INSTALL_REFERRER"></action>
			</intent>
		</receiver>
	</application>
</manifest>

一つ注意として、ExampleReceiver内でリファラ情報等をサーバに送信したりする場合は、タグに適切なPermissionを付与してください。でないと怒られます。android.permission.INTERNETを付与したい場合はこんな感じです。

<receiver android:exported="true" android:name=".receiver.ExampleReceiver" android:permission="android.permission.INTERNET">
	<intent -filter>
		<action android:name="com.android.vending.INSTALL_REFERRER"></action>
	</intent>
</receiver>

INSTALL_REFERRERを擬似的に行う

INSTALL_REFERRERのブロードキャストはAndroid Marketアプリを経由してインストールされた場合にしか発行されないので、通常通りパソコンからアプリを端末にインストールした場合などは発行されません。

そういう場合に、INSTALL_REFERRERレシーバーの挙動だけを確認したい場合は下記のようにコマンドラインからブロードキャストを発行します。

adb shell am broadcast -a com.android.vending.INSTALL_REFERRER --es referrer hogehoge

追記:2011.05.23
android marketのURLにreferrerというキーが存在しない場合、com.android.vending.INSTALL_REFERRERのブロードキャストが呼ばれないので、そもそもReceiverの処理が実行されません。ということに気づかず多くの時間を無駄にしてしまいました。

追記:2011.10.31
【質問】Android Marketの新バージョンで、INSTALL_REFERRERが取得されない。 – 日本Androidの会 | Google Groups

マーケットアプリが新バージョンになってからINSTALL_REFERRERの値が正常に取れなくなったみたいです。

追記:2012.11.05
【質問】Android Marketの新バージョンで、INSTALL_REFERRERが取得されない。 – 日本Androidの会 | Google Groupsで報告されていたバグが修正されて、INSTALL_REFERRERが取得できるようになりました。

広告
  • Y・E

    いつも参考にさせていただいております。
    さっそくINSTARR_REFERRERを試してみたのですが、
    一点質問がございます。

    receiver内で取得したgetStringExtra(“referrer”);をSharedPreferencesに保存し、
    それをActivityでTextViewに表示させて試験しているのですが、
    その表示結果が、一貫して「detail?doc=#パッケージ名」と表示されてしまいます。

    https://market.android.com/details?id=#パッケージ名&referrer=test
    上記のように設定した場合、INSTALL_REFERRERによって、「test」という文字情報が取得できるものだと思っていたのですが、うまく行きません。
    何か勘違いをしておりますでしょうか。

    • マーケットアプリの新バージョンになってからINSTALL_REFERRERの値が以前のようには取れなくなったのが原因だと思います。

      【質問】Android Marketの新バージョンで、INSTALL_REFERRERが取得されない。 – 日本Androidの会 | Google Groupshttp://groups.google.com/group/android-group-japan/browse_thread/thread/65bc6a88b71e4940/86ba1804a64be03a?lnk=raot&pli=1