• デベロッパーガイド
  • SDK Integration

iOS SDK

GitHub Tag

ディープリンクの設定

ダッシュボード設定

Airbridgeダッシュボード > Tracking Link > Deep Link に以下の2つの情報を入力する必要があります。

  • iOS URI スキーム

  • iOSアプリID

iOS URIスキーム

AirbridgeダッシュボードのiOS URI Schemeの領域に、使用するスキームに://を追加して入力してください。

例) example://

Attention

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

iOSアプリID

1. https://developer.apple.com/account/resources の Identifiers に移動してください。

2. トラッキングしたいアプリの Identifier をクリックしてください。

3. その Identifier の App ID Prefix + . + Bundle ID をAirbridgeダッシュボードの iOS App ID の領域に入力してください。

例) 9JA89QQLNQ.com.apple.wwdc

プロジェクト設定

スキーム

1. Xcode> Projectファイル> Info> URL Typesに移動してください。

2. URLスキームの領域に、Airbridgeダッシュボードに入力した iOS URIスキームを入力してください。

Attention

:// は削除して入力してください。

ユニバーサルリンク

  1. Xcode > Project ファイル> Signing & Capabilitiesに移動してください。

  2. + Capabilityをクリックして Associated Domainsを追加してください。

  3. Associated Domainsapplinks:YOUR_APP_NAME.airbridge.ioを追加してください。

  4. Associated Domainsapplinks:YOUR_APP_NAME.deeplink.pageを追加してください。

YOUR_APP_NAME はダッシュボードの Settings > Tokens > アプリ名で確認できます。
自動入力機能を使う場合、トラブルシューティング > ウェブクレデンシャルを参照してください。

SDKにディープリンク情報を送信

AppDelegateを使う場合

iOS 12およびその前のバージョンをサポートするアプリの場合、一般的に AppDelegate の application(_:open:options:) メソッドでイベントを送信します。

1. ios/[プロジェクト名]/AppDelegate ファイルを開いてください。

2. 以下の関数の最上部で handleURLSchemeDeeplink 関数を呼び出し、アプリがこのスキームで開かれた時、SDKにディープリンクの情報を渡してください。

12345678
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey, id>*)options
{
    [AirBridge.deeplink handleURLSchemeDeeplink:url];

    return YES;
}

3. 以下の関数の最上部で handleUserActivity関数を呼び出し、アプリがこのユニバーサルリンクで開かれた時、SDKにディープリンクの情報を渡してください。

12345678
-  (BOOL)application:(UIApplication*)application
continueUserActivity:(NSUserActivity*)userActivity
  restorationHandler:(void (^)(NSArray* _Nullable))restorationHandler
{
    [AirBridge.deeplink handleUserActivity:userActivity];

    return YES;
}

Attention

SceneDelegateを使うプロジェクトの場合、AppDelegateではなくSceneDelegateでURLが渡されます。SceneDelegateでURLを受信する方法は、次のセクションのSceneDelegateを使う場合を参照してください。

SceneDelegateを使う場合

iOS 13および13以降のバージョンをサポートするアプリの中で、SceneDelegateを使うと以下のメソッドでディープリンクが渡されます。

  • アプリがNot runningの状態でロードされた場合:

    • scene(_:willConnectTo:options:)

  • それ以外の場合(ex. background):

    • Universal link: scene(_:continue:)

    • Scheme link: scene(_:openURLContexts:)

123456789101112131415161718192021222324252627282930313233343536
import UIKit
import AirBridge

@available(iOS 13, *)
class SceneDelegate: UIWindowSceneDelegate {
    var window: UIWindow?

    // Receive links after the app's killed 
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        if let schemeLinkURL = connectionOptions.urlContexts.first?.url {
            // Scheme
            AirBridge.deeplink()?.handleURLSchemeDeeplink(schemeLinkURL)
        } else if let userActivity = connectionOptions.userActivities.first {
            // Universal
            AirBridge.deeplink()?.handle(userActivity)
        }
        
