0

Tích Hợp Google Analytics V4 Trong Ứng Dụng Android

Bạn đã bao giờ tự hỏi làm thế nào để theo dõi người dùng Android đang active ứng dụng của bạn trong thời gian thực chưa?

Trong bài viết hôm nay tôi sẽ giúp bạn trả lời câu hỏi đó. Để theo dõi người dùng đang active ứng dụng của bạn có thể được làm bằng cách sử dụng nhiều tool analytic. Có nhiều Tool giống như là Mixpanel, Flurry etc .Để theo dõi người dùng đang active ứng dụng trong thời gian thực nhưng không phải tất cả những tool này là hoàn toàn free.

Google Analytics là một service mạnh mẽ với những tính năng tuyệt vời giống như đếm số người dùng active trong thời gian thực, theo dõi các event, theo dõi geo,báo cáo error,crash và còn rất nhiều tính năng nữa, đặc biết nó hoàn toàn Free.

Trong bài viết này tôi sẽ hướng dẫn làm thế nào để tích hợp Google Analytics vào trong ứng dụng Android của bạn. Mặc dùng Google Analytics cung cấp một nó lượng lớn các tính năng phân tích, nhưng tôi dự dịnh sẽ chỉ cover những tính năng thực sự cần thiết chỗ mỗi ứng dụng.

Bên dưới là ảnh chụp màn hình theo thời gian thực để thống kê số lượng người dùng đang mở app.

android-google-analytics-real-time-users.png

1. Tạo Các Thuộc Tính Google Analytics

Google Analytics cần một Tracking ID, nó là một định danh cho mỗi ứng dụng. Bên dưới là các bước cần thiết để nhận được Tracking ID.

  • Đăng nhập với Google Analytics account
  • Lựa chọn Admin tab
  • Trong ACCOUNT sổ xuống, click trên Create new account
  • Lựa chọn Mobile App
  • Nhập App Name
  • Lựa chọn Industry Category & Report Time Zone và click Get Tracking ID.
  • Trong màn hình tiếp theo ban sẽ hiển thị thuộc tính Tracking ID Tracking ID sẽ giống như này UA-XXXXXXXX-X. Chú ý Tracking ID sẽ cần trong ứng dụng android của bạn.

android-creating-google-analytics-property.png

2. Tạo Ứng Dụng Android

Khi bạn đã có được Tracking ID, chúng ta hãy bắt đầu tạo một project android trong android studio. Chúng tôi sẽ chỉ tạo 1 ứng dụng với giao diện người dùng đơn giản dùng cho mục đích test.

  • Trong Android Stuidio tạo một project mới **File => New Project ** và điền tất cả những thông tin cần thiết. khi bạn được yêu cầu lựa chọn Activity default thì lựa chọn Blank Activity và tiếp tục.
  • Tạo 2 package name là activityapp để tổ chức code trong ứng dụng của bạn.
  • Mở strings.xml bên dưới res=> values và thêm những giá trị bên dưới.
<resources>
    <string name="app_name">Google Analytics</string>
    <string name="action_settings">Settings</string>
    <string name="title_activity_second">Second Activity</string>
    <string name="toast_track_exception">Exception is recorded. Check the Crashes and Exceptions on Google Dashboard!</string>
    <string name="toast_app_crash">The app will crash now! Check the Crashes and Exceptions on Google Dashboard!</string>
    <string name="fragment_footer">Fragment is loaded! Check the screen view on Google Analytics Dashboard.</string>
    <string name="msg_instructions">Click on each button to see the appropriate tracking on Google Analytics</string>
    <string name="btn_second_screen">Second Screen</string>
    <string name="btn_send_event">Track Event</string>
    <string name="btn_exception_tracking">Track Exception</string>
    <string name="btn_app_crash">Track App Crash</string>
    <string name="btn_load_fragment">Fragment Tracking</string>
</resources>

. Mở Colors.xml bên dưới res => values và thêm những giá trị bên dưới, nếu bạn chưa có hãy tạo một file mới.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#FF6D00</color>
    <color name="colorPrimaryDark">#FF6D00</color>
    <color name="textColorPrimary">#FFFFFF</color>
    <color name="windowBackground">#FFFFFF</color>
    <color name="navigationBarColor">#000000</color>
    <color name="colorAccent">#FFD180</color>
    <color name="btnBackground">#e7e7e7</color>
</resources>

3 Tích Hợp Google Analytic Vào Trong APP

  • Mở build.gradle đặt dưới folder app và add google analytic trong dependency
 dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.google.android.gms:play-services-analytics:7.3.0'
}
  • Tạo folder tên là xml bên dưới res. Bên trong folder xml tạo một file xml có tên app_tracker.xml và thêm những config như bên dưới
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- End current session if app sleeps for a period of time -->
    <integer name="ga_sessionTimeout">300</integer>

    <!-- Enable automatic Activity measurement -->
    <bool name="ga_autoActivityTracking">true</bool>

    <!--  The property id associated with this analytics tracker -->
    <string name="ga_trackingId">UA-58121605-1</string>

    <string name="ga_sampleFrequency">100.0</string>

    <bool name="ga_reportUncaughtExceptions">true</bool>

    <!--
      See Project Structure -> Analytics -> Google Analytics -> Learn More
      to learn more about configuring this file.
    -->
