adjustとTreasureDataを連携させてみる！

**NOTE: 現在こちらの方法は利用できなくなっています。**


[adjust](https://www.adjust.com/)は、リアルタイムに売上、イベント数、セッション数、インストール数、クリック数といった定量データに加え、コホート分析に基づいて、広告がどのような効果を可視化するためのサービスです。

![top](https://i.gyazo.com/f0516ded190d65af63cdf32f836899b8.png)


# adjustの利用方法

## 1.サインアップ

それでは、サインアップをしてみます。
ホームページの下に、Get your free 30 day trialがあるのでクリックし、
下記の項目を埋めます。

![sigh up](https://i.gyazo.com/58b15b66f2f3bef5bd9e19605cf38379.png)


![welcome](https://i.gyazo.com/f48a907165f1f27746d4db665bc7f9af.png)

次にアプリの初期情報を入力します。
今回はテストのために、アプリIDはありません。

![JPY](https://i.gyazo.com/5c1245a81dbb9164162a253fc891662f.png)

次に、イベント情報を取得するためのIDを生成します。
これを売上のイベント時などにadjustに送るようにすることで、イベントごとの分析や可視化ができるようになります。

![Add event](https://i.gyazo.com/f0b732a09e11e81e64bfa9124d39de15.png)

ここまでで初期セットアップは完了です。

## 2. iOS SDKの組み込み

次に利用するOSのSDKを[ここ](https://github.com/adjust/sdks
)からダウンロードします。

![Embed SDK](https://i.gyazo.com/a55960287b032d33645cf4803fd82683.png)

adjustのドキュメントは、[こちら](https://docs.adjust.com/en/getting-started/
)に記載されています。

[iOS SDK](https://github.com/adjust/ios_sdk)をつかって、adjustにデータを送ります。
iOS SDK内にExampleがあるので、ExmpleをそのままXcodeに読み込んで作成してみます。

編集箇所としては、

1. `AppDelegate.m`内の`yourAppToken`にアプリのトークンを記載
2. `ViewController.m`内の`eventWithEventToken`にそれぞれイベントのトークンを記載

これで各イベントが発生した時に、端末情報がadjustに送ることができます。
さて、上記の変更が終わったら、起動してみましょう。下図の画面が表示されます。

![iOS](https://i.gyazo.com/283002b7bee4b28eb4b8189827b6004f.png)

表示されたボタンをぽちぽち押してみると、ログに下記が表示されます。

```
example[89662:1432893] 	[Adjust]v: Response: {"attribution":{"tracker_token":"9sadhq","tracker_name":"Organic","network":"Organic"},"app_token":"6g3xc3yen836","adid":"4050ee8e82b41ba0f7f55799e3e1cd94","timestamp":"2015-10-01T07:27:15.658Z+0000","message":"Event tracked '2zlvrt'"}
```

作成したアプリ名を選びます。
このデータを貯めて行ってレポートとかを作れたりできます。（たぶん）

![Dashboard](https://i.gyazo.com/6df65e3badc2c10348c0167229d10240.png)

デフォルトだとdebugモードになっているために、sandboxのダッシュボードを利用してみてみましょう。

![report](https://i.gyazo.com/31eceb8cc3c2bb13baa26b5b89617b05.png)


# TreasureDataとの連携

さて、adjustにはデータを送れたところを確認しました。
ここではレポートなどがみれますが、例えばここで取得したデータを他のデータと連携させたりすることを考えた時にTreasureDataと連携させるのは非常に有益です。

adjustにはcallback URLを設定することができ、イベント発生時にTreasureDataにもforwardさせることで、rawデータをTreasureDataに送ることができます。（ドキュメントは[こちら](http://docs.treasure-data.com/articles/adjust)）

## 1. Write only APIKEYの取得

TreasureDataにログインして、[プロフィールページ](https://console.treasuredata.com/users/current)からWrite only APIKEYを取得します。

## 2. Callback URLの設定

Callback URLは、イベントに対して設定します。
そのため、[Event](https://www.adjust.com/event_types#/)のページにて、新規イベント追加を行います。

![Event Page](https://i.gyazo.com/c6883a4209ab3033a91fb6ab7ee08a2d.png)

TreasureDataに対しては、下記を設定します。

```
https://in.treasuredata.com/adjust/v3/event/support/adjust?apikey=<apikey>&event=click&device_id={idfa}&msgts={created_at}&network={network_name}&campaign={campaign_name}&adgroup={adgroup_name}&app_version={app_version}&idfv={idfv}&user_agent={user_agent}&ip={ip_address}&click_time={click_time}&country={country}&language={language}&device_name={device_name}&os={os_name}&os_version={os_version}&fb_campaign_group={fb_campaign_group_name}&fb_campaign_group_id={fb_campaign_group_id}
```

Yahoo!ビッグデータインサイトに対して送る場合には、下記を設定します。

```
https://mobile-ybi.jp-east.idcfcloud.com/adjust/v3/event/support/adjust?apikey=<apikey>&event=click&device_id={idfa}&msgts={created_at}&network={network_name}&campaign={campaign_name}&adgroup={adgroup_name}&app_version={app_version}&idfv={idfv}&user_agent={user_agent}&ip={ip_address}&click_time={click_time}&country={country}&language={language}&device_name={device_name}&os={os_name}&os_version={os_version}&fb_campaign_group={fb_campaign_group_name}&fb_campaign_group_id={fb_campaign_group_id}
```

## 3. iOS SDKから動作させる

`ViewController.m`内の`eventWithEventToken`にトークンを書き直します。
またログに下記のように表示されます。

```
15-10-02 15:00:35.975 example[92744:1678902] 	[Adjust]d: Added package 1 (event'7c2cqn')
2015-10-02 15:00:35.976 example[92744:1678902] 	[Adjust]v: Path:      /event
2015-10-02 15:00:35.977 example[92744:1678902] 	[Adjust]v: ClientSdk: ios4.3.0
2015-10-02 15:00:35.977 example[92744:1678902] 	[Adjust]v: Parameters:
2015-10-02 15:00:35.977 example[92744:1678901] 	[Adjust]d: Wrote Activity state: ec:25 sc:2 ssc:1 ask:0 sl:75.9 ts:75.9 la:1443765636.0
2015-10-02 15:00:35.977 example[92744:1678902] 	[Adjust]v: 		app_token              6g3xc3yen836
2015-10-02 15:00:35.978 example[92744:1678902] 	[Adjust]v: 		app_version            1
2015-10-02 15:00:35.978 example[92744:1678902] 	[Adjust]v: 		app_version_short      1.0
2015-10-02 15:00:35.978 example[92744:1678902] 	[Adjust]v: 		bundle_id              com.torutakahashi.ayashi
2015-10-02 15:00:35.979 example[92744:1678902] 	[Adjust]v: 		country                US
2015-10-02 15:00:35.980 example[92744:1678902] 	[Adjust]v: 		created_at             2015-10-02T15:00:35.975Z+0900
2015-10-02 15:00:35.980 example[92744:1678902] 	[Adjust]v: 		device_name            x86_64
2015-10-02 15:00:35.981 example[92744:1678902] 	[Adjust]v: 		device_type            iPhone
2015-10-02 15:00:35.982 example[92744:1678902] 	[Adjust]v: 		environment            sandbox
2015-10-02 15:00:35.983 example[92744:1678902] 	[Adjust]v: 		event_count            25
2015-10-02 15:00:35.983 example[92744:1678902] 	[Adjust]v: 		event_token            7c2cqn
2015-10-02 15:00:35.984 example[92744:1678902] 	[Adjust]v: 		idfa                   0A10F28C-1928-4F02-B297-57A9DDE7C834
2015-10-02 15:00:35.984 example[92744:1678902] 	[Adjust]v: 		idfv                   1ADDC6CF-96D2-482F-80D8-74A5959DB167
2015-10-02 15:00:35.984 example[92744:1678902] 	[Adjust]v: 		ios_uuid               565ea905-4423-4b5a-9100-c432d273863e
2015-10-02 15:00:35.984 example[92744:1678902] 	[Adjust]v: 		language               en
2015-10-02 15:00:35.984 example[92744:1678902] 	[Adjust]v: 		mac_md5                4050ee8e82b41ba0f7f55799e3e1cd94
2015-10-02 15:00:35.985 example[92744:1678902] 	[Adjust]v: 		mac_sha1               331d536154423baaaf628a7dda24caaa85a81338
2015-10-02 15:00:35.985 example[92744:1678902] 	[Adjust]v: 		needs_attribution_data 1
2015-10-02 15:00:35.985 example[92744:1678902] 	[Adjust]v: 		os_name                ios
2015-10-02 15:00:35.985 example[92744:1678902] 	[Adjust]v: 		os_version             9.1
2015-10-02 15:00:35.985 example[92744:1678902] 	[Adjust]v: 		session_count          2
2015-10-02 15:00:35.986 example[92744:1678902] 	[Adjust]v: 		session_length         76
2015-10-02 15:00:35.986 example[92744:1678902] 	[Adjust]v: 		subsession_count       1
2015-10-02 15:00:35.986 example[92744:1678902] 	[Adjust]v: 		time_spent             76
2015-10-02 15:00:35.986 example[92744:1678902] 	[Adjust]v: 		tracking_enabled       1
2015-10-02 15:00:35.987 example[92744:1678902] 	[Adjust]d: Package handler wrote 1 packages
2015-10-02 15:00:37.110 example[92744:1678901] 	[Adjust]v: Response: {"attribution":{"tracker_token":"9sadhq","tracker_name":"Organic","network":"Organic"},"app_token":"6g3xc3yen836","adid":"4050ee8e82b41ba0f7f55799e3e1cd94","timestamp":"2015-10-02T06:00:36.957Z+0000","message":"Event tracked '7c2cqn'"}
2015-10-02 15:00:37.111 example[92744:1678901] 	[Adjust]i: Event tracked '7c2cqn'
2015-10-02 15:00:37.113 example[92744:1679012] 	[Adjust]d: Wrote Activity state: ec:25 sc:2 ssc:1 ask:0 sl:75.9 ts:75.9 la:1443765636.0
2015-10-02 15:00:37.113 example[92744:1678902] 	[Adjust]d: Package handler wrote 0 packages

```

実際に送られているかどうかを確認すると、送られていることがわかります。

![TreasureData](https://i.gyazo.com/8d81b96ffae4ba7d78260d3dba5b03dd.png)



# adjustで取得できるデータ

Callback URLに設定できるデータは下記になっています。
https://partners.adjust.com/placeholders/

結構色んな種類のデータがとれるっぽいです。


# まとめ

アプリにSDKを複数入れたくないっていう人には、一つでTreasureDataにも送れて便利ですね。
そして、TreasureDataに送っておけば、色んなサービスとの連携がさらにできるので、もっと便利ですね！

ちゃんちゃん。