简体   繁体   English

在Android服务应用程序中使用Google Analytics(分析)

[英]Using Google Analytics in Android service application

I would like to implement Google Analytics in an Android service based application. 我想在基于Android服务的应用程序中实现Google Analytics(分析)。 The application has a home screen widget and I would like to keep track of certain usage trends. 该应用程序有一个主屏幕小部件,我想跟踪某些使用趋势。 Do I have to use an Application, as indicated in most of the examples? 如大多数示例所示,我是否必须使用应用程序? Can't I just use a static variable that will hold the tracker and use it to 'send' info to Google Analytics? 我是否只能使用将跟踪器保存起来并使用它来将信息“发送”到Google Analytics(分析)的静态变量? Is the Analytics service not working without the reportActivityStart and reportActivityStop calls? 没有reportActivityStart和reportActivityStop调用,Analytics服务是否无法正常工作? I have tried what I have described, I can see the GAV4 logcat output and everything seems to work properly - no errors at all (and DryMode is not set) but I do not see any info on the Google Analytics website. 我已经尝试了我描述的内容,可以看到GAV4 logcat的输出,并且一切似乎都可以正常工作-完全没有错误(并且未设置DryMode),但是我在Google Analytics(分析)网站上看不到任何信息。

Here is the code for the class that handles the logging: 这是处理日志的类的代码:

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

Here are the calls to the class for logging an action or a page view, from the home screen service: 以下是从主屏幕服务记录用于记录操作或页面视图的类的调用:

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

Try below code : 试试下面的代码:

MyApplication 我的应用程序

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

     }
  }

Send Screen Views in Activity as : 在“活动”中以以下方式发送屏幕视图:

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

Send Event [onClick of any view] 发送事件[任何视图的onClick]

tvOpt1.setOnClickListener(new OnClickListener() {

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

Below is Screenshot for event click in real time tab on GA dashboard 以下是GA信息中心上的“实时”标签中的事件点击的屏幕截图

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM