【问题标题】:Using Google Analytics in Android service application在 Android 服务应用程序中使用 Google Analytics
【发布时间】:2015-02-13 18:11:39
【问题描述】:

我想在基于 Android 服务的应用程序中实施 Google Analytics。该应用程序有一个主屏幕小部件,我想跟踪某些使用趋势。如大多数示例所示,我是否必须使用应用程序?我不能只使用一个静态变量来保存跟踪器并使用它将信息“发送”到谷歌分析吗?如果没有 reportActivityStart 和 reportActivityStop 调用,Analytics 服务是否无法工作?我已经尝试了我所描述的,我可以看到 GAV4 logcat 输出并且一切似乎都正常工作 - 根本没有错误(并且没有设置 DryMode)但我在 Google Analytics 网站上看不到任何信息。

这是处理日志记录的类的代码:

public class AnalyticsHelper {

    private static final String PROPERTY_ID = "UA-xxxxxx-xx";

    public enum TrackerName {
        APP_TRACKER, // Tracker used only in this app.
        GLOBAL_TRACKER // Tracker used by all the apps from a company. eg: roll-up tracking.
    }

    static HashMap<TrackerName, Tracker> mTrackers = new HashMap<TrackerName, Tracker>();

    synchronized private static Tracker getTracker(TrackerName trackerId) {
        if (!mTrackers.containsKey(trackerId)) { 

            GoogleAnalytics analytics = GoogleAnalytics.getInstance(WidgetHelper.context); 
            analytics.setDryRun(false);
            Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics.newTracker(R.xml.app_tracker) : analytics.newTracker(PROPERTY_ID);
                    mTrackers.put(trackerId, t);
        }

        return mTrackers.get(trackerId); 
    }

    public static void sendView(String screenName) {
        Tracker t = getTracker(TrackerName.APP_TRACKER); 
        if (t != null) { 
            t.setScreenName(screenName); 
            t.send(new HitBuilders.AppViewBuilder().build());
        }
    }

    public static void sendAction(String category, String action, String label, int value) {
        Tracker t = getTracker(TrackerName.APP_TRACKER); 
        if (t != null) { 
            t.send(new HitBuilders.EventBuilder()
        .setCategory(category)
        .setAction(action) 
        .setLabel(label) 
        .setValue(value) 
        .build());
        }
    }
}

以下是从主屏幕服务调用类以记录操作或页面视图:

AnalyticsHelper.sendAction("Service", "Update", "", 0);
...
AnalyticsHelper.sendView("Settings");

【问题讨论】:

  • 您可以发布您尝试向 GA 发送信息的代码吗?
  • 我已经用代码更新了我的问题。与此同时,我注意到大约 24 小时后,我可以在 Google Analytics 网站上看到一些统计数据。数据出现需要那么长时间吗?如果是这样,那么实时功能呢?它总是显示 0 个活跃用户(请注意,我是唯一使用该应用程序的用户,所以我应该看到 1 而不是 0)。
  • 如果您有新帐户,是的,大约需要 24 小时才能开始使用,而实时数据至少需要 1 分钟才能显示

标签: android analytics


【解决方案1】:

试试下面的代码:

我的应用程序

public class MyApplication extends Application {

    private static final String PROPERTY_ID = "UX-XXXXXXXX-Y";
    private static final String TAG = "MyApp";
    public static int GENERAL_TRACKER = 0;
    private static Context mContext;

    public enum TrackerName {
        APP_TRACKER, GLOBAL_TRACKER, ECOMMERCE_TRACKER,
    }

    HashMap<TrackerName, Tracker> mTrackers = new HashMap<TrackerName, Tracker>();

    @Override
    public void onCreate() {
        super.onCreate();
        mContext = getApplicationContext();
    }

    public static Context getContext() {
        return mContext;
    }

    public MyApplication() {
        super();
    }

   public synchronized Tracker getTracker(TrackerName trackerId) {
        if (!mTrackers.containsKey(trackerId)) {

            GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
            Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics
                    .newTracker(R.xml.app_tracker)
                    : (trackerId == TrackerName.GLOBAL_TRACKER) ? analytics
                            .newTracker(PROPERTY_ID) : analytics
                            .newTracker(R.xml.global_tracker);
            mTrackers.put(trackerId, t);

        }
        return mTrackers.get(trackerId);
    }
}

GoogleAnalyticsHelper

public class GoogleAnalyticsHelper {

private Tracker mGaTracker = null;
private static String TAG = "GoogleAnalyticsHelper";


public GoogleAnalyticsHelper()    
{

}
public void init(Context ctx) {
    try {

        if (mGaTracker == null && ctx != null)
        {
            mGaTracker = GoogleAnalytics.getInstance(ctx).newTracker(Constant.PROPERTY_ID);
        }
    } catch (Exception e) {
        Log.d(GoogleAnalyticsHelper.TAG,"init, e="+e);
    }
}

public void SendScreenNameGoogleAnalytics(String screenName, Context iCtx)
{
    init(iCtx);

    mGaTracker.setScreenName(screenName);
    mGaTracker.send(new HitBuilders.AppViewBuilder().build());

}


public void SendEventGoogleAnalytics(Context iCtx,String iCategoryId, String iActionId, String iLabelId)
{
    init(iCtx);

        // Build and send an Event.
        mGaTracker.send(new HitBuilders.EventBuilder()
            .setCategory(iCategoryId)
            .setAction(iActionId)
            .setLabel(iLabelId)
            .build());

     }
  }

将 Activity 中的屏幕视图发送为:

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragmentactivity_kc_test);
        InitGoogleAnalytics();
    }

private void InitGoogleAnalytics()
    {           
        mGoogleHelper = new GoogleAnalyticsHelper();        
        mGoogleHelper.init(FragmentActivity_DashBoard.this);      
    }

    private void SendScreenNameGoogleAnalytics()
    {

        mGoogleHelper.SendScreenNameGoogleAnalytics("FragmentActivity_DashBoard",FragmentActivity_DashBoard.this);
    }

发送事件 [onClick of any view]

tvOpt1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                SendEventGoogleAnalytics("Button", "on click of test option1",
                        "test option1 clicked");
            }
        });

以下是 GA 仪表板上实时选项卡上的事件点击屏幕截图

【讨论】:

  • 谢谢。我已经尝试了上面的代码并进行了一些修改,它可以工作。我基本上把所有的代码都移到了 Helper 类中并去掉了 MyApplication 类(因为它所做的只是创建了 helper 类)。我所做的是创建 GaHelper 对象,然后调用 sendView 或 sendEvent 函数。我之前的方法是一直在内存中保留一个活动的辅助对象,并从任何地方调用它。不知道是不是这个问题。
猜你喜欢
  • 2012-08-29
  • 2014-09-07
  • 2023-03-22
  • 2012-11-08
  • 1970-01-01
  • 2012-09-04
  • 1970-01-01
  • 1970-01-01
  • 2012-04-09
相关资源
最近更新 更多