        // ...
    }
  
    // Receive universal link
    func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
        AirBridge.deeplink().handle(userActivity)
        // ...
    }
  
    // Receive scheme link
    func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
        guard let schemeLinkURL = URLContexts.first?.url else {
             return
        }
        
        AirBridge.deeplink().handleURLSchemeDeeplink(schemeLinkURL)
        // ...
    }
}

AppDelegateとSceneDelegateを使わない場合(SwiftUI)

SwiftUIを使っていてSceneDelegateを使わない場合は onOpenUrl でディープリンクが渡されます。SDK初期化と同様に、@main が存在するアプリのクラスに以下のメソッドを追加します。

123456789101112131415161718192021222324252627
import SwiftUI
import AirBridge

@main
@available(iOS 14, *)
struct OnlyUIApp: App {

    ...
    
    var body: some Scene {
        WindowGroup {
            ContentView()
                .onOpenURL { url in
                    if url.scheme != "http" && url.scheme != "https" {
                        // Scheme Link
                        AirBridge.deeplink()?.handleURLSchemeDeeplink(url)
                    }
                    else {
                        // Universal Link
                        let userActivity = NSUserActivity(activityType: NSUserActivityTypeBrowsingWeb)
                        userActivity.webpageURL = url
                        AirBridge.deeplink().handle(userActivity)
                    }
                }
        }
    }
}

Attention

SwiftUIを使っていてSceneDelegateが存在するプロジェクトでは、onOpenUrlを使うことができません。この場合、上記のSceneDelegateを使う場合を参照してください。

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

AppDelegateを使う場合

1. ios/[プロジェクト名]/AppDelegateファイルを開いてください。

2. AppDelegateapplication(_:didFinishLaunchingWithOptions:)setDeeplinkCallback 関数を使用し、ディープリンクでアプリが開かれた時に呼び出すコールバックを設定してください。

123456789
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
    [AirBridge getInstance:@"YOUR_APP_TOKEN" appName:@"YOUR_APP_NAME" withLaunchOptions:launchOptions];

    [AirBridge.deeplink setDeeplinkCallback:^(NSString* deeplink) {
        // ディープリンクでアプリが開かれた場合に作動するコード
        // Airbridge を通じたディープリンク = YOUR_SCHEME://...
        NSLog(@"DeeplinkCallback : %@", deeplink);
    }];
}

AppDelegate
を使わない場合(SwiftUI)

SDK初期化と同様に、@main が存在するアプリのクラスのコンストラクタに以下のメソッドを追加します。

12345678910111213141516171819
import SwiftUI
import AirBridge

@main
@available(iOS 14, *)
struct OnlyUIApp: App {
    init() {
        AirBridge.getInstance("YOUR_APP_SDK_TOKEN", appName: "YOUR_APP_NAME")
        AirBridge.deeplink()?.setDeeplinkCallback { deeplink in
            print(deeplink)
        }
    }
    
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

アプリを開く全てのディープリンクは ディープリンクコールバック に送られます。 そのディープリンクのうち、Airbridgeを通じたディープリンク はAirbridgeダッシュボードの iOS URI Scheme に入力した YOUR_SCHEME://... の形式で渡されます。

ディファードディープリンクはATTのステータスが選択された時やタイムアウトが発生した時、コールバックに送られます。

  • Airbridge iOS SDK, 1.10.0 ~ 1.10.9 を使う場合: Airbridgeディープリンク は

    https://YOUR_APP_NAME.airbridge.io/...の形式で渡されます。

  • Airbridge iOS SDK, ~ 1.9.10 を使う場合: Airbridgeディープリンク は

    https://YOUR_APP_NAME.airbridge.io/... または YOUR_SCHEME://...の形式で渡されます。

カスタムドメインの設定(オプション)

Airbridgeのトラッキングリンクにカスタムドメインを使いたい場合、example.com の部分に設定したカスタムドメインを追加し、以下のように設定してください。

