Android SDK

Maven metadata URL

ディープリンクの設定

ダッシュボード設定

ダッシュボードには以下の2つの情報を登録する必要があります。

  • URIスキーム

  • sha256_cert_fingerprints

スキーム登録

使用するURIスキームを上の画像のように、Android URI Schemeの領域に://を追加し、次のように入力してください。

Attention

AirbridgeのURIスキームは小文字の数字および一部の記号(-+.) のみサポートしています。

フィンガープリントの登録

sha256_cert_fingerprintsを取得する方法は以下の通りです。

  1. Google Playストアにアプリを登録する時に使った キーストアファイルを準備してください。

2. 以下の命令を ターミナルで実行してください。

Shell
1
keytool -list -v -keystore my-release-key.keystore

3. 下記のように  Certificate fingerprints領域の SHA256値をコピーし、上の画像のように Android sha256_cert_fingerprintsの領域に入力してください。

Shell
1234
Certificate fingerprints:
    MD5:  4C:65:04:52:F0:3F:F8:65:08:D3:71:86:FC:EF:C3:49
    SHA1: C8:BF:B7:B8:94:EA:5D:9D:38:59:FE:99:63:ED:47:B2:D9:5A:4E:CC
    SHA256: B5:EF:4D:F9:DC:95:E6:9B:F3:9A:5E:E9:D6:E0:D8:F6:7B:AB:79:C8:78:67:34:D9:A7:01:AB:6A:86:01:0E:99

Android sha256_cert_fingerprintsはコンマ(’,’)で区分して複数の値を登録することができます。

プロジェクト設定

インテントフィルタの設定

以下のプロセスに沿って インテントフィルタ を設定してください。

  1. AndroidManifest.xmlファイルを開いてください。

  2. ディープリンクを処理する アクティビティインテントフィルタを以下のように追加してください。

123456789101112131415161718192021222324252627282930
<activity ...>
    ...
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <data android:scheme="http" android:host="YOUR_APP_NAME.abr.ge" />
        <data android:scheme="https" android:host="YOUR_APP_NAME.abr.ge" />
    </intent-filter>
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <data android:scheme="http" android:host="YOUR_APP_NAME.airbridge.io" />
        <data android:scheme="https" android:host="YOUR_APP_NAME.airbridge.io" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <data android:scheme="YOUR_APP_URI_SCHEME" />
    </intent-filter>
    ...
</activity>

YOUR_APP_NAME.deeplink.page : Airbridge アプリリンク バージョン2

  • YOUR_APP_NAME.airbridge.io: Airbridge アプリリンク バージョン1

  • YOUR_APP_URI_SCHEME: URIスキーム方式のディープリンク

カスタムドメインの設定

Airbridgeダッシュボードでトラッキングリンクを生成する場合、deeplink.page または abr.ge の形のトラッキングリンクを使用できますが、広告主の方ではトラッキングリンクのブランディングおよびクリック率(CTR)の向上のため、以下のような設定をすることで、go.my_company.com/abcd のようなカスタマイズされたURLをトラッキングリンクとして利用することができます。

1. 使用するカスタムドメインをこちらのガイドに沿って設定してください。

2. res/values/airbridge.xml ファイルを生成し、設定したカスタムドメインのURLを以下のように追加してください。

123456
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
    <string-array name="co_ab180_airbridge_custom_domains">
        <item>YOUR_CUSTOM_DOMAIN</item>
    </string-array>
</resources>

3. 上の方で設定した  インテントフィルタのように、ディープリンクを処理する アクティビティインテントフィルタを以下のように追加してください。

12345678910111213
<activity ...>
    ...
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <data android:scheme="http" android:host="YOUR_CUSTOM_DOMAIN" />
        <data android:scheme="https" android:host="YOUR_CUSTOM_DOMAIN" />
    </intent-filter>
    ...
</activity>

Attention

ここで追加された YOUR_CUSTOM_DOMAIN はAirbridgeダッシュボードに記載された情報と一致しなければいけません。

ディープリンクのコールバック設定

上記の アクティビティ で追加した インテントフィルタ のディープリンクを処理するためには、以下のような作業が必要になります。

