Get the Google Analytics Android Referrer Tag

We plan to use Google Analytics to track clickthroughs through the Android Market in our application.

According to the Google Documentation, the referrer tag passes through the intent and is automatically written to the Google Analytics library.

This is great, but we need to extract this referral tag for our own internal analytics. The documentation is self-conscious in detail on how to get it out of the initial intent of the launch, and instructions on how to mimic it before going live.

Does anyone have any experience?

+13
android google-play google-analytics
Sep 28 '10 at 21:01
source share
3 answers

I went ahead and published a dead pixel search app to play with intent tracking. For some reason, when I registered two different broadcast receivers (like com.google.android.apps.analytics.AnalyticsReceiver and my own), I never received it myself.

So instead, I registered only my own receiver, processed this information, and transmitted it to Google Analytics. I don’t know how kosher it is, but it works. The following is the code.

public class ZSGoogleInterceptor extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle extras = intent.getExtras(); String referrerString = extras.getString("referrer"); // Next line uses my helper function to parse a query (eg "a=b&c=d") into key-value pairs HashMap<String, String> getParams = Utility.getHashMapFromQuery(referrerString); String source = getParams.get("utm_campaign"); if (source != null) { SharedPreferences preferences = context.getSharedPreferences("my_prefs", Context.MODE_PRIVATE); Editor preferencesEditor = preferences.edit(); preferencesEditor.putString("ga_campaign", source); preferencesEditor.commit(); } // Pass along to google AnalyticsReceiver receiver = new AnalyticsReceiver(); receiver.onReceive(context, intent); } } 

Then, when your application is really running, you can infer the value from the general settings and pass it along with user registration or any other. I used the campaign tag for my purposes, but you can capture any parameters you want from the referrer line created with this tool .

+23
Oct 15 2018-10-18
source share

@DougW answer updated for Google Analytics SDK 4

https://developers.google.com/analytics/devguides/collection/android/v4/campaigns

 import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.util.Log; import com.google.android.gms.analytics.CampaignTrackingReceiver; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.LinkedHashMap; import java.util.Map; /** * Created by dave on 15-05-05. */ public class ReferrerReceiver extends BroadcastReceiver { public static final String REFERRER = "REF"; public static final String UTM_CAMPAIGN = "utm_campaign"; public static final String UTM_SOURCE = "utm_source"; public static final String UTM_MEDIUM = "utm_medium"; public static final String UTM_TERM = "utm_term"; public static final String UTM_CONTENT = "utm_content"; private final String[] sources = { UTM_CAMPAIGN, UTM_SOURCE, UTM_MEDIUM, UTM_TERM, UTM_CONTENT }; @Override public void onReceive(Context context, Intent intent) { Bundle extras = intent.getExtras(); String referrerString = extras.getString("referrer"); try { Map<String, String> getParams = getHashMapFromQuery(referrerString); SharedPreferences preferences = context .getSharedPreferences(REFERRER, Context.MODE_PRIVATE); SharedPreferences.Editor preferencesEditor = preferences.edit(); for (String sourceType : sources) { String source = getParams.get(sourceType); if (source != null) { preferencesEditor.putString(sourceType, source); } } preferencesEditor.commit(); } catch (UnsupportedEncodingException e) { Log.e("Referrer Error", e.getMessage()); } finally { // Pass along to google CampaignTrackingReceiver receiver = new CampaignTrackingReceiver(); receiver.onReceive(context, intent); } } public static Map<String, String> getHashMapFromQuery(String query) throws UnsupportedEncodingException { Map<String, String> query_pairs = new LinkedHashMap<String, String>(); String[] pairs = query.split("&"); for (String pair : pairs) { int idx = pair.indexOf("="); query_pairs.put(URLDecoder.decode(pair.substring(0, idx), "UTF-8"), URLDecoder.decode(pair.substring(idx + 1), "UTF-8")); } return query_pairs; } } 

In manifest file

  <service android:name="com.google.android.gms.analytics.CampaignTrackingService" /> <receiver android:name="com.google.android.gms.analytics.CampaignTrackingReceiver" /> <!-- Make sure this points to the location of Referrer Receiver in your package --> <receiver android:name=".ReferrerReceiver" android:exported="true"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER" /> </intent-filter> </receiver> 
+7
May 05 '15 at 17:30
source share

Check:

Get referrer after installing the application from the Android Market

for solutions.

Tobia

+3
Dec 14 '10 at 13:20
source share



All Articles