APIの仕様について
SDKのTracker APIについて、引数やプロパティ に渡せるデータの上限値は以下となっております。
API | 送信内容 | 上限値 |
Tracker.setScreenName() | スマホアプリでアクセスした画面の名前 | 256 byte |
Tracker.setRelationalKey(key,val) | データ統合のためのレコードを一意に特定するカラムの名前 | key:128 byte |
Tracker.setRelationalKey(key,val) | データ統合のためのレコードを一意に特定するカラムの名前 | key:256 byte |
Tracker.setLoginUser() | ログインしたユーザーの名前 |
key: 128 byte
value: 256 byte |
Tracker.setBootType() | スマホアプリの起動方法とその設定値 |
第1引数: 32 byte
第2引数: 512 byte |
Tracker.setUserMap() | アプリケーションで定義したユーザ情報をキー、バリュー値で設定 |
key: 32 byte
value: 128 byte ※格納できるキーバリューのペアは10個まで ※10個を越えるデータを入れることはできす、サーバーに送信されるキーは順不同です |
EventBuilder.setLabel() | 発生したイベントのラベル | 256 byte |
EventBuilder.setCategoryName() | 発生したイベントのカテゴリー | 256 byte |
EventBuilder.setActionName() | 発生したイベントの名前 | 256 byte |
EventBuilder.setEventValue() | 発生したイベントの値 | 256 byte |
EventBuilder.setEventMap() | イベントが発生した画面のURL |
key: 32 byte
value: 128 byte ※格納できるキーバリューのペアは10個まで ※10個を越えるデータを入れることはできす、サーバーに送信されるキーは順不同です |
ExceptionBuilder.setName() | 発生したエラーの名前 | 256 byte |
ExceptionBuilder.setDescription () | 発生したエラーの内容 | 1024 byte |
なし | - | 128 byte |
弊社では各項目の上限値に基づきテストしておりますので、上限を超えて設定される場合は、お客様の自己責任にてご設定頂くようにお願いいたします。
トラッキング機能を提供するTrackerはスレッドセーフではありません。複数のスレッド(メインスレッド、ワーカースレッド)から同時に書き込む処理を行う場合、排他制御をする必要があります。
APIの組み込み
b→dash mobile SDKを用いてb→dashへログを送信するには、SDKが提供するAPIをスマホアプリに組み込む必要があります。
APIには「スマホアプリのログを非同期処理で送信するAPI」と「スマホアプリのログを同期処理で送信するAPI」に分けられます。送信するログごとにAPIを組み込んでいきます。
スマホアプリのログを非同期処理で送信する
b→dashのSDKは、取得したログを1件ずつb→dashに送信する同期処理ではなく、ログが10件蓄積されたタイミングでまとめて送信する非同期処理をベースとしています。
取得したログを1件ずつb→dashに送信すると、b→dashとの通信回数が多くなり、多少なりともアプリのパフォーマンスに影響を与えてしまうため、10件を閾値としています。
スクリーンログを送信する
スクリーンログを送信するにはScreenViewBuilderが必要になります。ScreenViewBuilder はスクリーンビューが単純に発生したときに、画面名を設定して成果を生成するクラスです。WebVew イベントやライフサイクルイベント時に成果を取得するサンプルコードを紹介します。
webページが正常に表示されたときのデータ送信サンプルコード
private WebView webView;
private boolean connectError;
public View onCreateView( … ) {
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(…) {
super.onReceivedError(view, request, error);
connectError = true;
}
@Override
public void onPageStarted(…) {
super. onPageStarted(view, url);
connectError = false;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if( !connectError ){
try {
// 画面View の成果を送ります
Tracker tracker = TrackerApplicaetion.getTrackerApplication().getTracker();
tracker.setScreenName("URLに応じた画面名"); // 画面名を設定します
tracker.send(new ScreenViewBuilder().build());
} catch ( Exception e ) {
}
}
}
Tracker tracker = TrackerApplicaetion.getTrackerApplication().getTracker();
// WebView を表示します.
String url = "http://接続先/?_bdld=" + tracker.getVisitorId();
webView.loadUrl(url);
Fragment のライフサイクルのイベント時のデータ送信サンプルコード
public static final String SCREEN_NAME = "ネイティブ画面"
public void onResume( … ) {
super.onResume();
Tracker tracker = TrackerApplication.getTrackerApplication().getTracker();
tracker.setScreenName(SCREEN_NAME);
tracker.send(new ScreenViewBuilder().build());
}
イベントログを送信する
イベントログを取得するにはEventBuilderが必要になります。EventBuilderはスマホアプリ内でイベントが単純に発生したときに、イベント内容を設定し成果を生成するクラスです。サンプルコードを3つ紹介します。
webページが正常に表示され無かったときのデータ送信サンプルコード
private WebView webView;
public View onCreateView( … ) {
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(…) {
super.onReceivedError(view, request, error);
try {
// イベントを生成して成果を送ります
Tracker tracker = TrackerApplicaetion.getTrackerApplication().getTracker();
tracker.setScreenName("URLに応じた画面名");
tracker.send(new EventBuilder()
.setActionName("LoadError") // アクション名を設定します
.setLabelName("WebView") // ラベル名を設定します
.setEventValue(url) // イベント値を設定します
.build()
);
} catch ( Exception e ) {
}
}
}
アプリ内のボタンが押されたときのデータ送信サンプルコード
private Button buttonOK;
buttonOK.setOnClickListener( new View.OnClickListener(){
@Override
public void onClick() {
try {
// イベントを生成して成果を送ります
Tracker tracker = TrackerApplicaetion.getTrackerApplication().getTracker();
tracker.setScreenName("スクリーン1");
tracker.send(new EventBuilder()
.setActionName("buttonClick") // アクション名を設定します
.build()
);
} catch ( Exception e ) {
}
}
}
アプリ内でGoogle Play から購入処理が行われたときのデータ送信サンプルコード
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_BUY_INTENT) {
int responseCode = data.getIntExtra("RESPONSE_CODE", 0);
String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA");
String dataSignature = data.getStringExtra("INAPP_DATA_SIGNATURE");
if (resultCode == RESULT_OK) {
String productId = ...;
HashMap<String,String> map = new HashMap<String,String>();
map.put("productId", productId); // プロダクトID を設定
try { // 購入時の成果を生成して送ります
Tracker tracker = TrackerApplicaetion.getTrackerApplication().getTracker();
tracker.setScreenName("購入結果");
tracker.send(new EventBuilder()
.setEventMap(map) // キーバリューを設定する
.build()
);
} catch( Exception e ){
}
}
}
}
エラーログを送信する
エラーログを送信するにはExceptionBuilderが必要になります。ExceptionBuilderはアプリ内で、軽微・致命的問わず、クラッシュが発生したときの情報を、追加して成果を生成するクラスです。例外が発生したことを検知したい箇所で実装します。
public void init( … ) {
try {
// 何かしらの処理
} catch ( Throwable e ) {
// クラッシュイベントを生成して成果を送ります
Tracker tracker = TrackerApplicaetion.getTrackerApplication().getTracker();
tracker.setScreenName("重大な初期化画面");
tracker.send(new ExceptionBuilder()
.setFatal(true) // 致命的なクラッシュか設定します
.setDescription(e.toString()) // 例外情報を設定します
.build()
);
}
}
起動タイプログを送信する
ExceptionBuilderでは起動タイプログを送信することもできます。外部起動(スキーマ/Push通知による起動) などで、通常と異なる「アプリ起動時のイベント」を集計することができます。
// ここではスキーマ起動が行われたActivity内の onCreate で実装を行います
Intent intent = getIntent();String action = intent.getAction();
if ( Intent.ACTION_VIEW.equals(action) ) {
// スキーマ起動の場合
Uri uri = intent.getData();
if ( uri!=null ) {
// 起動タイプをスキーマに設定し、渡されたパラメーターをそのまま第2引数に設定
tracker.setBootType( Tracker.BOOT_SCHEMA, uri.getQuery() );
tracker.setScreenName("アプリ起動");
tracker.send(new EventBuilder().build());
}
}
会員IDなどの情報を紐付ける
b→dash SDKでは、独自の「会員ID」など貴社サービスで管理しているIDを紐付けることが出来ます。
// 会員ID を紐付ける
Tracker.setScreenName("ログイン後のマイページ画面");
tracker.setLoginUser(”userId”);
tracker.send(new ScreenViewBuilder().build());
スマホアプリのログを同期処理で送信する
ログが10件蓄積されたタイミングでまとめて送信する非同期処理ではなく、同期処理で取得したログを1件ずつb→dashに送信します。
未送信ログを送信する
未送信データの蓄積を防ぐために Tracker.sync() を使ってアプリ起動時に既に発生している「イベント成果」を送信する必要があります。
tracker.sync();
またデータ連携として「即時に連携したい」ときにも呼び出す必要があります。
WebView を呼び出す
SDK独自のURLパラメーターに値を設定することで、集計データなどが詳細に集計されたページ表示ができます。
パラメーター名 | iOSバリュー | 役割 |
_bdld | Tracker.visitorId | セッション判定が正しく集計される |
- パラメーターを付与することで、WebViewのコンテンツ上においても同一ユーザとして識別することが可能となります。
- 本パラメーターは同一ドメイン内でのみ有効となる為、異なるドメインにアクセスする場合、再度付与する必要があります。
以下はWebViewでページを表示するときのサンプルコードです。
/* Your code... */// WebView を表示します.
String url = "http://接続先/?_bdld=" + tracker.getVisitorId();
webView.loadUrl(url);