簡単なタスクがあります。アプリインストールの参照IDを追跡し、それをバックエンドに渡します。
私がしたこと:追加のパラメーターreferrer
を使用してリンクを作成し、それを招待リンクに追加しました。開くと、javascript
は、ブラウザーがAndroidモバイルブラウザーであるかどうかを検出し、intent
を準備して、そのインテントへのリダイレクトを発行します。準備中インテント、referrer
フィールドはURLから抽出され、次のようにintent
に追加されます。
intent://scan/#Intent;scheme=com.example.Android;package=com.example.Android&referrer=4;end
そして、これがBroadCastReceiver
の私のコードです:
public class InstallReferrerReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
TinyDB tinyDB = new TinyDB(context);
String referrer = intent.getStringExtra("referrer");
tinyDB.putString(AppConstants.REFERRAL_ID, referrer);
tinyDB.putBoolean(AppConstants.REFERRAL_SENT, false);
}
}
ですから、referrer
の値が4
上記に基づくintent
。しかし、私が得ている値はこの文字列utm_source=google-play&utm_medium=organic
何が悪いのでしょうか。また、どのように修正してreferrer
フィールドの正しい値を取得できますか?
編集
アプリをインストールしたら、URLの作成やreferrer
フィールドからの値の抽出に問題はありません。
ボタンをクリックして招待リンクをクリックするか、モバイルブラウザーで直接開いたら、上記を使用して、「既にインストールされている場合はアプリを開くか、ユーザーがインストールできるようにPlayストアアプリでアプリのページを開きます」。
問題は、上記のインテントを介して招待リンクからPlay Storeアプリにリファラーフィールドの値を渡し、Playストアがこの値を受け取ってインストール時にアプリに渡す方法を教えてください。
あなたはそれを適切にテストする必要があります、私は私のユースケースを投稿しています、それがあなたの問題を解決することを願っています:)
リフレラルURL-
https://play.google.com/store/apps/details?id=com.mypackage&referrer=utm_source%3Dmobisoc%26utm_content%3D{transaction_id}%26utm_campaign%3D1
Refferalを受け取るコード-
public static final String KEY_UTM_SOURCE = "utm_source";
public static final String KEY_UTM_CONTENT = "utm_content";
public static final String KEY_UTM_CAMPAIGN = "utm_campaign";
public void onReceive(Context context, Intent intent) {
Utils.log("Referral Received");
try {
String referrer = intent.getStringExtra("referrer");
if (referrer != null && !referrer.equals("")) {
Utils.log("Referral Received - " + referrer);
String[] referrerParts = referrer.split("&");
String utmSource = getData(KEY_UTM_SOURCE, referrerParts);
String utmContent = getData(KEY_UTM_CONTENT, referrerParts);
String utmCampaign = getData(KEY_UTM_CAMPAIGN, referrerParts);
if (utmSource != null && utmSource.equals("mobisoc")) {
sendLogToMobisocServer(context, utmContent);
} else if (utmSource != null && utmSource.equals("app_share")) {
RawStorageProvider.getInstance(context).dumpDataToStorage(RaghuKakaConstants.REFFERAL_FOR, utmContent);
}
updateRKServerForReferral(context, utmSource, utmCampaign, utmContent);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private String getData(String key, String[] allData) {
for (String selected : allData)
if (selected.contains(key)) {
return selected.split("=")[1];
}
return "";
}
今最も重要な部分のテスト。ローカルで紹介をテストできます。スマートフォンを接続するだけで、adb Shell
を使用してシェルプロンプトを開きます。そして、紹介データを放送します。ここにコマンドシーケンスの例があります-
C:\Users\Neo\Desktop>adb Shell
$ am broadcast -a com.Android.vending.INSTALL_REFERRER -n com.mypackage/<className of your ReferralReceiver with package> --es "referrer" "utm_source%3Dmobisoc%26utm_content%3D{transaction_id}%26utm_campaign%3D1"
追加-
https://play.google.com/store/apps/details?id=com.mypackage&referrer = utm_source%3Dmobisoc%26utm_content%3D {transaction_id}% 26utm_campaign%3D1
私のリンクを見てください。ユーザーがそのリンクを介してプレイストアにアクセスし、アプリをインストールする場合。その後、アプリが初めて起動したときに、onReceiveメソッドが自動的に起動され、referrer =の後にすべてのデータが取得されます。
ブロードキャスト-
$ am broadcast -a com.Android.vending.INSTALL_REFERRER -n com.mypackage/<className of your ReferralReceiver with package> --es "referrer" "utm_source%3Dmobisoc%26utm_content%3D{transaction_id}%26utm_campaign%3D1"
テストするには、アプリをプレイストアに公開する必要はありません。onReceiveの最初のポイントにデバッグポイントを配置し、デバッグモードで起動して、投稿したコマンドシーケンスを実行するだけで、「リファラー」タグの後にすべてのデータを取得できます。したがって、これにより、参照リンクを作成するときに追加する必要があるデータを決定できます。
より明確にする必要がある場合はお知らせください:)
Firebase Dynamic Linkを介してリファラーを追跡する方が、信頼性が高くなります。
これの下でそれがどのように機能するか。
パラメータを入力した後のリンクの例を次に示します。
もちろん、Firebaseコンソールでリンクを_https://example.app.goo.gl/abcde
_などに直接短縮できます。ダイナミックリンクの設定には数分しかかかりません。
次に、AndroidアプリActivity
で、AppInvite.AppInviteApi.getInvitation(mGoogleApiClient, this, false)
を呼び出してリンク情報を取得できます。
UTMタグ付けを使用しました
完全なソースは https://github.com/dheeraj9198/Utm-Test で確認できます
基本的なコードを提供しています
public class CustomCampaignTrackingReceiver extends BroadcastReceiver {
private static final String TAG = CustomCampaignTrackingReceiver.class.getSimpleName();
private static final Logger LOGGER = LoggerFactory.getLogger(TAG);
private static final Marker MARKER = MarkerFactory.getMarker(TAG);
@Override
public void onReceive(Context context,final Intent intentx) {
LOGGER.info(MARKER, "on Receive called");
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.execute(new Runnable() {
@Override
public void run() {
try {
for (String key : intentx.getExtras().keySet()) {
try {
LOGGER.info(MARKER, key + " => " + String.valueOf(intentx.getExtras().get(key)));
} catch (Exception e) {
LOGGER.error(MARKER, "caught exception in on key retrieval ", e);
}
}
} catch (Exception e) {
LOGGER.error(MARKER, "caught exception in key loop ", e);
}
}
});
executorService.shutdown();
}
}
--------------------------マニフェスト----------------------- ----------------
<receiver
Android:name="com.google.Android.gms.analytics.CampaignTrackingReceiver"
Android:exported="true" >
<intent-filter>
<action Android:name="com.Android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
<receiver
Android:name=".receivers.CustomCampaignTrackingReceiver"
Android:exported="true" >
<intent-filter>
<action Android:name="com.Android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>