</resources>

Đảm bảo rằng bạn đã thay thế ga_trackingid bằng Tracking ID của bạn

  • Bên dưới package nameapp tạo một class mới tên AnalyticsTrackers.java với code bên dưới.
public final class AnalyticsTrackers {

    public enum Target {
        APP,
        // Add more trackers here if you need, and update the code in #get(Target) below
    }

    private static AnalyticsTrackers sInstance;

    public static synchronized void initialize(Context context) {
        if (sInstance != null) {
            throw new IllegalStateException("Extra call to initialize analytics trackers");
        }

        sInstance = new AnalyticsTrackers(context);
    }

    public static synchronized AnalyticsTrackers getInstance() {
        if (sInstance == null) {
            throw new IllegalStateException("Call initialize() before getInstance()");
        }

        return sInstance;
    }

    private final Map<Target, Tracker> mTrackers = new HashMap<Target, Tracker>();
    private final Context mContext;

    /**
     * Don't instantiate directly - use {@link #getInstance()} instead.
     */
    private AnalyticsTrackers(Context context) {
        mContext = context.getApplicationContext();
    }

    public synchronized Tracker get(Target target) {
        if (!mTrackers.containsKey(target)) {
            Tracker tracker;
            switch (target) {
                case APP:
                    tracker = GoogleAnalytics.getInstance(mContext).newTracker(R.xml.app_tracker);
                    break;
                default:
                    throw new IllegalArgumentException("Unhandled analytics target " + target);
            }
            mTrackers.put(target, tracker);
        }

        return mTrackers.get(target);
    }
}
  • Tạo một class tên là **MyApplication.java ** bên dưới package app Trong class này có các phương thước quan trọng là trackScreenView(), trackException(), trackEvent().
public class MyApplication extends Application {
    public static final String TAG = MyApplication.class
            .getSimpleName();

    private static MyApplication mInstance;

    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;

        AnalyticsTrackers.initialize(this);
        AnalyticsTrackers.getInstance().get(AnalyticsTrackers.Target.APP);
    }

    public static synchronized MyApplication getInstance() {
        return mInstance;
    }

    public synchronized Tracker getGoogleAnalyticsTracker() {
        AnalyticsTrackers analyticsTrackers = AnalyticsTrackers.getInstance();
        return analyticsTrackers.get(AnalyticsTrackers.Target.APP);
    }

    /***
     * Tracking screen view
     *
     * @param screenName screen name to be displayed on GA dashboard
     */
    public void trackScreenView(String screenName) {
        Tracker t = getGoogleAnalyticsTracker();

        // Set screen name.
        t.setScreenName(screenName);

        // Send a screen view.
        t.send(new HitBuilders.ScreenViewBuilder().build());

        GoogleAnalytics.getInstance(this).dispatchLocalHits();
    }

    /***
     * Tracking exception
     *
     * @param e exception to be tracked
     */
    public void trackException(Exception e) {
        if (e != null) {
            Tracker t = getGoogleAnalyticsTracker();

            t.send(new HitBuilders.ExceptionBuilder()
                            .setDescription(
                                    new StandardExceptionParser(this, null)
                                            .getDescription(Thread.currentThread().getName(), e))
                            .setFatal(false)
                            .build()
            );
        }
    }

    /***
     * Tracking event
     *
     * @param category event category
     * @param action   action of the event
     * @param label    label
     */
    public void trackEvent(String category, String action, String label) {
        Tracker t = getGoogleAnalyticsTracker();

        // Build and send an Event.
        t.send(new HitBuilders.EventBuilder().setCategory(category).setAction(action).setLabel(label).build());
    }

}
  • Mở AndroidManifest.xml và làm những thay đổi như bên dưới.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="info.androidhive.googleanalytics">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:name=".app.MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name">
        <activity
            android:name=".activity.MainActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!--
          Optionally, register AnalyticsReceiver and AnalyticsService to support background
          dispatching on non-Google Play devices
        -->
        <receiver
            android:name="com.google.android.gms.analytics.AnalyticsReceiver"
            android:enabled="true">
            <intent-filter>
                <action android:name="com.google.android.gms.analytics.ANALYTICS_DISPATCH" />
            </intent-filter>
        </receiver>

        <service
            android:name="com.google.android.gms.analytics.AnalyticsService"
            android:enabled="true"
            android:exported="false" />

        <!--
             Optionally, register CampaignTrackingReceiver and CampaignTrackingService to enable
             installation campaign reporting
        -->
        <receiver
            android:name="com.google.android.gms.analytics.CampaignTrackingReceiver"
            android:exported="true">
            <intent-filter>
                <action android:name="com.android.vending.INSTALL_REFERRER" />
            </intent-filter>
        </receiver>

        <service android:name="com.google.android.gms.analytics.CampaignTrackingService" />
    </application>
 </manifest>

