アプリをマーケットからインストールした後に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);
}
}
ただし、アプリをインストールすると、レシーバーはインテントをキャッチしないようで(インテントがブロードキャストされている場合でも)、ログ出力は得られません。
どこかに間違っているのでしょうか、それともアプリがインストールされたときにマーケットがこれらのインテントを起動しなくなったのですか?
私のように、install_referrerを機能させることができず、これらの機能に関する有用な情報を見つけられない人を支援したいと思います。
ノート:
com.Android.vending.INSTALL_REFERRER
_は、アプリケーションの初回起動時ではなく、インストールプロセス中にキャッチされます。extras.getString("referrer")
..は固定されていますが、内容はhttp get構文..._referrer=thatsthevalue&thisisnot=xxx
_を尊重する任意のストリング値にすることができます上記のコードは大丈夫です。情報を完成させるためのいくつかの説明があります。
<receiver>
_タグは_<application>
_タグの内側になければなりません。でもこれ
明らかに、モバイルデバイスからリンクをたどる必要があり、完全なテストを行う唯一の方法は、テストアプリケーションを市場に公開することです。
そして最後の個人的なメモ。
これらの情報が完全に省略されている理由がわかりません。Googleが詳細を説明するために行動することを願っています。
これは少し遅いかもしれませんが、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にポップアップが表示されます。
お役に立てれば!
これらの答えはAndroid 3.1より前に書かれたに違いないと思います-物事は1つのインポート方法で変更されたからです。
システムは、インストール時にアプリを休止状態としてマークします。ユーザーがアプリを実行(またはウィジェットを配置)して明示的にアクティブにするまで、INSTALL_REFERRERまたはその他のブロードキャストを受信しません。
さて、Intentが起動されなかった理由を見つけました。どうやら、ここで概説したものと同じパラメーター名を使用する必要があります: http://code.google.com/mobile/analytics/docs/Android/#referrals
私がやっているように、あなたはあなた自身のパラメータ名を使用することはできません:S
これは最初の開始インテントではなく、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を読むために読む必要はありません。ユーザーをスパイする必要はありません。
Googleのドキュメントが最良ではないことに同意します。ただし、実際にアプリをMarket Placeにアップロードしてからダウンロード/インストールすることによってのみ、起動することができました。インテントは、ダウンロード/インストールの直後に起動します-ユーザーはアプリを起動する必要はありません。これもバックグラウンドサービスを開始するために使用しています。
実際には、market:// ...またはhttp:// market ...のようなリンクがあれば問題ありません。また、リファラーフィールドにどのようなパラメーターが含まれているかは関係ありません。そこにあるどのテキストでも問題なく動作します。
このイベントタイプ"com.Android.vending.INSTALL_REFERRER"がブロードキャストで送信しない主な問題。このイベントは、インストールされたばかりのアプリケーションにのみ発生します。
UPD:テストする方法は1つしかありません。アプリをマーケットに展開してから、電話にインストールします。
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"