  1. Xcode> Projectファイル> Signing & Capabilities> Associated Domainsに移動してください。

  2. +ボタンをクリックして applinks:example.comを追加してください。

  3. info.plist を開いてください。

  4. 次の値を追加してください。

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

Airbridgeダッシュボードの iOS URI Scheme に入力した YOUR_SCHEME://... の形式のディープリンクをクリックした時、アプリが開かれてディープリンクイベントが送信されるか確認してください。

例) example://

  1. ディープリンクをクリックしてください。

  2. Airbridgeダッシュボード> Raw Data> App Real-time Logsでディープリンクイベントが存在するか確認してください。

ユーザー設定

ユーザー識別子の設定

SDKにユーザー識別子情報を送信し、収集される全てのイベントに識別子を入力することができます。

12345678
[AirBridge.state setUserID:@"personID"];
[AirBridge.state setUserEmail:@"persondoe@airbridge.io"];
[AirBridge.state setUserPhone:@"1(123)123-1234"]

// 入力された dictionary に user alias が変更されます。
[AirBridge.state setUserAlias:@{@"key": @"value"}];
// 既存の user alias に以下のキーと値が追加されます。
[AirBridge.state addUserAliasWithKey:@"key" value:@"value"];

名称

説明

制限

ID

ユーザーID

-

Email

ユーザーのEメール

自動でSHA256ハッシュ化(オプションで解除可能)

Phone

ユーザーの電話番号

自動でSHA256ハッシュ化(オプションで解除可能)

Alias

ユーザーの別のID

- 最大10個までです。
- キーはNSStringタイプで、最大128文字です。
- キーは^[a-zA-Z_][a-z0-9_]*$の正規表現と一致する必要があります。
- 値はNSStringタイプで、最大1024文字です。

ユーザー属性の設定

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

1234
// 入力された dictionary に user attributes が変更されます。
[AirBridge.state setUserAttributes:@{@"key": @"value"}];
// 既存の user attributes に以下のキーと値が追加されます。
[AirBridge.state addUserAttributesWithKey:@"key" value:@"value"];

名称

説明

制限

Attributes

ユーザー属性

- 最大100個までです。
- キーはNSStringタイプで、最大128文字です。
- キーは^[a-zA-Z_][a-z0-9_]*$の正規表現と一致する必要があります。
- 値はNSStringまたはNSNumberタイプです。
- 値はNSStringタイプの場合、最大1024文字です。

ユーザー設定の確認

ユーザー設定を完了したあと、SDKからイベントを送信し、そのイベントに設定したユーザー情報があるか確認してください。

  1. ユーザー設定をしてください。

  2. SDKからイベントを送信してください。

  3. Airbridgeダッシュボード> Raw Data> App Real-time Logsで送信したイベントをクリックし、JSONの中のuserの部分に設定したユーザー情報があるか確認してください。

デバイス設定

デバイス識別子の設定

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

123
[AirBridge.state setDeviceAliasWithKey: "ADD_YOUR_KEY", value: "AND_YOUR_VALUE"];
[AirBridge.state removeDeviceAliasWithKey: "DELETE_THIS_KEY"];
[AirBridge.state clearDeviceAlias];

メソッド

説明

setDeviceAlias(withKey: String, value: String)

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

removeDeviceAlias(withKey: String)

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

clearDeviceAlias()

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

イベント設定

ユーザーの重要な行動が発生した時、アプリ内イベントを通じて流入経路別の成果を計測できます。
全てのイベントのパラメータは選択的に追加することができますが、イベントに関する情報は正確な統計の提供に役立つため、追加することを推奨します。

イベント送信

SDKからイベントを送信することができます。Send events with the SDK.

setCategory 関数はイベント送信のために必須で呼び出す必要があります。

Attention

setCategory 関数はイベント送信のために必須で呼び出す必要があります。

123456789101112131415161718192021
#import <AirBridge/ABInAppEvent.h>

ABInAppEvent* event = [[ABInAppEvent alloc] init];

[event setCategory:@"category"];
[event setAction:@"action"];
[event setLabel:@"label"];
[event setValue:@(123)];
[event setCustoms:@{@"key": @"value"}];

// Semantic Attributes Option 1
ABSemanticAttributes* semanticAttributes = [[ABSemanticAttributes alloc] init];
semanticAttributes.transactionID = @"transaction_123";
[event setSemanticAttributes:semanticAttributes];

// Semantic Attributes Option 2
// For more details, please check following page
// https://developers.airbridge.io/docs/event-structure#semantic-attributes
[event setSemantics:@{@"transactionID": @"transaction_123"}];

[event send];

パラメータ

説明

setCategory

イベント名 (required)

setAction

イベントの分類1

setLabel

イベントの分類2

setValue

イベントのカスタム値

setCustoms

イベントのカスタム情報

setSemanticAttributes

イベントのセマンティック情報 (Map)

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

会員登録

123456789101112131415161718192021
#import <AirBridge/ABUser.h>
#import <AirBridge/ABInAppEvent.h>
#import <AirBridge/ABCategory.h>

ABUser* user = [[ABUser alloc] init];
user.ID = @"testID";
user.email = @"testID@ab180.co";
user.phone = @"000-0000-0000";
user.alias = @{
    @"key": @"value",
};
user.attributes = @{
    @"key": @"value",
};

[AirBridge.state setUser:user];

ABInAppEvent* event = [[ABInAppEvent alloc] init];
[event setCategory:ABCategory.signUp];

[event send];

ログイン

123456789101112131415161718192021
#import <AirBridge/ABUser.h>
#import <AirBridge/ABInAppEvent.h>
#import <AirBridge/ABCategory.h>

ABUser* user = [[ABUser alloc] init];
user.ID = @"testID";
user.email = @"testID@ab180.co";
user.phone = @"000-0000-0000";
user.alias = @{
    @"key": @"value",
};
user.attributes = @{
    @"key": @"value",
};

[AirBridge.state setUser:user];

ABInAppEvent* event = [[ABInAppEvent alloc] init];
[event setCategory:ABCategory.signIn];

[event send];

ログアウト

1234567
#import <AirBridge/ABInAppEvent.h>
#import <AirBridge/ABCategory.h>

ABInAppEvent* event = [[ABInAppEvent alloc] init];
[event setCategory:ABCategory.signOut];

[AirBridge.state setUser:[[ABUser alloc] init]];

ホーム画面を表示

1234567
#import <AirBridge/ABInAppEvent.h>
#import <AirBridge/ABCategory.h>
  
ABInAppEvent* event = [[ABInAppEvent alloc] init];
[event setCategory:ABCategory.viewHome];

[event send];

商品の詳細ページを表示

1234567891011121314151617181920
#import <AirBridge/ABProduct.h>
#import <AirBridge/ABInAppEvent.h>
#import <AirBridge/ABCategory.h>
#import <AirBridge/ABSemanticsKey.h>

ABProduct* product1 = [[ABProduct alloc] init];
product1.idx = @"idx1";
product1.name = @"name1";
product1.price = @100;
product1.currency = @"USD";
product1.orderPosition = @1;
product1.quantity = @1;

ABInAppEvent* event = [[ABInAppEvent alloc] init];
[event setCategory:ABCategory.viewProductDetail];
[event setSemantics:@{
    ABSemanticsKey.products: @[product1.toDictionary],
}];

[event send];

商品リストを表示

1234567891011121314151617181920212223242526272829303132
#import <AirBridge/ABProduct.h>
#import <AirBridge/ABInAppEvent.h>
#import <AirBridge/ABCategory.h>
#import <AirBridge/ABSemanticsKey.h>

ABProduct* product1 = [[ABProduct alloc] init];
product1.idx = @"idx1";
product1.name = @"name1";
product1.price = @100;
product1.currency = @"USD";
product1.orderPosition = @1;
product1.quantity = @1;

