【问题标题】:Get Android Google Analytics referrer tag获取 Android Google Analytics(分析)引荐来源网址标签
【发布时间】:2010-09-28 21:01:59
【问题描述】:

我们计划使用 Google Analytics 来跟踪通过 Android Market 到我们应用程序的广告点击推荐。

根据Google Documentation,referrer 标签是通过意图传递的,并由 Google Analytics(分析)库自动记录。

这很好,但我们需要提取该推荐标签以进行我们自己的内部分析。该文档没有详细说明如何从初始启动意图中获取它,以及如何在上线之前模拟它的说明。

有人有这方面的经验吗?

【问题讨论】:

    标签: android google-analytics google-play


    【解决方案1】:

    我继续并发布了一个坏点查找器应用程序来窥探意图。出于某种原因,当我注册了两个不同的广播接收器(即 com.google.android.apps.analytics.AnalyticsReceiver 和我自己的)时,我从来没有自己收到过。

    因此,我注册了我自己的接收器,处理信息,并将其传递给 Google Analytics。不知道这是多么洁净,但它有效。代码如下。

    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);
        }
    
    }
    

    然后,当您的应用程序实际启动时,您可以将值从共享首选项中提取出来,并将其与用户注册或其他内容一起传递。我将广告系列标签用于我的目的,但您可以从创建的引荐来源字符串with this tool 中获取您想要的任何参数。

    【讨论】:

    • 多个接收器不起作用的原因是您不能为同一个意图过滤器注册多个接收器。这就是这里令人困惑的文档的重点——code.google.com/apis/analytics/docs/mobile/…——这似乎是说你在应用程序中不能有超过一个 any 类型的 BroadcastReceiver,这当然不是真的.
    • @DaveSims - 是的,他们在我发表这篇文章很久之后添加了该注释。虽然不是特别清楚,但我同意。
    • @DougW 我的问题是我怎样才能从这个链接“market.android.com/…”referre=bb 假设我在清单代码中添加了这个 com.google.android.apps 的默认 google 的四行.analytics.AnalyticsReceiver 我需要在我的代码中添加任何额外内容
    • @Khan - Hey Khan,我建议你把这个作为一个新问题来问。在这里的 cmets 中回答有点复杂。
    • @DougW 如果我用 Play 商店而不是浏览器打开链接,我会得到参考代码,我的问题也在 stackoverflow.com/questions/10431018/…
    【解决方案2】:

    @DougW 为 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;
        }
    
    }
    

    在你的清单文件中:

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

    【讨论】:

    • 使用 getHashMapFromQuery 真的可以吗?难道没有更官方的方式来解析referrer字符串吗?
    【解决方案3】:

    查看:

    Get referrer after installing app from Android Market

    为解决方案。

    托比亚

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 2017-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多