🌏

Google AnalyticsをJetpack Comopseで使う

2024/04/27に公開

🤔やってみたいこと

Jetpack Comoseで、Google Analyticsを使う方法が紹介されている情報が、公式ドキュメントのソースコードしか見当たらなかった😇

https://firebase.google.com/docs/analytics/get-started?hl=ja&platform=android

Google Analyticsってそもそも何ができるのか?

公式によると ...

このクイックスタートでは、アプリに Google アナリティクスを追加し、イベントのロギングを始める方法について説明します。

Google アナリティクスは、アプリの使用状況や動作に関するデータを収集します。この SDK は主に次の 2 種類の情報を記録します。

  • イベント: ユーザーの操作、システム イベント、エラーなど、アプリで起こっていること。
  • ユーザー プロパティ: 言語や地理的位置など、ユーザー層を示す属性。自由に定義できます。

アナリティクスでは、一部のイベントとユーザー プロパティが自動的にロギングされます。こうしたロギングを有効にするコードを追加する必要はありません。

🚀やってみたこと

build.gradle.ktsに、Firebaseのライブラリを追加する。

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("com.google.gms.google-services")
    // 追加
    id("com.google.firebase.crashlytics")
}

android {
    namespace = "com.example.firebasecrashlog"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.example.firebasecrashlog"
        minSdk = 24
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
        vectorDrawables {
            useSupportLibrary = true
        }
    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
    buildFeatures {
        compose = true
    }
    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.1"
    }
    packaging {
        resources {
            excludes += "/META-INF/{AL2.0,LGPL2.1}"
        }
    }
}

dependencies {

    implementation("androidx.core:core-ktx:1.12.0")
    implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0")
    implementation("androidx.activity:activity-compose:1.8.2")
    implementation(platform("androidx.compose:compose-bom:2023.08.00"))
    implementation("androidx.compose.ui:ui")
    implementation("androidx.compose.ui:ui-graphics")
    implementation("androidx.compose.ui:ui-tooling-preview")
    implementation("androidx.compose.material3:material3")
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.1.5")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
    androidTestImplementation(platform("androidx.compose:compose-bom:2023.08.00"))
    androidTestImplementation("androidx.compose.ui:ui-test-junit4")
    debugImplementation("androidx.compose.ui:ui-tooling")
    debugImplementation("androidx.compose.ui:ui-test-manifest")
    // Firebaseの依存関係を追加
    implementation(platform("com.google.firebase:firebase-bom:32.8.0"))
    implementation("com.google.firebase:firebase-analytics-ktx")
}

MainActivity.ktに、公式のGithubのサンプルコードを参考に、コードを書いてみたが、Composableにパラメーターをつけないと、firebaseAnalyticsのインスタンスを渡すことができなかった。

Example Code
package com.example.firebasecrashlog

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.example.firebasecrashlog.ui.theme.FirebaseCrashlogTheme
import com.google.firebase.Firebase
import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.analytics.analytics

class MainActivity : ComponentActivity() {
    // [START declare_analytics]
    private lateinit var firebaseAnalytics: FirebaseAnalytics
    // [END declare_analytics]
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            // [START shared_app_measurement]
            // Obtain the FirebaseAnalytics instance.
            firebaseAnalytics = Firebase.analytics
            // [END shared_app_measurement]
            FirebaseCrashlogTheme {
                // A surface container using the 'background' color from the theme
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    Greeting("Android", firebaseAnalytics)
                }
            }
        }
    }
}

@Composable
fun Greeting(name: String, firebaseAnalytics: FirebaseAnalytics, modifier: Modifier = Modifier) {
    Box(modifier = Modifier.fillMaxSize(), contentAlignment = androidx.compose.ui.Alignment.Center) {
        Button(onClick = {
            // ユーザーがボタンを押したかログをとる
            val bundle = Bundle().apply {
                putString(FirebaseAnalytics.Param.ITEM_ID, "click_button")
                putString(FirebaseAnalytics.Param.ITEM_NAME, "Click Button")
                putString(FirebaseAnalytics.Param.CONTENT_TYPE, "button")
            }
            firebaseAnalytics.logEvent(FirebaseAnalytics.Event.SELECT_ITEM, bundle)
        }) {
            Text(text = "Click mi")
        }
    }
}

@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
    FirebaseCrashlogTheme {
        // Greeting("Android") // PreviewではFirebaseAnalyticsを利用できないため、この行はコメントアウトします
    }
}

ビルドして、ボタンを押してみる。

時間が経つと、イベントが起きてログを収集することができた🙌

🙂最後に

今回は、Firebaseのサービスである Google AnalyticsをJetpack Compose で使用して、ボタンをタップするイベントが発生したらログを収集する機能を実装してみました。Google Analyticsを組み込むことで、どれぐらいのユーザーがアプリを使用しているか情報を収集することができるので、マーケティングに生かされているようです。

Discussion