我想实现install referrer track并希望在后端数据库中使用referrer参数和存储我已经看到了许多例如Get Android Google Analytics referrer tag或Android Google Analytics Campaign tracking not appearing的问题,但没有得到我生成链接的方法去尝试代码
package SimpleDemo.ReferralTrack;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
public class ReferralReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// Workaround for Android security issue: http://code.google.com/p/android/issues/detail?id=16006
try
{
final Bundle extras = intent.getExtras();
if (extras != null) {
extras.containsKey(null);
}
}
catch (final Exception e) {
return;
}
Map<String, String> referralParams = new HashMap<String, String>();
// Return if this is not the right intent.
if (! intent.getAction().equals("com.android.vending.INSTALL_REFERRER")) { //$NON-NLS-1$
return;
}
String referrer = intent.getStringExtra("referrer"); //$NON-NLS-1$
if( referrer == null || referrer.length() == 0) {
return;
}
try
{ // Remove any url encoding
referrer = URLDecoder.decode(referrer, "x-www-form-urlencoded"); //$NON-NLS-1$
}
catch (UnsupportedEncodingException e) { return; }
// Parse the query string, extracting the relevant data
String[] params = referrer.split("&"); // $NON-NLS-1$
for (String param : params)
{
String[] pair = param.split("="); // $NON-NLS-1$
referralParams.put(pair[0], pair[1]);
}
ReferralReceiver.storeReferralParams(context, referralParams);
}
private final static String[] EXPECTED_PARAMETERS = {
"utm_source",
"utm_medium",
"utm_term",
"utm_content",
"utm_campaign"
};
private final static String PREFS_FILE_NAME = "ReferralParamsFile";
/*
* Stores the referral parameters in the app's sharedPreferences.
* Rewrite this function and retrieveReferralParams() if a
* different storage mechanism is preferred.
*/
public static void storeReferralParams(Context context, Map<String, String> params)
{
SharedPreferences storage = context.getSharedPreferences(ReferralReceiver.PREFS_FILE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = storage.edit();
for(String key : ReferralReceiver.EXPECTED_PARAMETERS)
{
String value = params.get(key);
if(value != null)
{
editor.putString(key, value);
}
}
editor.commit();
}
/*
* Returns a map with the Market Referral parameters pulled from the sharedPreferences.
*/
public static Map<String, String> retrieveReferralParams(Context context)
{
HashMap<String, String> params = new HashMap<String, String>();
SharedPreferences storage = context.getSharedPreferences(ReferralReceiver.PREFS_FILE_NAME, Context.MODE_PRIVATE);
for(String key : ReferralReceiver.EXPECTED_PARAMETERS)
{
String value = storage.getString(key, null);
if(value != null)
{
params.put(key, value);
}
}
return params;
}
}
之后我尝试了我的活动
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(DemoActivity.this);
String referrers1 =preferences.getString("ga_campaign", "0");
Map<String, String> retrieveReferralParams=ReferralReceiver.retrieveReferralParams(DemoActivity.this);
String referrers2= retrieveReferralParams.get("utm_source");
String referrers3= retrieveReferralParams.get("utm_medium");
String referrers4= retrieveReferralParams.get("utm_term");
String referrers5= retrieveReferralParams.get("utm_content");
String referrers6= retrieveReferralParams.get("utm_campaign");
tv.setText(referrers1+" "+referrers2+" "+referrers3+" "+referrers4+" "+referrers5+" "+referrers6+" ");
点击按钮但没有获得所需的输出
我想要来自
的东西"https://play.google.com/store/apps/details?id=com.lifestreet.android.TestInstallationIntent&referrer=bb%3DAAAAAAAAAA&feature=search_result%22"
Ans
referrer=bb
任何帮助我高度赞赏 提前谢谢。
答案 0 :(得分:1)
不确定Google是否允许您发送任意信息。尝试使用生成器来创建URL。
https://developers.google.com/analytics/devguides/collection/android/devguide#google-play-builder
答案 1 :(得分:0)
我遇到过类似的问题。发现它是生命周期问题:在我的应用程序的onResume()之后,在SAME主线程上调用了install_referrer接收器的onReceive,因此在onResume()期间读取referrer文件的任何尝试都会失败。以下是用于证明它的logcat,使用Android 4.2.1和4.4.2在2台设备上反复100%重现:
首先,Play商店在单独的(商店)流程中将引荐者广播到包:
11-04 14:17:51.558: D/Finsky(1737): [1] ReferrerRebroadcaster.doBroadcastInstallReferrer: Delivered referrer for com.xxx.demo
app onResume() - 仍然没有激活广播接收器!小号
11-04 14:17:51.888: D/XXX Main Activity(22730): onResume
应用程序尝试读取引用者(接收者应使用getSharedPreferences.putString存储它):
11-04 14:17:51.958: I/XXX(22730): Extracted install referrer:
现在只在主线程上调用接收器,并且很快就会尝试将引用者写入文件:
11-04 14:17:51.918: I/XXX(22730): Received install referrer: abcdefg
正如您所看到的,onResume()没有机会实际读取文件,因此提取无效。但是,如果我关闭应用程序并重新打开它,onResume现在能够找到该文件并且引用者字符串被处理 - 但不是在第一次启动时:)
希望这有帮助!
答案 2 :(得分:0)
Google Analytics在其SDK中使用任意常量。 对于campaing_source是&amp; cs。