123456789101112131415161718192021222324252627
@Override
protected void onResume() {
    super.onResume();
    Airbridge.getDeeplink(getIntent(), new AirbridgeCallback<Uri>() {
        @Override
        public void onSuccess(Uri uri) {
            // Process deeplink data
        }

        @Override
        public void onFailure(Throwable throwable) {
            // Error
        }

        @Override
        public void onComplete() {
            // After process deeplink data
        }
    });
}

// The code below is required for proper deeplink processing
@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
}

ディファードディープリンクの設定

Airbridge SDKでディファードディープリンクが発生する一般的なケースでは、AndroidManiest.xml に設定された インテントフィルタ によって自動的にその アクティビティ が呼び出されます。上記のディープリンクコールバック設定と同じ方法を使って、一括で処理することができます。

ディファードディープリンクから得られた情報で特殊な作業を処理したい時や、ディファードディープリンクによって アクティビティ が自動的に呼び出される動作を中止したい場合は、以下のように設定することができます。

1234567891011
AirbridgeConfig config = new AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
    .setOnDeferredDeeplinkReceiveListener(new OnDeferredDeeplinkReceiveListener() {
        @Override
        public boolean shouldLaunchReceivedDeferredDeeplink(Uri uri) {
            // If you want to open the target activity, please return true otherwise false
            // Default returning value = true
            return true;
        }
    })
    .build();
Airbridge.init(this, config);

ディープリンク設定の確認

Airbridge SDKのディープリンク設定が完了した後、以下のようなリンクからアプリのページに正しく遷移するかを確認できます。

  • YOUR_APP_URI_SCHEME://

ディープリンクの設定および確認が完了すれば、Airbridgeダッシュボード > Raw Data > App Real-time Log タブで以下のように確認できます。

ユーザー設定

ユーザー識別子の設定

Airbridgeではウェブ(Web)とアプリ(App)間で断片化されたユーザーの貢献度を計測するために、以下のようなユーザーの識別子情報を収集します。

  • User Email : Eメール

  • User Phone : 電話番号

  • User ID : ユーザー固有のID(ユーザーを特定できるID値で、ウェブとアプリで1:1の関係になるもの)

  • User Alias : ユーザーを表すことができるその他のID (e.g. ロイヤルティプログラム用のID、関連会社の統合IDなど)

入力したユーザーのEメールと電話番号は自動でハッシュ(SHA256)され、サーバーに渡されます。

Airbridge SDKでは以下の方法でユーザーの識別子情報を設定できます。

1234567891011
// Automatically hashed on client side using SHA256
// Can turn off hashing feature with special flag
Airbridge.getCurrentUser().setEmail("testID@ab180.co");
Airbridge.getCurrentUser().setPhone("821012341234");

// Does not hash 
Airbridge.getCurrentUser().setId("testID");
Airbridge.getCurrentUser().setAlias("key", "value");

// Clear user data
Airbridge.expireUser()
  • User Aliasの数は 最大10個までです。

  • User Aliasのkeyは Stringタイプで、長さは最大128文字です。

  • User Aliasのkeyは ^[a-z_][a-z0-9_]*$の正規表現と一致する必要があります。

  • User Aliasのvalueは Stringタイプで、Stringは 最大128文字です。

ユーザーの識別子情報を一度設定すれば、全てのイベントで識別子情報が一緒に送られます。

ユーザー属性の設定

MTA(Multi-Touch Attribution)分析の正確性向上、内部データ分析、サードパーティ(3rd Party)ソリューションとの連携などの目的で、ユーザーの追加属性データを設定できます。

1
Airbridge.getCurrentUser().setAttribute("key", "value");
  • User Attributeの数は 最大100個までです。

  • User Attributeのkeyは Stringタイプで、長さは 最大128文字です。

  • User Attributeのkeyは ^[a-z_][a-z0-9_]*$の正規表現と一致する必要があります。

  • User Attributeのvalueは Integer、Float、Long、BooleanタイプStringタイプで、Stringは 最大1024文字です。

ユーザー設定の確認

Airbridge SDKで設定したユーザー情報は、Airbridgeダッシュボード > Raw Data > App Real-time Log タブで以下のように確認できます。

デバイス設定

デバイス識別子の設定

SDKにデバイス識別子情報を設定すると、設定後から収集される全てのイベントにデバイス識別情報を追加することができます。デバイス識別子を一度設定すれば、削除しない限り、アプリを終了しても設定は維持されます。