ABProduct* product2 = [[ABProduct alloc] init];
product2.idx = @"idx2";
product2.name = @"name2";
product2.price = @200;
product2.currency = @"USD";
product2.orderPosition = @2;
product2.quantity = @2;

ABInAppEvent* event = [[ABInAppEvent alloc] init];
[event setCategory:ABCategory.viewProductList];
[event setSemantics:@{
    ABSemanticsKey.products: @[
        product1.toDictionary,
        product2.toDictionary,
    ],
    ABSemanticsKey.productListID: @"listID",
}];

[event send];

検索結果を表示

1234567891011121314151617181920212223242526272829303132
#import <AirBridge/ABProduct.h>
#import <AirBridge/ABInAppEvent.h>
#import <AirBridge/ABCategory.h>
#import <AirBridge/ABSemanticsKey.h>

ABProduct* product1 = [[ABProduct alloc] init];
product1.idx = @"idx1";
product1.name = @"name1";
product1.price = @100;
product1.currency = @"USD";
product1.orderPosition = @1;
product1.quantity = @1;

ABProduct* product2 = [[ABProduct alloc] init];
product2.idx = @"idx2";
product2.name = @"name2";
product2.price = @200;
product2.currency = @"USD";
product2.orderPosition = @2;
product2.quantity = @2;

ABInAppEvent* event = [[ABInAppEvent alloc] init];
[event setCategory:ABCategory.viewSearchResult];
[event setSemantics:@{
    ABSemanticsKey.products: @[
        product1.toDictionary,
        product2.toDictionary,
    ],
    ABSemanticsKey.query: @"query",
}];

[event send];

カートに追加

1234567891011121314151617181920212223242526272829303132333435
#import <AirBridge/ABProduct.h>
#import <AirBridge/ABInAppEvent.h>
#import <AirBridge/ABCategory.h>
#import <AirBridge/ABSemanticsKey.h>

ABProduct* product1 = [[ABProduct alloc] init];
product1.idx = @"idx1";
product1.name = @"name1";
product1.price = @100;
product1.currency = @"USD";
product1.orderPosition = @1;
product1.quantity = @1;

ABProduct* product2 = [[ABProduct alloc] init];
product2.idx = @"idx2";
product2.name = @"name2";
product2.price = @200;
product2.currency = @"USD";
product2.orderPosition = @2;
product2.quantity = @2;

ABInAppEvent* event = [[ABInAppEvent alloc] init];
[event setCategory:ABCategory.addToCart];
[event setSemantics:@{
    ABSemanticsKey.products: @[
        product1.toDictionary,
        product2.toDictionary,
    ],
    ABSemanticsKey.cartID: @"cartID",
    ABSemanticsKey.currency: @"currency"
}];

[event setValue:@300];

[event send];

決済

123456789101112131415161718192021222324252627282930313233343536
#import <AirBridge/ABProduct.h>
#import <AirBridge/ABInAppEvent.h>
#import <AirBridge/ABCategory.h>
#import <AirBridge/ABSemanticsKey.h>

ABProduct* product1 = [[ABProduct alloc] init];
product1.idx = @"coke_zero";
product1.name = @"Coke Zero";
product1.price = @100;
product1.currency = @"USD";
product1.orderPosition = @1;
product1.quantity = @1;

ABProduct* product2 = [[ABProduct alloc] init];
product2.idx = @"burger_cheese_double";
product2.name = @"Double Cheeseburger";
product2.price = @200;
product2.currency = @"USD";
product2.orderPosition = @2;
product2.quantity = @2;

ABInAppEvent* event = [[ABInAppEvent alloc] init];
[event setCategory:ABCategory.purchase];
[event setSemantics:@{
    ABSemanticsKey.products: @[
        product1.toDictionary,
        product2.toDictionary,
    ],
    ABSemanticsKey.transcationID: @"transcationID",
    ABSemanticsKey.currency: @"currency",
    ABSemanticsKey.inAppPurchased: @YES
}];

[event setValue:@300];

[event send];

イベント送信確認

SDKからイベントを送信し、Airbridgeダッシュボードのそのイベントが存在するか確認してください。

  1. SDKからイベントを送信してください。

  2. Airbridgeダッシュボード> Raw Data> App Real-time Logsで送信したイベントが存在するか確認してください。

詳細設定

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

ユーザー情報のうち、Eメール、電話番号は自動的にSHA256でハッシュ化して送信します。
SDKを初期化するコードの上部で setIsUserInfoHashed の関数を呼び出し、設定を変更することができます。

1234
// ユーザー情報のハッシュ化を解除
[AirBridge setIsUserInfoHashed:NO];

[AirBridge getInstance:@"YOUR_APP_TOKEN" appName:@"YOUR_APP_NAME" withLaunchOptions:launchOptions];

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

SDKを初期化するコードの上部で setSessionTimeout の関数を呼び出し、セッションタイムアウトを設定できます。

  • セッションタイムアウトの単位はミリ秒で、0以上604800000(7日)以下の値に設定してください。

  • セッションタイムアウトのデフォルト値は 1000 * 60 * 5 (5分)です。

123
[AirBridge setSessionTimeout:1000 * 60 * 5];

[AirBridge getInstance:@"YOUR_APP_SDK_TOKEN" appName:@"YOUR_APP_NAME" withLaunchOptions:launchOptions];

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

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

SDK初期化コードの前に autoStartTrackingEnabled を false に設定すれば、SDKは startTracking 関数が呼び出されるまでイベントを送信しません。

そのため、アプリが起動していない状態でライフサイクルイベント(ディープリンクオープンなど)が発生すれば、startTracking 関数の呼び出しよりもそのイベントが先に送られるため、イベントが欠落することがあります。

12345
AirBridge.autoStartTrackingEnabled = NO;

[AirBridge getInstance:@"YOUR_APP_SDK_TOKEN" appName:@"YOUR_APP_NAME" withLaunchOptions:launchOptions];

[AirBridge startTracking];

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

SDKはディープリンクからアプリが起動した際、毎回ディープリンクイベントを送信します。

SDKを初期化するコードの上部で setIsTrackAirbridgeDeeplinkOnly の関数を呼び出して true に設定すれば、Airbridgeのディープリンクからアプリが起動した場合のみディープリンクイベントを送信するようになります。

1234
// Airbridgeのディープリンクからアプリが起動した場合のみディープリンクイベントを送信
[AirBridge setIsTrackAirbridgeDeeplinkOnly:YES];

[AirBridge getInstance:@"YOUR_APP_TOKEN" appName:@"YOUR_APP_NAME" withLaunchOptions:launchOptions];

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

以下の設定をすることで、FacebookのディファードアプリリンクをSDKで収集できます。

  1. https://developers.facebook.com/docs/ios/getting-started

    のリンクから Facebook SDK をインストールしてください。

  2. ios/[プロジェクト名]/AppDelegateファイルを開いてください。

  3. SDK初期化コードの前に  setIsFacebookDeferredAppLinkEnabled

    関数を呼び出してください。

isFacebookDeferredAppLinkEnabledの値がYESで、Facebook SDKがインストールされていれば、SDKではFacebookディファードアプリリンクを収集します。

123
[AirBridge setIsFacebookDeferredAppLinkEnabled:YES];

[AirBridge getInstance:@"YOUR_APP_SDK_TOKEN" appName:@"YOUR_APP_NAME" withLaunchOptions:launchOptions];

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

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

プッシュ通知のディープリンクトラッキング設定

プッシュ通知がクリックされた時、handleNotificationDeeplink の関数を呼び出し、プッシュ通知ペイロードのディープリンクをSDKに送信してください。

