在Play商店正确跟踪安装推荐来源

15

我有一个简单的任务:我想跟踪应用程序安装的推荐 ID 并将其传递给后端。

我所做的是:创建一个带有额外参数“referrer”的链接并将其附加到邀请链接中。当它被打开时,javascript 检测浏览器是否为 Android 移动浏览器,然后准备一个 intent 并将重定向发出到该 intent。在准备 intent 时,从 url 中提取 referrer 字段,并将其附加到 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。但我得到的值是这个字符串utm_source=google-play&utm_medium=organic

我做错了什么,我该如何修复它以获取正确的referrer字段值?

编辑

一旦安装应用程序,我在创建URL或从referrer字段中提取值方面没有任何问题。

一旦通过任何按钮单击或直接在移动浏览器中打开邀请链接,我使用上述方法“打开应用程序(如果已安装)或打开Play Store应用程序上的应用程序页面以供用户安装”。

问题是,我应该如何通过上述意图将referrer字段的值从邀请链接传递到Play商店应用程序,以便在安装时Play商店接收此值并将其传递到应用程序。


你考虑过Firebase动态链接吗?它更好,更可靠。 - Pongpat
@Pongpat 当然可以,我很愿意。 - Amit Tiwari
请点击@Pongpat 链接 获取邀请。 - Amit Tiwari
@Neo 实际上,我无法直接测试推荐人,但后端日志显示了我从前端尝试发送的“referrer”字段的值,并且它不是我所期望的。 - Amit Tiwari
@AmitTiwari,你能给我完整的链接,以便将用户重定向到Play商店吗? - Pongpat
显示剩余7条评论
3个回答

8

您需要进行适当的测试,我将发布我的用例,希望能解决您的问题:)

推荐链接 -

https://play.google.com/store/apps/details?id=com.mypackage&referrer=utm_source%3Dmobisoc%26utm_content%3D{transaction_id}%26utm_campaign%3D1

接收推荐代码 -

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打开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

请查看我的链接。如果用户通过该链接前往Play商店并安装应用程序,则第一次启动应用程序时,您的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"

测试时无需将应用程序发布到playstore上,只需在onReceive的第一个点上设置一个调试点,以调试模式启动,并触发我发布的命令序列,在“referrer”标签后您将获得所有数据。因此,通过这种方式,您可以决定在创建引荐链接时需要添加哪些数据。

如果需要更多澄清,请告诉我 :)


创建邀请URL并从“referrer”字段提取数据很清楚。问题是,当我从移动浏览器打开我的邀请URL时,如果已安装应用程序,则需要打开该应用程序,如果未安装,则需要打开Play商店。 为此,我使用了问题中所提供的“intent”。我想知道的是,“intent”中应进行哪些更改,以便将推荐价值传递给Play商店应用程序,以便在安装应用程序时可以获取它? - Amit Tiwari
发布了额外的澄清,如果您仍有疑问,请告诉我 :) - Neo
让我们在聊天中继续这个讨论 - Neo
你能举个例子解释一下你的问题吗?我很乐意帮助你。 - Neo
显示剩余4条评论

5

使用Firebase动态链接跟踪引荐者更好、更可靠。

以下是它的工作原理。

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/

0

我已经使用了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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接