123
Airbridge.setDeviceAlias("ADD_YOUR_KEY", "AND_YOUR_VALUE")
Airbridge.removeDeviceAlias("DELETE_THIS_KEY")
Airbridge.clearDeviceAlias()

メソッド

説明

setDeviceAlias(key: String, value: String)

送信したキーと値のペアをデバイス識別子に追加します。

removeDeviceAlias(key: String)

送信したキーに該当するデバイス識別子を削除します。該当する識別子がない場合、動作はありません。

clearDeviceAlias()

全てのデバイス識別子を削除します。

イベント設定

Airbridge SDKで呼び出される全てのイベントは、以下のように6つの属性値と一緒に送ることができます。

  • Event Category : イベント名 Required (String)

  • Event Action : イベントの属性値 1 (String)

  • Event Label : イベントの属性値 2 (String)

  • Event Value : イベントの属性値 3 (Double)

  • Event Custom Attributes : イベントのカスタムデータ (Map<String, Object>)

  • Event Semantic Attributes : イベントのセマンティックデータ (Map<String, Object>)

イベント送信

Airbridge SDKでは以下のような方法でイベントを送信することができます。

12345
Number eventValue = 10;
Map<String, Object> eventAttributes = new HashMap<String, Object>();
SemanticAttributes semanticAttributes = new SemanticAttributes();
semanticAttributes.put(SemanticAttributes.KEY_CURRENCY, "USD");
Airbridge.trackEvent(StandardEventCategory.HOME_VIEW, "event_action", "event_label", eventValue, eventAttributes, semanticAttributes);

デフォルトのカテゴリータイプではカバーできない要望がある場合、以下のような方法で直接カスタマイズイベントを送信することもできます。

12345
Number eventValue = 10;
Map<String, String> eventAttributes = new HashMap<String, String>();
Map<String, String> semanticAttributes = new HashMap<String, String>();
semanticAttributes.put(SemanticAttributes.KEY_CURRENCY, "USD");
Airbridge.trackEvent("event_category", "event_action", "event_label", eventValue, eventAttributes, semanticAttributes);

Airbridge SDKがサポートする  に関する詳細はこちらのページで確認できます。

また、以下のような方法で、各アプリに合ったイベントをあらかじめ定義されたクラスの形で使用することができます。

12345678
class MyAppEvent extends Event {
    public MyAppEvent() {
        super("my_custom_category");
    }
}
...
Airbridge.trackEvent(new MyAppEvent());
...

スタンダードイベントの送信

会員登録イベント

123456
Airbridge.getCurrentUser().setEmail("me@sample.com");
Airbridge.getCurrentUser().setPhone("821012341234");
Airbridge.getCurrentUser().setId("12345");
Airbridge.getCurrentUser().setAlias("alias1", "value");
Airbridge.getCurrentUser().setAttributes("attr1", 1234);
Airbridge.trackEvent(StandardEventCategory.SIGN_UP);

ログインイベント

123456
Airbridge.getCurrentUser().setEmail("me@sample.com");
Airbridge.getCurrentUser().setPhone("821012341234");
Airbridge.getCurrentUser().setId("12345");
Airbridge.getCurrentUser().setAlias("alias1", "value");
Airbridge.getCurrentUser().setAttributes("attr1", 1234);
Airbridge.trackEvent(StandardEventCategory.SIGN_IN);

ログアウトイベント

12
Airbridge.trackEvent(StandardEventCategory.SIGN_OUT);
Airbridge.expireUser();

メイン画面を表示

1
Airbridge.trackEvent(StandardEventCategory.HOME_VIEW);

検索結果を表示

123
SemanticAttributes semanticAttributes = new SemanticAttributes();
semanticAttributes.setQuery("Coca Cola");
Airbridge.trackEvent(StandardEventCategory.SEARCH_RESULT_VIEW, null, null, null, null, semanticAttributes);

商品リストを表示

1234567891011121314151617181920
Product fanta = new Product();
fanta.setId("fanta_orange");
fanta.setName("FANTA Orange");
fanta.setQuantity(1);
fanta.setCurrency("usd");
fanta.setPrice(1.99);
fanta.setPosition(0);

