Get Android Google Analytics referrer tag

后端 未结 3 1340
别跟我提以往
别跟我提以往 2020-11-29 02:52

We\'re planning to use Google Analytics to track ad click-through referrals, through the Android Market, to our application.

According to the Google Documentation th

相关标签:
3条回答
  • 2020-11-29 03:46

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

    So instead, I registered only my own receiver, process the information, and pass it along to Google Analytics. Don't know how kosher this is, but it works. Code follows.

    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 actually launched, you can pull the value back out of the shared preferences and pass it along with user signup or whatever. I used the campaign tag for my purposes, but you can grab any parameters you want out of the referrer string created with this tool.

    0 讨论(0)
  • 2020-11-29 03:49

    Check at:

    Get referrer after installing app from Android Market

    for the solutions.

    Tobia

    0 讨论(0)
  • 2020-11-29 03:54

    @DougW 's answer updated for 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 you 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>
    
    0 讨论(0)
提交回复
热议问题