1234567891011121314151617181920212223
- (void)         application:(UIApplication *)application 
didReceiveRemoteNotification:(NSDictionary *)userInfo 
      fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler 
{
    if (UIApplication.sharedApplication.applicationState == UIApplicationStateInactive) {
        NSURL* url = // プッシュ通知ペイロードのディープリンク
        
        [AirBridge.deeplink handleURLSchemeDeeplink:url];
    }
}

- (void)userNotificationCenter:(UNUserNotificationCenter *)center 
didReceiveNotificationResponse:(UNNotificationResponse *)response 
         withCompletionHandler:(void (^)(void))completionHandler API_AVAILABLE(ios(10.0)) 
{
    if (UIApplication.sharedApplication.applicationState == UIApplicationStateInactive
        && [response.actionIdentifier isEqual:UNNotificationDefaultActionIdentifier])
    {
        NSURL* url = // プッシュ通知ペイロードのディープリンク
        
        [AirBridge.deeplink handleURLSchemeDeeplink:url];
    }
}

Tracking Authorize Timeoutの設定

ATTフレームワークを使ってトラッキング許可を選択するポップアップを表示する場合、トラッキング許可を選択しても、選択する前にインストールイベントが送信されるため、インストールイベントからIDFAの収集ができません。

SDK初期化コードの前に trackingAuthorizeTimeout でタイムアウトを設定すれば、Airbridgeはそのタイムアウトの間、ユーザーがポップアップでトラッキング許可を選択するまで待機してからインストールイベントを送信することができます。

  • trackingAuthorizeTimeoutの単位はミリ秒です。

  • trackingAuthorizeTimeoutまでインストールイベントの送信が遅れることがあります。

  • trackingAuthorizeTimeoutはアプリの再起動時に初期化します。

ATTのステータスが選択された時やタムアウトが発生した時、ディファードディープリンクがコールバックに送られます。

アプリの再起動時に毎回タイムアウトを初期化しないためには、isRestartTrackingAuthorizeTimeout をfalseに設定してください。

1234
AirBridge.setting.trackingAuthorizeTimeout = 30 * 1000;
AirBridge.setting.isRestartTrackingAuthorizeTimeout = NO;

[AirBridge getInstance:@"YOUR_APP_SDK_TOKEN" appName:@"YOUR_APP_NAME" withLaunchOptions:launchOptions];

Attention

上記のコードの中の trackingAuthorizeTimeout の値はTracking Authorized Timeoutの時間を任意で設定した例となっています。実際に活用する際には、必ずアプリのUX(ユーザー体験)とATTプロンプトの設定に合わせて値を変更してください。

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

Airbridge SDKには、イベントを送信できない環境に備えてイベントをストレージに保存し、リトライする機能があります。この機能を活用し、Airbridgeがイベントの保存に使うストレージを制限することができます。

1234
// Event count limit
[AirBridge.setting setEventMaximumBufferCount:newValue]
// Event size limit (Byte)
[AirBridge.setting setEventMaximumBufferSize:newValue]

イベント送信周期の設定

Airbridge SDKではイベントを送信する周期を設定できます。イベントを1回送信した後、設定した周期の間はイベントの送信が行われません。デフォルトのイベント送信周期は0ミリ秒です。

1234
// イベントの数の制限
[AirBridge.setting setEventMaximumBufferCount:newValue]
// イベントのサイズの制限(バイト単位)
[AirBridge.setting setEventMaximumBufferSize:newValue]

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

Airbridgeの初期化の際に、内部ストレージに保存されている全てのイベントを削除する機能です。
Airbridgeはイベントを送信する時、欠損を最小化するために未送信イベントを内部ストレージに保存します。この機能を有効化すれば、Airbridgeの初期化の際にストレージのイベントを全て削除します。

12345
// 활성화
Airbridge.setResetEventBufferEnabled(true)

// 비활성화
Airbridge.setResetEventBufferEnabled(false)

Attention

この関数はAirbridgeがトラッキングを始める前に実行される必要があります。つまり、autoStartTracking が trueになっている場合は getInstance の前、false になっている場合は startTracking の前に実行されなければいけません。
このように設定されていなければ、この機能は動作しません。

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

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

12345
// 有効化
Airbridge.setResetEventBufferEnabled(true)

// 無効化
Airbridge.setResetEventBufferEnabled(false)

クリック

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

インプレッション

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

Attention

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

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

Airbridgeのライフサイクルイベントのうち、アプリがバックグラウンドに移動し、セッション中に発生するライフサイクルイベントは基本的に収集されません。このオプションを使用すれば、これらのイベントを収集することができます。

1
[AirBridge.setting setTrackInSessionLifeCycleEventEnabled:YES];

Airbridge無効化設定

Airbridgeの全ての動作を無効化できる機能です。アプリのライフサイクルのトラッキング、イベントの送信など、Airbridgeの全ての機能が停止します。

12345
// 有効化
Airbridge.setResetEventBufferEnabled(true)

// 無効化
Airbridge.setResetEventBufferEnabled(false)

Attention

この関数はAirbridgeの初期化コード(getInstance)より先に実行される必要があります。そうでなければ、この機能は動作しません。

ハイブリッドアプリ設定

WebView環境のイベント送信

WebViewのウェブサイトにインストールされたウェブSDKが送信するイベントをiOS SDKが代わりに送信することができます。
以下のようにWebViewのconfigurationのcontrollerにAirbridgeのウェブインタフェースを追加してください。

12345678
WKWebViewConfiguration* configuration = [[WKWebViewConfiguration alloc] init];

WKUserContentController* controller = [[WKUserContentController alloc] init];
[AirBridge.webInterface injectTo:controller withWebToken:@"YOUR_WEB_TOKEN"];

configuration.userContentController = controller;
    
WKWebView* webview = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];

YOUR_WEB_TOKEN はダッシュボードの Settings > Tokens > Web SDK Token で確認できます。

トラブルシューティング

ウェブクレデンシャル

アプリで自動入力機能を使ってパスワードを保存している場合、webcredentials:... の設定をしなければ、パスワードが applinks:YOUR_APP_NAME.airbridge.io または applinks:YOUR_APP_NAME.deeplink.page のドメインに保存されます。

パスワードが保存されるドメインを変更したい場合、example.com を設定するドメインに変更し、以下のように設定してください。

  1. https://example.com/.well-known/apple-app-site-association のURLで以下の内容をホスティングする必要があります。

12345
{
    "webcredentials": {
        "apps": ["TEAM_ID.APP_BUNDLE_ID"]
    }
}

TEAM_ID.APP_BUNDLE_ID 例) 9JA89QQLNQ.com.apple.wwdc

  1. Xcode> Projectファイル> Signing & Capabilities> Associated Domainsに移動してください。

  2. +ボタンをクリックして webcredentials:example.comを追加してください。

Bitcodeコンパイルエラー

Airbridge iOS SDKはV1.28.0からBitcodeをサポートしていません。(Xcode 14からBitcodeサポートが終了しました。)
アプリプロジェクトでBitcodeを使う場合、以下のようなコンパイルエラーが発生する可能性があります。

Text
1
Textld: XCFrameworkIntermediates/AirBridge/AirBridge.framework/AirBridge(AirBridge-arm64-master.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE)

この問題を解決するには、Podfileファイルに以下のような内容を追加するか、

Podfile
12345
installer.pods_project.targets.each do |target|
    target.build_configurations.each do |configuration|
        configuration.build_settings['ENABLE_BITCODE'] = 'NO'
    end
end

XcodeでENABLE_BITCODEの設定をNOにしてください。

Apple AppstoreではBitcodeのサポートを終了し、Bitcodeを使う.ipaファイルが提出されても自動でBitcodeを除去します。

Xcode 13でビルドできない問題

Airbridge iOS SDKはV1.28.0からXcode 13及びiOS 9、10をサポートしていません。
サポートが必要な場合、Airbridge iOS SDK V1.27.0以下のバージョンを利用してください。

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

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