Product cocacola = new Product();
cocacola.setId("cocacola_low_sugar");
cocacola.setName("Cocacola Low Sugar");
cocacola.setQuantity(1);
cocacola.setCurrency("usd");
cocacola.setPrice(2.99);
cocacola.setPosition(1);

SemanticAttributes semanticAttributes = new SemanticAttributes();
semanticAttributes.setProductListId("beverage_1");
semanticAttributes.setProducts(Arrays.asList(fanta, cocacola));
Airbridge.trackEvent(StandardEventCategory.PRODUCT_LIST_VIEW, null, null, null, null, semanticAttributes);

商品の詳細ページを表示

12345678910111213141516171819
Product fanta = new Product();
fanta.setId("fanta_orange");
fanta.setName("FANTA Orange");
fanta.setQuantity(1);
fanta.setCurrency("usd");
fanta.setPrice(1.99);
fanta.setPosition(0);

Product cocacola = new Product();
cocacola.setId("cocacola_low_sugar");
cocacola.setName("Cocacola Low Sugar");
cocacola.setQuantity(1);
cocacola.setCurrency("usd");
cocacola.setPrice(2.99);
cocacola.setPosition(1);

SemanticAttributes semanticAttributes = new SemanticAttributes();
semanticAttributes.setProducts(Arrays.asList(fanta, cocacola));
Airbridge.trackEvent(StandardEventCategory.PRODUCT_DETAILS_VIEW, null, null, null, null, semanticAttributes);

カートに追加

12345678910111213141516171819202122232425
Product fanta = new Product();
fanta.setId("fanta_orange");
fanta.setName("FANTA Orange");
fanta.setQuantity(1);
fanta.setCurrency("usd");
fanta.setPrice(1.99);
fanta.setPosition(0);

Product cocacola = new Product();
cocacola.setId("cocacola_low_sugar");
cocacola.setName("Cocacola Low Sugar");
cocacola.setQuantity(1);
cocacola.setCurrency("usd");
cocacola.setPrice(2.99);
cocacola.setPosition(1);

SemanticAttributes semanticAttributes = new SemanticAttributes();
semanticAttributes.setCartId("cart_123");
semanticAttributes.setProducts(Arrays.asList(fanta, cocacola));
semanticAttributes.setCurrency("usd");

Event event = new Event(StandardEventCategory.ADD_TO_CART);
event.setValue(4.98);
event.setSemanticAttributes(semanticAttributes);
Airbridge.trackEvent(event);

決済完了

12345678910111213141516171819202122232425
Product fanta = new Product();
fanta.setId("fanta_orange");
fanta.setName("FANTA Orange");
fanta.setQuantity(1);
fanta.setCurrency("usd");
fanta.setPrice(1.99);
fanta.setPosition(0);

Product cocacola = new Product();
cocacola.setId("cocacola_low_sugar");
cocacola.setName("Cocacola Low Sugar");
cocacola.setQuantity(1);
cocacola.setCurrency("usd");
cocacola.setPrice(2.99);
cocacola.setPosition(1);

SemanticAttributes semanticAttributes = new SemanticAttributes();
semanticAttributes.setProducts(Arrays.asList(fanta, cocacola));
semanticAttributes.setCurrency("usd");
semanticAttributes.setInAppPurchased(true);

Event event = new Event(StandardEventCategory.ORDER_COMPLETED);
event.setValue(4.98);
event.setSemanticAttributes(semanticAttributes);
Airbridge.trackEvent(event);

イベント送信確認

Airbridge SDKから送信されたイベント情報はAirbridgeダッシュボード > Raw Data > App Real-time Log タブで以下のように確認できます。

詳細設定

ユーザー情報ハッシュ化設定

内部でのデータ分析などのため、ハッシュ(SHA256)せずにユーザーの識別子情報を送信したい場合、以下のような設定をすることでユーザーのEメールや電話番号などの情報のハッシュ化(SHA256)を中止することができます。

Attention

このオプションはユーザーのEメールや電話番号など、敏感な個人情報を第3者に提供することになるため、あらかじめ内部的なセキュリティ措置が必要となります。

12345
// Default User Info Hash Enabled = true
val option = AirbridgeOptionBuilder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
    .setHashUserInformationEnabled(false)
    .build()
Airbridge.initializeSDK(this, option)

セッションタイムアウト設定