Giờ chúng ta đã set up xong Google Analytics. Bây giờ nếu bạn chạy ứng dụng , bạn lên nhìn thấy người dùng đầu tiên trên Google Analytic. Chú ý là bạn sẽ không thể nhìn thấy ngay được vì có 1 chút delay cho việc analytics, bạn phải chờ 2 -> 5 phút.

android-google-analytics-tracking-activity.png

  • Bây giờ tôi sẽ tạo 1 giao diện người dùng đơn giản như bên dưới (phần tạo giao diện này đơn giản nên tôi không trình bày ở đây) android-google-analytics-app-tutorial.png

  • Theo dõi Activity Việc Tracking Activity rất đơn giản bạn chỉ cần gọitrackScreenView() trong onResume method trên Activity

MyApplication.getInstance().trackScreenView("Home Screen");

android-google-analytics-tracking-activity-1.png

  • Theo dõi Event Việc tracking Event cho phép bạn lưu bất kỳ những tương tác của người dùng bên trong app. Việc tương tác có thể là bât kỳ cái gì ví dụ như khi người dùng nhấn vào button, hay lựa chọn một item trong spinner... Tracking Event có 4 parameters: Category, Action, Label, Value. Bên dưới là một ví dụ đơn giản khi người dùng nhấn vào button download.
MyApplication.getInstance().trackEvent("Book", "Download", "Track event example");

Mở MainActivity.java và add đoạn code như bên dưới và gọi method trackEvent() để theo dõi event.

**
* Event tracking
* Event(Category, Action, Label)
*/
btnSendEvent.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        // Tracking Event
        MyApplication.getInstance().trackEvent("Book", "Download", "Track event example");

        Toast.makeText(getApplicationContext(), "Event \'Book\' \'Download\' \'Event example\' is sent. Check it on Google Analytics Dashboard!", Toast.LENGTH_LONG).show();
    }
});

Chạy ứng dụng và nhấn button Track Event. Trên Google Analytics dashboard click Events để nhìn những sự kiện được gửi tới app.

android-google-analytics-tracking-event.png

  • Theo dõi Exception Exeption có thể được theo dõi rất đễ dàng. Điều này cho phép chúng tôi biết tất cả những exception , những cái này đã được băt trong khối lệnh try/catch Mở MainActivity.java và thêm những dòng code như bên dưới. Trong đoạn code này tôi sẽ record một null pointer exception đang sử dụng trong khối try catch. Gội trackExcepiton() method.
btnException.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        try {
                String name = null;
                if (name.equals("ravi")) {
                    /* Never comes here as it throws null pointer exception */
                }
            } catch (Exception e) {
                // Tracking exception
                MyApplication.getInstance().trackException(e);

                Toast.makeText(getApplicationContext(), getString(R.string.toast_track_exception), Toast.LENGTH_LONG).show();

                Log.e(TAG, "Exception: " + e.getMessage());
        }
    }
});

Bây giờ chậy app và nhấn vào button Track Exception. Có thể bạn sẽ không thể nhìn thấy record exception này ngay, thường nó sẽ cần 1 ngày để thống kê trên Google Analytic dashboard. Để nhìn thấy exceiption , Behaviour => Crashes and Exception trên Google Analytics. android-google-analytics-tracking-app-crash.png

  • Theo dõi ứng dụng Crash ỨNG dụng bị crash say ra trong nhiều trường hợp chúng ta không biết được nguyên nhân. Việc tự động lưu lại Crash App được thực hiện tự động bằng cách thiếpt lập ga_reportUncaughtExceptionstrue trong app_tracker.xml file. Bây giờ tôi sẽ làm cho app bị crash như bên dưới. Mở MainActivity.java và thêm đoạn code bên dưới.
btnAppCrash.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        Toast.makeText(getApplicationContext(), getString(R.string.toast_app_crash), Toast.LENGTH_LONG).show();

        Runnable r = new Runnable() {
            @Override
            public void run() {
                int answer = 12 / 0;
            }
        };

        Handler h = new Handler();
        h.postDelayed(r, 1500);
    }
});

Bây giờ chạy ứng dụng và nhấn vào button Track APP Crash. Tới Behavior => Crashes And Exception trên dashboard và nhìn các execption sảy ra. Việc thống kê Crash cũng có thể được update sau 1 ngay. android-google-analytics-tracking-exception.png

Tôi hi vọng bài viết này sẽ cho bạn 1 điểm bắt đầu tốt với Gooogle Analytics SDKV4.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí