web-dev-qa-db-ja.com

Playストアでのインストールの参照を適切に追跡する

簡単なタスクがあります。アプリインストールの参照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ストアがこの値を受け取ってインストール時にアプリに渡す方法を教えてください。

15
Amit Tiwari

あなたはそれを適切にテストする必要があります、私は私のユースケースを投稿しています、それがあなたの問題を解決することを願っています:)

リフレラル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の最初のポイントにデバッグポイントを配置し、デバッグモードで起動して、投稿したコマンドシーケンスを実行するだけで、「リファラー」タグの後にすべてのデータを取得できます。したがって、これにより、参照リンクを作成するときに追加する必要があるデータを決定できます。

より明確にする必要がある場合はお知らせください:)

7
Neo

Firebase Dynamic Linkを介してリファラーを追跡する方が、信頼性が高くなります。

これの下でそれがどのように機能するか。

https:// domain /?link = your_deep_link&apn = package_name [&amv = minimum_version] [&ad = 1] [&al = Android_link] [&afl = fallback_link]

パラメータを入力した後のリンクの例を次に示します。

https://example.app.goo.gl/?link=https://www.example.com/someresource&apn=com.example.Android&amv=3&al=exampleapp://someresource&ibi=com.example.ios&isi = 1234567&ius = exampleapp

もちろん、Firebaseコンソールでリンクを_https://example.app.goo.gl/abcde_などに直接短縮できます。ダイナミックリンクの設定には数分しかかかりません。

次に、AndroidアプリActivityで、AppInvite.AppInviteApi.getInvitation(mGoogleApiClient, this, false)を呼び出してリンク情報を取得できます。

詳細はこちら https://firebase.google.com/docs/dynamic-links/

5
Pongpat

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>
0
Dheeraj Sachan