Airbridge SDKでは以下のような処理をすることで、特定のセッション時間内にユーザーがアプリを再起動しても同じセッションと判断し、アプリ実行イベントを再送信しないように変更することができます。

12345
// Default Session Timeout = 5 minutes
AirbridgeConfig config = new AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
    .setSessionTimeoutSeconds(300)
    .build();
Airbridge.init(this, config);

個人情報保護(Opt-out)設定

この機能はGDPRCCPAのように、お客様から個人情報保護に関する同意を得てデータを収集、送信するときに有効な機能です。

以下のような方法でデータの収集や送信を開始できます。

123456789101112
// Default Auto Start Tracking Enabled = true
AirbridgeConfig config = new AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
    .setAutoStartTrackingEnabled(false)
    .build();
Airbridge.init(this, config);

...

// Set a variable like below
if (properties.isGDPRAccepted) {
    Airbridge.startTracking();
}

Airbridgeリンクのトラッキング設定

広告主のアプリ内で複数のディープリンクの動作があり、Airbridgeでリエンゲージメントの成果を確認しにくい場合、以下のような設定をすることで、Airbridgeのディープリンクからの成果のみフィルタリングすることができます。

この機能を有効化すると、以下の条件付きのディープリンクからアプリが起動された場合のみ、ディープリンクの成果として計測します。

  • ダッシュボードに登録された形のディープリンクからアプリが起動された場合

  • airbridge.ioのディープリンクからアプリが起動された場合

  • deeplink.pageのディープリンクからアプリが起動された場合

  • airbridge_referrerクエリ情報が存在する場合

12345
// Default Airbridge Link Only = false
AirbridgeConfig config = new AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
    .setTrackAirbridgeLinkOnly(true)
    .build();
Airbridge.init(this, config);

Facebookのディファードアプリリンクの設定

簡単な設定で、FacebookのディファードアプリリンクをAirbridge SDKで一緒に取得することができます。

project/build.gradle ファイルにリポジトリを追加してください。

123456789
allprojects {
    ...
    repositories {
        ...
        mavenCentral()
        ...
    }
    ...
}

app/build.gradle ファイルのdependenciesのブロック内に以下の内容を追加してください。

12345
dependencies {
    ...
    implementation 'com.facebook.android:facebook-android-sdk:latest.release'
    ...
}

app/res/values/string.xml ファイルに以下のようなストリングを追加してください。

12345
...
<string name="facebook_app_id">FACEBOOK_APP_ID</string>
<string name="facebook_client_token">FACEBOOK_CLIENT_TOKEN</string>
...

AndroidManifest.xml ファイルの <application> 要素の中に以下のような <meta-data> を追加してください。

12345678
...
<application android:label="@string/app_name" ...> 
    ...
    <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
    <meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>
    ...
</application>
...

以下のオプションを true に設定してください。

12345
// Default Facebook Deferred App Link Enabled = false
AirbridgeConfig config = new AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
    .setFacebookDeferredAppLinkEnabled(true)
    .build();
Airbridge.init(this, config);

アプリのアンインストールトラッキング設定

Firebase Cloud Messaging(FCM)を使ったアプリのアンインストールトラッキング設定は、Airbridge SDK v2.6.0 以降のバージョンから利用できます。

アプリのアンインストールトラッキング設定に関する詳細はこちらのページを参照してください。

位置情報収集設定

Airbridge SDKでは、以下のような方法でユーザーの位置情報を収集することができます。

Attention

位置情報は合法的な目的と方法で収集することが大前提となるため、この機能の使用には注意が必要です。

1234
// Choose one
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
...
12345
// Default Location Collection Enabled = false
AirbridgeConfig config = new AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
    .setLocationCollectionEnabled(true)
    .build();
Airbridge.init(this, config);

Attention

Airbridge SDKでは直近の位置情報を収集します。GPS情報がない状態では、当該権限の付与と設定が完了していても値が存在しない場合があります。

アプリマーケット別の流入計測設定

広告主はマーケット(GooglePlay Store, One Store, Huawei Store, Galaxy Store ...)別のアプリのインストール成果を分析したい時、以下のように各マーケットに登録するアプリの識別子を設定することで、マーケット別のデータをAirbridgeダッシュボードで確認することができます。

AndroidManifest.xmlで設定する方法

android:valueにマーケット名(playStore、 oneStore、 huaweiStore、 galaxyStore)を追加します。

1234567
...
<application android:label="@string/app_name" ...> 
    ...
    <meta-data android:name="co.ab180.airbridge.app_market_identifier" android:value="playStore"/>
    ...
</application>
...

AirbridgeConfig
で設定する方法

setAppMarketIdentifierにマーケット名(playStore、 oneStore、 huaweiStore)を値として追加します。

1234
AirbridgeConfig config = new AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
    .setAppMarketIdentifier("playStore")
    .build();
Airbridge.init(this, config);

Actuals Reportのグループバイで Event Property > App Market Identifier、または Raw Data Export (App)のグループバイで Event Property > App Market Identifier を選択するとデータを確認できます。

App Market Identifier基準のインストール数

エラーログの送信許可設定

Airbridge SDKでは品質向上のため、SDK内部でエラーが発生した場合、その情報をAirbridgeサーバーに送信しています。Airbridgeサーバーへの送信を中止したい場合は、以下のように設定してください。

12345
// Default Error Log Collection Enabled = true
AirbridgeConfig config = new AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
    .setErrorLogCollectionEnabled(false)
    .build();
Airbridge.init(this, config);

イベントバッファの上限設定

Airbridge SDKではイベントバッファを使ってイベントデータの送信を管理しています。以下のような設定をすることで、Airbridgeイベントバッファの上限を設けることができます。

1234567
int count = 10;
long bytes = 1000000L;
AirbridgeConfig config = new AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
    .setEventMaximumBufferCount(count)
    .setEventMaximumBufferSize(bytes)
    .build();
Airbridge.init(this, config);

イベントバッファのサイズはメタデータの管理などにより、実際に使用するデータよりはやや小さくなっています。

イベント送信周期の設定

Airbridge SDKでは以下のような処理をすることで、イベント送信周期を設定できます。

12345
// Default Event Transmit Interval = 0 millisecond
AirbridgeConfig config = new AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
    .setEventTransmitInterval(3000)
    .build();
Airbridge.init(this, config);

Attention

インターバルタイムとしてマイナスの値を入力すると、 IllegalArgumentException(ランタイムエラー)が発生します。

セッション中に発生したライフサイクルイベントの収集設定

Airbridge SDKでは以下のような処理をすることで、セッション中に発生したライフサイクルイベント(ORGANIC_REOPENFOREGROUND)を収集するように設定できます。

1234
AirbridgeConfig config = new AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
    .setTrackInSessionLifeCycleEventEnabled(true)
    .build();
Airbridge.init(this, config);

未処理イベントの削除設定

Airbridge SDKでは以下のような処理をすることで、サーバに送信できずデバイス内のDBに保存されているイベントを削除する機能を追加することができます。

1234
AirbridgeConfig config = new AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
    .setResetEventBufferEnabled(true)
    .build();
Airbridge.init(this, config);

アプリ内でトラッキングリンクの使用

Airbridge SDKはアプリ内でトラッキングリンクを開ける機能を提供し、ブラウザを通さなくても他の画面に遷移することができます。

12
Airbridge.click("https://abr.ge/~~~")
Airbridge.impression("https://abr.ge/~~~")

クリック

トラッキングリンクがクリックされた時に呼び出します。トラッキングリンクのクリックの統計を追加し、設定されたアプリ、ウェブまたはフォールバックに移動します。

インプレッション

トラッキングリンクがUIに表示された時に呼び出します。トラッキングリンクのインプレッションの統計を1つ追加します。

Attention

カスタムドメインを使用している場合、カスタムShort IDを含むトラッキングリンクは使用できません。

Airbridge機能停止設定

Airbridge SDKでは以下のような処理をすることで、Airbridgeの全ての機能をオフにすることができます。

1234
AirbridgeConfig config = new AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
    .setSdkEnabled(false)
    .build();
Airbridge.init(this, config);

Attention

「処理失敗イベントの削除設定」と「Airbridge停止設定」が全て設定されている場合、「Airbridge停止設定」が優先されるため、「処理失敗イベントの削除設定」は無効になります。

ハイブリッドアプリ設定

ウェブSDKをインストールしただけでは、アプリのインストールおよび実行、またはディープリンクの呼び出しなどの追加的なイベントをトラッキングできません。Airbridgeでは以下のような設定をすることで、ハイブリッドアプリからアプリ内イベントを簡単に呼び出すことができます。

Attention

ハイブリッドアプリの連携のためには、あらかじめAirbridge SDKのインストールおよび設定をする必要があります。

WebView環境のイベント送信

対象のWebViewに、以下のように Airbridge :::setJavascriptInterface の関数を呼び出してください。

123456789101112131415161718192021
public class MainActivity extends Activity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initWebView();
    }
    
    void initWebView() {
        webView = findViewById(R.id.webView);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setDomStorageEnabled(true);

        Airbridge.setJavascriptInterface(webView, "YOUR_WEB_SDK_TOKEN");    
    
        webView.setWebChromeClient(new WebChromeClient());
        webView.setWebViewClient(new WebViewClient());
        webView.loadUrl("http://dev.blog.airbridge.io/websdk-web-app/");
    }
}

ここでの YOUR_WEB_SDK_TOKEN は Airbridgeダッシュボード > Settings > Tokens タブで確認できます。

この設定を完了した後、実際に使用するウェブページで、利用ガイドに沿ってウェブSDKを初期化してください。

ウェブSDK利用ガイド:リンク

トラブルシューティング

ディペンデンシー

java.lang.NoClassDefFoundError: kotlin/coroutines/AbstractCoroutineContextKey の問題

Text
1234
java.lang.NoClassDefFoundError: kotlin/coroutines/AbstractCoroutineContextKey
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
  ...

@qwwdfsad によると、kotlinx-coroutines-core の V1.3.5 以上のライブラリを使う際には、必ず kotlin-stdlib V1.3.70 以上のライブラリを使うように強制しています。

gradlew dependencies コマンドを使って、現在の kotlinx-coroutines-core ライブラリが V1.3.5 以上の場合、kotlin-stdlib のライブラリが V1.3.70 以上か確認してください。

  • 自動バックアップ

    Androidアプリで自動バックアップが必要な場合、自動バックアップルール の定義が必要です。この場合、Airbridge SDKでは内部データの自動コピーを防止するため、別途 airbridge_auto_backup_rules.xml を AndroidManifest.xml に定義しています。そのため、ビルドする時に Manifest merger failed : Attribute application@fullBackupContent value=(true) のような衝突が発生することがあります。

    このような衝突が発生した場合、tools:replace="android:fullBackupContent" の設定と、上記のカスタムオートバックアップルールのファイルに追加のマージ作業が必要になります。Airbridge SDKで定義する自動バックアップルールは以下の通りです。

123456789
<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
    <exclude domain="sharedpref" path="airbridge-internal" />
    <exclude domain="sharedpref" path="airbridge-install" />
    <exclude domain="sharedpref" path="airbridge-user-info" />
    <exclude domain="sharedpref" path="airbridge-user-alias" />
    <exclude domain="sharedpref" path="airbridge-user-attributes" />
    <exclude domain="database" path="airbridge.db" />
</full-backup-content>

Double brace initialization Issue

12345678910111213141516171819202122232425262728293031
HashMap<String, Object> semanticAttributes = new HashMap();
semanticAttributes.put("products", Arrays.asList(
        // double brace initialization issue
        new HashMap<String, Object>() {{
            put("name", "MacBook Pro");
            put("price", 1548200);
            put("position", 1);
            put("brandID", 23);
            put("brandName", "apple");
        }},
        new HashMap<String, Object>() {{
            put("name", "MacBook Air");
            put("price", 1500000);
            put("position", 2);
            put("brandID", 23);
            put("brandName", "apple");
        }}
    )
);

HashMap<String, Object> customAttributes = new HashMap();
customAttributes.put("customKey", "customValue");

Airbridge.trackEvent(
    "purchase",
    "action",
    "label",
    3048200,
    customAttributes,
    semanticAttributes
);

Android SDKはGoogleのGSONライブラリを使っています。このライブラリにはDouble Brace Initialization関連の既知の問題があります。そのため、上記のJavaコードのように、Productsのオブジェクトを作る際にDouble Brace Initializationを使うとproductsのデータが欠落することがあるため、決済完了のコードの例のように、直接Productオブジェクトを作って使用することを推奨します。

このページは役に立ちましたか?

ご質問やご提案はありますか?