web-dev-qa-db-ja.com

Android Marketからアプリをインストールした後にリファラーを取得する

アプリをマーケットからインストールした後にAndroid=によって起動された "com.Android.vending.INSTALL_REFERRER"インテントをキャッチするブロードキャストレシーバーを登録しようとしています。

ここで詳細をフォローしています: http://code.google.com/mobile/analytics/docs/Android/#referrals

ただし、Google Analyticsを使用できないため、独自のソリューションを作成しました。マニフェストファイルに次を追加しました。

<receiver Android:name="com.test.Receiver" Android:exported="true">
<intent-filter>
    <action Android:name="com.Android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>

基本的なBroadcastReceiverクラスを作成しました:

public class Receiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        Bundle extras = intent.getExtras();
        String referrerString = extras.getString("referrer");

        Log.w("TEST", "Referrer is: " + referrerString);
    }
}

ただし、アプリをインストールすると、レシーバーはインテントをキャッチしないようで(インテントがブロードキャストされている場合でも)、ログ出力は得られません。

どこかに間違っているのでしょうか、それともアプリがインストールされたときにマーケットがこれらのインテントを起動しなくなったのですか?

68
Jake

私のように、install_referrerを機能させることができず、これらの機能に関する有用な情報を見つけられない人を支援したいと思います。

ノート:

  1. インテント_com.Android.vending.INSTALL_REFERRER_は、アプリケーションの初回起動時ではなく、インストールプロセス中にキャッチされます。
  2. リファラー...extras.getString("referrer") ..は固定されていますが、内容はhttp get構文..._referrer=thatsthevalue&thisisnot=xxx_を尊重する任意のストリング値にすることができます

上記のコードは大丈夫です。情報を完成させるためのいくつかの説明があります。

  1. Androidマニフェスト。 _<receiver>_タグは_<application>_タグの内側になければなりません。
  2. 市場をリンクする正しいURLは、SDKの有名なGoogleフォームの結果ではありません

でもこれ

http://market.Android.com/details?id=your.application.package.name&referrer=my_referrer_finally_works_fine

明らかに、モバイルデバイスからリンクをたどる必要があり、完全なテストを行う唯一の方法は、テストアプリケーションを市場に公開することです。

そして最後の個人的なメモ。

これらの情報が完全に省略されている理由がわかりません。Googleが詳細を説明するために行動することを願っています。

52
Tobia

これは少し遅いかもしれませんが、Google Playを使用せずにインストールリファラーをテストできます。ADBを使用するだけです:)

これをadb.exeから実行します

adb Shell

am broadcast -a com.Android.vending.INSTALL_REFERRER -n your.package/path.to.your.BroadcastReceiver --es "referrer" "test_referrer=test"

BroadcastReceiverにロギングのセットアップがある場合、LogCatにポップアップが表示されます。

お役に立てれば!

18
Machine Tribe

これらの答えはAndroid 3.1より前に書かれたに違いないと思います-物事は1つのインポート方法で変更されたからです。

システムは、インストール時にアプリを休止状態としてマークします。ユーザーがアプリを実行(またはウィジェットを配置)して明示的にアクティブにするまで、INSTALL_REFERRERまたはその他のブロードキャストを受信しません。

6
Tom

さて、Intentが起動されなかった理由を見つけました。どうやら、ここで概説したものと同じパラメーター名を使用する必要があります: http://code.google.com/mobile/analytics/docs/Android/#referrals

私がやっているように、あなたはあなた自身のパラメータ名を使用することはできません:S

5
Jake

これは最初の開始インテントではなく、Google Androidマーケットに送信されるAndroidマーケット関連のインテントにすぎないことに注意してください。 Androidマーケットとは異なるリソースを介してアプリをインストールすると、起動しません。

そこに構築できるリンクを使用します。 http://code.google.com/mobile/analytics/docs/Android/#Android-market-tracking リファラーをインテントから取得して分解しますさまざまなパラメータを取得する

referrer = intent.getStringExtra("referrer");
Map<String, String> params = Toolbox.getQueryMap(referrer);

追伸一部のアプリのように、deviceid/IMEIを読むために読む必要はありません。ユーザーをスパイする必要はありません。

2
white_gecko

Googleのドキュメントが最良ではないことに同意します。ただし、実際にアプリをMarket Placeにアップロードしてからダウンロード/インストールすることによってのみ、起動することができました。インテントは、ダウンロード/インストールの直後に起動します-ユーザーはアプリを起動する必要はありません。これもバックグラウンドサービスを開始するために使用しています。

2
JavaCoderEx

実際には、market:// ...またはhttp:// market ...のようなリンクがあれば問題ありません。また、リファラーフィールドにどのようなパラメーターが含まれているかは関係ありません。そこにあるどのテキストでも問題なく動作します。

このイベントタイプ"com.Android.vending.INSTALL_REFERRER"がブロードキャストで送信しない主な問題。このイベントは、インストールされたばかりのアプリケーションにのみ発生します。

UPD:テストする方法は1つしかありません。アプリをマーケットに展開してから、電話にインストールします。

1
Vagif
1) Broadcast receiver

public class InstallReferrerReceiver extends BroadcastReceiver {

    String referrer = "";

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction() != null) {
            if (intent.getAction().equals("com.Android.vending.INSTALL_REFERRER")) {

                Bundle extras = intent.getExtras();
                if (extras != null)
                {
                    referrer = extras.getString("referrer");

                    Log.e("Receiver Referral", "===>" + referrer);                  
                    PrefUtils.putPrefString(context, PrefUtils.PRF_REFERRER, referrer);

                    /*
                    If you want split username and code use below code...
                    for ex referrer="username12345678890"
                    if(referrer!=null)
                    {
                        String[] referrerParts = referrer.split("(?<=\\D)(?=\\d)");
                        String strName = referrerParts[0];
                        String strCode = referrerParts[1];

                        Log.e("Receiver Referral Code", "===>" + strName);
                        Log.e("Receiver Referral Name", "===>" + strCode);

                        PrefUtils.putPrefString(context, PrefUtils.PRF_REFERRER_CODE, strName);
                        PrefUtils.putPrefString(context, PrefUtils.PRF_REFERRER_NAME, strCode);
                    }*/
                }
            }
        }
    }
}

2) Define a receiver in your app manifest.in which com.Android.vending.INSTALL_REFERRER 

<receiver
            Android:name=".services.InstallReferrerReceiver"
            Android:exported="true">
            <intent-filter>
                <action Android:name="com.Android.vending.INSTALL_REFERRER" />
            </intent-filter>
</receiver>

3) Test your app configuration running this command

adb Shell am broadcast -a com.Android.vending.INSTALL_REFERRER -n package_name/broadcast_receiver_path_with_packagename --es referrer "username1234567890"
0
Coldfin Lab
0
Deven