我有一个简单的任务:我想跟踪应用安装的引荐ID并将其传递给后端。
我做了什么:我创建了一个带有额外参数referrer
的链接,并将其附加到邀请链接。当它打开时,javascript
会检测浏览器是否为Android移动浏览器,然后准备intent
并发出重定向到该意图。准备意图时,会从网址中提取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
的值为intent
。但我得到的值是字符串utm_source=google-play&utm_medium=organic
我做错了什么?如何修复它以获得referrer
字段的正确值?
修改
安装应用后,我在创建网址或从referrer
字段中提取值时没有任何问题。
点击通过任意按钮点击邀请链接或直接在移动浏览器中打开邀请链接后,我使用上述内容来打开应用程序(如果已经安装)或在Play上打开应用程序页面存储应用程序供用户安装"。
问题是,如何通过上述意图将引荐来源字段的值从邀请链接传递到Play商店应用,以便Play商店收到此值并在安装时将其传递给应用。
答案 0 :(得分:7)
你需要正确测试它,我发布我的用例,希望它能解决你的问题:)
Refferal 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
打开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&的引荐= utm_source%3Dmobisoc%26utm_content%3D {的transaction_id}%26utm_campaign%3D1 强>
只看我的链接。如果用户将通过该链接转到Playstore,并安装该应用程序。然后,第一次启动应用程序时,您的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”之后的所有数据“ 标签。因此,您可以在创建引荐来源链接时决定需要添加哪些数据。
如果您需要更多说明,请告诉我:))
答案 1 :(得分:4)
通过Firebase动态链接跟踪引荐来源更好,更可靠。
下面是它的工作原理。
这是填写参数后的链接示例。
当然,您可以直接在Firebase控制台上缩短https://example.app.goo.gl/abcde
之类的链接。设置动态链接只需几分钟。
然后在主Activity
的Android应用中,您可以拨打AppInvite.AppInviteApi.getInvitation(mGoogleApiClient, this, false)
来检索链接信息。
答案 2 :(得分: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>