##はじめに
Segmentという分析サービスご存じですか?
ユーザーイベントの分析ができるサービスです。うわさはアオリです。が、他のサービスより優れている点として、
- 他の分析サービス(Google analytics, mixpanel, Flurry)と連携が容易。コンソール設定で追加することができる。
- 実装が容易。ほとんどのコールはメソッドチェーンで記述できる。
- 色々なプラットフォーム(Android, iOS, js, etc.)で利用できる。
ことがあります。Adトラッキングやエラートラッキングなど、複数の分析を追加していくと似たようなコードを書いたり、癖のあるApiの実装に困ったりしますが、Segmentを使うことでそれらを全て統合・管理することが可能になります。
今回はAndroidでの導入方法をまとめてみました。
##導入方法
###アカウント作成および分析ツールの設定
1.https://segment.com/へ行き、アカウントを作ります。
2.ログインすると、以下のような管理コンソールに入ることができます。
3.右上のタブからOrganizationの作成とProjectの作成ができます。
4.管理コンソールのIntegrationでは統合したい他の分析サービスが選べます。スイッチを入れると、その分析サービスのAPIやkey情報等、トラッキングに必要な情報の入力を求められます。入力すると、統合が有効になります。なお、各種サービスが提供するSDKをアプリに入れることでも、データを送ることができます。
5.Debuggerでは実際に送付されたデータを確認することができます。
6.SQLでデータを取得することも可能ですが、business planに入らないといけないようです。
7.Project settingからプロジェクト名など各種設定ができます。ここのAPI keysタブにSegmentを利用するためのキーが記載されています。
###Android Studioへの導入
app/配下のbuild.gradleに以下のdependencyを入れるだけで、最新のビルドが入ります。
dependencies {
compile('com.segment.analytics.android:core:+@aar') {
transitive = true
}
compile 'com.google.android.gms:play-services:+'
compile 'com.mixpanel.android:mixpanel-android:+@aar'
}
上のcompileでcoreを指定すると、必要な分析サービスのみ別にコンパイルして導入することができ、サイズの節約ができます。allを指定すると全ての対応している分析サービスが入ります。
###Eclipseへの導入
jarファイルが公開されています。-> https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=com.segment.analytics.android&a=core&v=LATEST
このjarファイルを/lib配下におけば、普通に使えます。
ただし、最新のバージョンより若干updateが遅い&特に告知なくupdateされるので、少し注意が必要です。
基本的にはSegmentが推奨するようにgradleで導入するのがオススメです。
##実装方法
###各種設定
AndroidManifest.xmlに以下の設定を施します。
<!-- Required for internet. -->
<uses-permission android:name="android.permission.INTERNET"/>
以下はオプションですが、android.permission.ACCESS_NETWORK_STATEについては多くの分析サービスが利用するので、合ったほうが良いと思います。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
-permission android:name="android.permission.GET_TASKS"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
res/values/analytics.xmlには設定情報を入れます。
<resources>
<string name="analytics_write_key">YOUR_WRITE_KEY</string>
<string name="analytics_logging">true</string>
<integer name="analytics_queue_size">20</integer>
</resources>
- analytics_write_keyにはコンソール画面で確認したkeyを入力します。
- analytics_loggingはtrueにすると、ログが取れるのですが、Androidに関してはあまり役立つ情報が取れませんでした。iOSでは送付データが見れるようです。
- analytics_queue_sizeはサーバに送るデータキュー数になります。デバッグの時はanalytics_queue_sizeは小さめ(3とか)にしたほうが良かったです。キュー数が大きいとコンソールで確認に時間がかかります。
###実装
各種代表的なメソッドは以下のようになっています。
identify
ユーザーidを特定します。例えば、すでに別端末やPCで会員登録済みである場合に、ログイン後に呼び出すことで、モバイル端末をそのユーザーidに紐付けることができます。
Analytics.with(context).identify(id);
ユーザー名やメールなどもidentifyで紐付けることができるようです。利用規約には注意が必要そうですね。
Analytics.with(context).identify(new Traits().putName("Michael Bolton"));
Analytics.with(context).identify(new Traits().putEmail("mbolton@initech.com"));
Alias
新規会員登録時に呼び出して、新規会員登録するまでのイベントを新規会員情報と紐付けます。
統合する分析サービスとしてMixpanelを利用する際に必要な機能になります。
新規会員登録する前にuuidなどでidentify
していた場合は、それを結びつけることも可能です。
Analytics.with(context).alias(uuid, new_id);
注意事項として、Mixpanelでは新しい会員に紐付けられるイベント履歴は1つだけです。そのため、alias
は新規会員登録時のみで1度だけ呼ぶ必要があります。
Track
Segmentではかなり柔軟にトラッキング情報を取得できます。
トラッキング情報にプロパティを添付したい場合は、propertiesクラスでキーとバリューを設定してあげます。
//トラッキング情報を送りたい場合
Analytics.with(context).track(trackName);
//プロパティ情報も送りたい場合
Properties properties = new Properties()
.putValue("price", price)
.putValue("category", CategoryId); //object型なのでなんでもいける
Analytics.with(context).track(trackName, properties);
Options
こっちの分析サービスでは情報取得したいけど、あっちの分析サービスでは取得したくなよ、ということもありますよね。そういう場合はOptionsで詳細に設定できます。
// Mixpanel は分析しない
Options options = new Options().setIntegration("Mixpanel", false);
analytics.track("Viewed Item", new Properties(), options);
##参考:取得データ
取得したデータは以下のようにjson形式となっています。かなり詳細な端末情報が取得できています。
{
"timestamp": "2014-11-20T06:37:52.000Z",
"userId": "6a82225c-9c7b-4514-b06c-8257a5bd7041",
"anonymousId": "6a82225c-9c7b-4514-b06c-8257a5bd7041",
"event": "Hoge",
"context": {
"traits": {
"userId": "6a82225c-9c7b-4514-b06c-8257a5bd7041",
"anonymousId": "6a82225c-9c7b-4514-b06c-8257a5bd7041"
},
"userAgent": "Dalvik/1.6.0 (Linux; U; Android 4.4.2; SCL23 Build/KOT49H)",
"app": {
//略
},
"device": {
"manufacturer": "samsung",
"name": "SCL23",
"id": "b0fd050f313d8b4b",
"model": "SCL23",
"type": "android"
},
"os": {
"version": "4.4.2",
"name": "REL",
"sdk": 19
},
"timezone": "Asia/Tokyo",
"network": {
"wifi": true,
"bluetooth": false,
"cellular": false,
"carrier": "SoftBank"
},
//略
},
}
##注意点
開発が盛んなようで、頻繁にupdateがかかっています。例えばalias
はjar(2.1.10)とgradle(2.4.1)で引数の順番が反対になっていたりします。
ライブラリをupdateする際は変更がどうなったか彼らのDeveloperBlog(https://segment.com/blog/)で把握する必要があります。