如何在android中自动收集按钮点击的分析事件?

时间:2016-02-08 09:14:05

标签: android google-analytics

我必须在android

中实现自动事件跟踪

需要自动收集所有按钮点击和网页浏览量的分析数据,但必须以通用方式完成,这样我就不需要为每次点击再次编写Google Analytics代码。

示例:我的活动中有2个按钮,每个按钮都有一个点击监听器。现在我想调用Analytics.track(String buttonName),这样我就不必在每个点击监听器中添加它。应在跟踪中传递的数据是按钮名称。

3 个答案:

答案 0 :(得分:0)

这样做(可能不是最终方式)可以是Button(或View),并将分析代码放入View#performClick()方法。

对于buttonName,它可以是自定义View类的字段,您可以通过编程方式设置,甚至可以通过XML自定义属性设置。

全球实施:

  • 创建自定义XML attribut:在ressource文件夹中创建名为attrs.xml的文件:

    <resources>
        <declare-styleable name="tracking">
            <attr name="tracking_name" format="string" />
        </declare-styleable>
    </resources>
    
  • 创建一个自定义Button(或View)类,覆盖performClick()方法并使用XML自定义属性或集合中的字符串调用Analytics.track()以编程方式:

    public class TrackedClickButton extends Button {
    
        private String mTrackingName;
    
        public TrackedClickButton(Context context) {
            super(context);
        }
    
        public TrackedClickButton(Context context, AttributeSet attrs) {
            super(context, attrs);
            init(context, attrs);
        }
    
        public TrackedClickButton(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            init(context, attrs);
        }
    
        @TargetApi(21)
        public TrackedClickButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
            super(context, attrs, defStyleAttr, defStyleRes);
            init(context, attrs);
        }
    
        private void init(Context context, AttributeSet attrs) {
            TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.tracking);
    
            if (array.hasValue(R.styleable.tracking_name)) {
                mTrackingName = array.getString(R.styleable.tracking_name);
            }
        }
    
        public void setTrackingName(String trackingName) {
            this.mTrackingName = trackingName;
        }
    
        @Override
        public boolean performClick() {
            //Make sure the view has an onClickListener that listened the click event,
            //so that we don't report click on passive elements
            boolean clickHasBeenPerformed = super.performClick();
            if(clickHasBeenPerformed && mTrackingName != null) {
                Analytics.track(mTrackingName);
            }
            return clickHasBeenPerformed;
        }
    }
    
  • 在想要跟踪事件的任何地方使用新课程,例如在布局文件中:

    <com.heysolutions.dentsply.Activites.MainActivity.TrackedClickButton
        xmlns:tracking="http://schemas.android.com/apk/res-auto"
        android:id="@+id/button"
        android:layout_width="50dp"
        android:layout_height="50dp"
        tracking:tracking_name="buttonTrackingName"/>
    

再一次,这是一种方式,可能是其他一些更简单/更好/更好的实施方式:)

答案 1 :(得分:0)

在Kotlin中创建您自己的clickListener。 在此示例中,我放置了一个debounceTime变量以防止双击:

fun View.clickAndTrack(debounceTime: Long = 500L, action: () -> Unit) {
    this.setOnClickListener(object : View.OnClickListener {
        private var lastClickTime: Long = 0
        override fun onClick(v: View) {
            if (SystemClock.elapsedRealtime() - lastClickTime < debounceTime) return
            else {
                // do your Analytics action here
                action()
            }
            lastClickTime = SystemClock.elapsedRealtime()
        }
    })
}

答案 2 :(得分:0)

您可以使用Activity#dispatchTouchEvent(android.view.MotionEvent)拦截触摸事件。