38
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

うわさの分析サービス Segment(旧Segment.IO)の使い方をまとめてみたよ

Posted at

##はじめに
Segmentという分析サービスご存じですか?
ユーザーイベントの分析ができるサービスです。うわさはアオリです。が、他のサービスより優れている点として、

  • 他の分析サービス(Google analytics, mixpanel, Flurry)と連携が容易。コンソール設定で追加することができる。
  • 実装が容易。ほとんどのコールはメソッドチェーンで記述できる。
  • 色々なプラットフォーム(Android, iOS, js, etc.)で利用できる。

ことがあります。Adトラッキングやエラートラッキングなど、複数の分析を追加していくと似たようなコードを書いたり、癖のあるApiの実装に困ったりしますが、Segmentを使うことでそれらを全て統合・管理することが可能になります。
今回はAndroidでの導入方法をまとめてみました。

##導入方法
###アカウント作成および分析ツールの設定
1.https://segment.com/へ行き、アカウントを作ります。

2.ログインすると、以下のような管理コンソールに入ることができます。
スクリーンショット 2014-11-13 12.45.35.png

3.右上のタブからOrganizationの作成とProjectの作成ができます。

4.管理コンソールのIntegrationでは統合したい他の分析サービスが選べます。スイッチを入れると、その分析サービスのAPIやkey情報等、トラッキングに必要な情報の入力を求められます。入力すると、統合が有効になります。なお、各種サービスが提供するSDKをアプリに入れることでも、データを送ることができます。

5.Debuggerでは実際に送付されたデータを確認することができます。
スクリーンショット 2014-11-17 15.42.15.png

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/)で把握する必要があります。

38
34
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?