Skip to content
Last updated

iOS SDK 1.2.1 クイックスタート

Treasure Data用のiOSおよびtvOS SDKです。このSDKを使用すると、アプリケーションのイベントをTreasure Dataに簡単にインポートできます。このSDKは以下をサポートしています:

  • iOS 12.0以上
  • tvOS 12.0以上

前提条件と要件

  • iOS開発の基礎知識(Xcode、CocoaPods)
  • iOS 12.0以降
  • Treasure Dataの基礎知識
  • Treasure Data iOS SDKリリースへのアクセス
  • GDPRへの準拠の確保

tvOS

このSDKはApple tvOSバージョン12.0以上をサポートしています。APIとその動作は、iOSアプリケーションで使用される場合とほぼ同じですが、以下の点が異なります:

  • tvOSでは、キャッシュストレージはいつでも削除される可能性のあるキャッシュディレクトリに保存されます。データの損失を防ぐため、イベントのアップロードAPIをできるだけ頻繁に呼び出すことをお勧めします。

バージョン1.0.1への移行

バージョン1.0.1には、以前のバージョンとの後方互換性がない大きな変更があります。バージョン0.9.0以前からアップグレードする場合、以下の手順を実行しないとコードが正しく動作しません:

  • APIエンドポイントがIngestionエンドポイントに変更されました。デフォルト値は[ https://us01.records.in.treasuredata.com ]です。
  • initializeApiEndpoint APIは使用できなくなりました。代わりにinitializeWithApiKey:apiEndpoint:を使用してください。
  • uuidは予約されたカラム名になりました。イベントのuuidキーに値を追加しようとしても、データベースにそのカラムは表示されません。
  • td_ipフィールドを追加することによるクライアントIDの自動トラッキングはサポートされなくなりました。代わりに、新しいenableAutoTrackingIPおよびdisableAutoTrackingIP APIを使用してください。

Swiftでの使用

詳細については、このTreasure Data Swiftサンプルプロジェクトを参照してください。

インストール

ライブラリをインストールする方法はいくつかあります:

オプション1: CocoaPods

SDKをセットアップするにはCocoaPodsが必要です。まだインストールしていない場合は、最初にインストールしてください。

gem install cocoapods

次に、Podfileに以下の行を追加します。

pod 'TreasureData-iOS-SDK', '= 1.0.1'

SwiftでSDKを使用する場合は、Podfileに以下の行を追加します。

use_frameworks!

最後に、'pod install'を実行します。

pod install

.xcodeprojファイルではなく.xcworkspaceファイルを開いてプロジェクトを再度開くことを忘れないでください。

オプション2: Swift Package Manager

XcodeからFile > Swift Packages > Add Package Dependencyを選択し、https://github.com/treasure-data/td-ios-sdk.gitを入力してインストールできます。

または、Package.swiftファイルのdependencies配列に以下の行を追加します:

.package(url: "https://github.com/treasure-data/td-ios-sdk.git", .upToNextMajor(from: "1.0.1"))

オプション3: Framework

バージョン0.9.0以降、Treasure Dataはスタンドアロンフレームワークをサポートしていません。

GDPR - 個人情報のトラッキング

注意

収集すべき個人情報がある場合は、会社のデータプライバシー責任者および法務顧問とデータ収集ポリシーを確認する必要があります。個人のトラッキングを有効にする場合は、個々のユーザーのトラッキングへのオプトインを追跡するために、同意管理システムを統合することをお勧めします。

SDKは、多くの煩雑なif-else文に頼ることなく、デバイス全体のトラッキングを簡単にオプトアウトするための便利なメソッドを提供しています:

// 独自のイベントをオプトアウト
[[TreasureData sharedInstance] disableCustomEvent];
// TD生成イベントをオプトアウト
[[TreasureData sharedInstance] disableAppLifecycleEvent];
[[TreasureData sharedInstance] disableInAppPurchaseEvent];

これらはenableCustomEventまたはenableAppLifecycleEventを呼び出すことで再度オプトインできます。これらの設定は永続的に保存されるため、アプリの起動をまたいで保持されます。一般的に、これらのメソッドは、SDKを初期化するたびではなく、ユーザーの選択を反映するときに呼び出す必要があります。デフォルトでは、カスタムイベントは有効で、アプリライフサイクルイベントは無効です。

  • resetUniqIdを使用して、後続のイベントでデバイスの識別をリセットします。td_uuidは別の値にランダム化され、{"td_ios_event": "forget_device_id", "td_uuid": <old_uuid>}を含む追加イベントがdefaultTableにキャプチャされます。

テストでは、収集している情報を確認して、意図した個人情報のみが含まれ、それ以上のものが含まれていないことを確認してください。

基本的な使用方法: Objective-C

iOS SDKがインストールされた後、以下の手順により、書き込み専用APIキーでTreasureDataオブジェクトを初期化し、ローカルバッファにイベントを追加し、イベントのバッファをアップロードできます。

SDKヘッダーファイルのインポート

#import <TreasureData-iOS-SDK/TreasureData.h>

Treasure Data APIキーの登録

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [TreasureData initializeWithApiKey:@"your_api_key"];
}

YOUR_API_KEY は、実際の apikey 文字列に置き換える必要があります。API キーは、TD Console のプロファイルから取得できます。Write-only API key の使用が推奨されます。

ローカルバッファへのイベントの追加

ローカルバッファにイベントを追加するには、TreasureDataaddEventまたはaddEventWithCallback APIを呼び出します。

- (IBAction)clickButton:(id)sender {
    [[TreasureData sharedInstance] addEventWithCallback:@{
                       @"name": @"boo bar",
                       @"age": @42,
                       @"comment": @"hello world"
                   }
                   database:@"testdb"
                      table:@"demotbl"
                  onSuccess:^(){
                      NSLog(@"addEvent: success");
                  }
                    onError:^(NSString* errorCode, NSString* message) {
                        NSLog(@"addEvent: error. errorCode=%@, message=%@", errorCode, message);
                    }];

    // または、単純に...
    //   [[TreasureData sharedInstance] addEvent:@{
    //                     @"name": @"boo bar",
    //                     @"age": @42,
    //                     @"comment": @"hello world"
    //                 }
    //                 database:@"testdb"
    //                    table:@"demotbl"];

イベントをインポートするデータベースとテーブルを指定します。データベースとテーブルの合計長は129文字未満である必要があります。各テーブルは最大10000イベントをキャッシュします。

さらに、イベント内のキーの長さは256文字を超えてはならず、イベント内の値の長さは10000文字を超えてはなりません。

バッファされたイベントのTreasure Dataへのアップロード

バッファされたイベントをTreasure Dataにアップロードするには、TreasureDatauploadEventsまたはuploadEventsWithCallback APIを呼び出します。

- (void)applicationDidEnterBackground:(UIApplication *)application {
	__block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
		[application endBackgroundTask:bgTask];
		bgTask = UIBackgroundTaskInvalid;
	}];

    // バッファされたイベントをアップロードするために、いつでもこのAPIを呼び出すことができます。
	[[TreasureData sharedInstance] uploadEventsWithCallback:^() {
			[application endBackgroundTask:bgTask];
			bgTask = UIBackgroundTaskInvalid;
		}
		onError:^(NSString *code, NSString *msg) {
			[application endBackgroundTask:bgTask];
			bgTask = UIBackgroundTaskInvalid;
		}
	];

    // または、単純に...
    //  [[TreasureData sharedInstance] uploadEvents];

バッファされたイベントをいつ、どのくらいの頻度でアップロードするかは、アプリケーションの特性によって異なります。Treasure Dataは、バッファされたイベントをアップロードする適切なタイミングとして、以下のウィンドウを推奨しています:

  • 現在の画面が閉じているとき、またはバックグラウンドに移動しているとき
  • アプリケーションを閉じるとき

送信されたイベントは、Treasure Dataストレージにインポートされる前に数分間バッファされます。

tvOSでは、キャッシュストレージはいつでも削除される可能性のあるキャッシュディレクトリに保存されます。データの損失を防ぐため、イベントのアップロードAPIをできるだけ頻繁に呼び出すことを強くお勧めします。

アップロードの再試行と重複排除

このSDKは、以下の機能の組み合わせと同じ方法でイベントをインポートします:

  • SDKは、イベントがサーバー側に保存されたことの確認を受け取るまで、バッファされたイベントを保持します(少なくとも1回)
  • サーバー側は、デフォルトで過去1時間以内のすべてのイベントの一意のキーを記憶し、重複したインポートを防ぎます(最大1回)。重複排除ウィンドウはデフォルトで1時間なので、重複したイベントを避けるために、バッファされたイベントをそれより長く保持しないでください。

デフォルト値

テーブル、データベース、または任意のテーブルやデータベースに追加されたイベントに対して、キーの値を自動的に設定したい場合は、デフォルト値を設定します。同じキーに複数のデフォルト値が設定されている場合、新しく追加されたイベントには、以下の順序でデフォルト値が適用され、上書きされます:

  1. すべてのテーブルとデータベースを対象とするデフォルト値が最初に適用されます。
  2. データベース内のすべてのテーブルを対象とするデフォルト値が次に適用されます。
  3. イベントが追加されるテーブルを対象とするデフォルト値が次に適用されます。
  4. イベントが追加されるテーブルとデータベースを対象とするデフォルト値が次に適用されます。
  5. 最後に、イベントにそのキーの値がある場合、その値がすべてのデフォルト値を上書きします。

デフォルト値を設定するには:

[[TreasureData sharedInstance] setDefaultValue:@"Value" forKey:@"key" database:nil table:nil]; // すべてのデータベースとテーブルを対象
[[TreasureData sharedInstance] setDefaultValue:@"Value" forKey:@"key" database:"database_name" table:nil]; // データベース"database_name"のすべてのテーブルを対象
[[TreasureData sharedInstance] setDefaultValue:@"Value" forKey:@"key" database:nil table:"table_name"]; // "table_name"を持つすべてのテーブルを対象
[[TreasureData sharedInstance] setDefaultValue:@"Value" forKey:@"key" database:"database_name" table:"table_name"]; // データベース"database_name"のテーブル"table_name"を対象

デフォルト値を取得するには:

NSString *defaultValue = [[TreasureData sharedInstance] defaultValueForKey:@"key" database:"database_name" table:"table_name"]; // データベース"database_name"とテーブル"table_name"を対象とするキーのデフォルト値を取得

デフォルト値を削除するには:

[[TreasureData sharedInstance] removeDefaultValueForKey:@"key" database:"database_name" table:"table_name"]; // データベース"database_name"とテーブル"table_name"を対象とするデフォルト値のみを削除

セッションの開始と終了

startSessionメソッドを呼び出すと、SDKはendSessionが呼び出されるまで保持されるセッションIDを生成します。セッションIDは、カラム名"td_session_id"として出力されます。また、startSessionおよびendSessionメソッドは、{"td_session_event":"start"または"end"}を含むイベントを追加します。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
	[TreasureData initializeWithApiKey:@"YOUR_API_KEY"];
	[[TreasureData sharedInstance] setDefaultDatabase:@"testdb"];
	[[TreasureData sharedInstance] startSession:@"demotbl"];
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
	[[TreasureData sharedInstance] endSession:@"demotbl"];

	__block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
		[application endBackgroundTask:bgTask];
		bgTask = UIBackgroundTaskInvalid;
	}];

	[[TreasureData sharedInstance] uploadEventsWithCallback:^() {
			[application endBackgroundTask:bgTask];
			bgTask = UIBackgroundTaskInvalid;
		}
		onError:^(NSString *code, NSString *msg) {
			[application endBackgroundTask:bgTask];
			bgTask = UIBackgroundTaskInvalid;
		}
		// 出力 =>>
		//   [{"td_session_id":"cad88260-67b4-0242-1329-2650772a66b1",
		//		"td_session_event":"start", "time":1418880000},
		//
		//    {"td_session_id":"cad88260-67b4-0242-1329-2650772a66b1",
		//		"td_session_event":"end", "time":1418880123}
		//    ]
	];

以下のケースを処理したい場合は、グローバルセッショントラッキングのために、クラスメソッドstartSessionendSessionのペアを使用してください。

  • ユーザーがアプリケーションを開き、startSessionを使用してセッショントラッキングを開始します。たとえば、これはセッション#0と呼ばれるかもしれません
  • ユーザーがホーム画面に移動し、endSessionを使用してセッションを終了します
  • ユーザーがデフォルトの10秒以内にアプリケーションを再度開き、セッショントラッキングを再開します。ただし、この新しいセッションをセッション#0と同じセッションとして扱いたい場合
- (void)applicationDidBecomeActive:(UIApplication *)application
{
	[TreasureData startSession];
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
	[TreasureData endSession];
}

この場合、getSessionIdクラスメソッドを使用して現在のセッションIDを取得できます

- (void)applicationDidBecomeActive:(UIApplication *)application
{
	[TreasureData startSession];
    NSLog(@"Session ID=%@", [TreasureData getSessionId]);
}

初回実行の検出

isFirstRunメソッドを使用して初回実行かどうかを検出し、clearFirstRunでフラグをクリアできます。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
		:
    if ([[TreasureData sharedInstance] isFirstRun]) {
        [[TreasureData sharedInstance] addEventWithCallback:@{ @"event": @"installed" }
                               database:@"testdb"
                                  table:@"demotbl"
                              onSuccess:^(){
                                  [[TreasureData sharedInstance] uploadEventsWithCallback:^() {
                                      [[TreasureData sharedInstance] clearFirstRun];
                                    }
                                    onError:^(NSString* errorCode, NSString* message) {
                                      NSLog(@"uploadEvents: error. errorCode=%@, message=%@", errorCode, message);
                                    }
                                   ];
                                }
                                onError:^(NSString* errorCode, NSString* message) {
                                    NSLog(@"addEvent: error. errorCode=%@, message=%@", errorCode, message);
                                }];
    }

高度な使用方法

エラーコードについて

addEventWithCallbackuploadEventWithCallbackなどのコールバック付き関数を使用する場合、これらのメソッドはerrorCode引数を使用してonErrorブロックを呼び出します。この引数は、エラーの原因や種類を判断するのに役立ちます。以下はエラーコードの一覧です。

エラーコード説明
init_error初期化に失敗しました。
invalid_paramAPIに渡されたパラメータが無効でした。
invalid_eventイベントが無効でした。
data_conversionデータのJSON変換に失敗しました。
storage_errorストレージでのデータの読み書きに失敗しました。
network_errorネットワークの問題によりサーバーとの通信に失敗しました。
server_responseサーバーがエラーレスポンスを返しました。

追加設定

エンドポイント

デフォルトのAPIエンドポイント[ https://us01.records.in.treasuredata.com ]は変更できます。例:

[TreasureData initializeWithApiKey:@"your_api_key" apiEndpoint: @"https://specifying-another-endpoint.com"];

暗号化キー

TreasureData.initializeEncryptionKeyで暗号化キーを設定した場合、TreasureData#addEventまたはTreasureData.addEventWithCallbackが呼び出されると、SDKはイベントデータを暗号化して保存します。

[TreasureData initializeEncryptionKey:@"hello world"];

[[TreasureData sharedInstance] addEventWithCallback: ....];

デフォルトデータベース

デフォルトデータベースを指定すると、以降の呼び出しでデータベース名の代わりに「@」記号を使用できます。

[[TreasureData sharedInstance] setDefaultDatabase:@"testdb"];

[[TreasureData sharedInstance] addEventWithCallback:@{ @"event": @"clicked" } table:@"demotbl"]

各イベントへのデバイスUUIDの自動追加

TreasureData#enableAutoAppendUniqId()を呼び出すと、各イベントにデバイスのUUIDが自動的に追加されます。この値は、アプリケーションがアンインストールされるまで変更されません。

[[TreasureData sharedInstance] enableAutoAppendUniqId];

この値はtd_uuidという名前のカラムとして出力されます。

UUIDの取得とリセット

以下のAPIを使用して、現在のUUID(td_uuid)を取得できます。resetUniqIdが呼び出されると、このUUIDは変更されることに注意してください。

NSString *td_uuid = [[TreasureData sharedInstance] getUUID];

以下のAPIを使用して、UUID(td_uuid)をリセットすることもできます。

[[TreasureData sharedInstance] resetUniqId];

各イベントレコードへのUUIDの自動追加

enableAutoAppendRecordUUIDを呼び出すと、各イベントレコードにUUIDが自動的に追加されます。各イベントは異なるUUIDを持ちます。

[[TreasureData sharedInstance] enableAutoAppendRecordUUID];

// カラム名をカスタマイズする場合は、APIに渡します
[[TreasureData sharedInstance] enableAutoAppendRecordUUID:@"my_record_uuid"];

デフォルトでは、record_uuidというカラム名で値が出力されます。

各イベントレコードへの広告IDの自動追加

enableAutoAppendAdvertisingIdentifierを呼び出すと、各イベントレコードに広告IDが自動的に追加されます。

この機能を動作させるには、「Link Binary With Libraries」ビルドフェーズでAd Supportフレームワークをリンクする必要があります。また、ユーザーがiOSデバイスで「広告トラッキングの制限」機能をオンにしていない必要があります。オンになっている場合、Treasure Dataは広告ID(Ad Supportフレームワークから返される値)としてゼロで埋められた文字列を送信します。

iOS 14以降では、AppTrackingTransparencyフレームワークを使用して、広告識別子の使用についてユーザーの明示的な許可を求める必要があります。この要件の実装方法については、AppleのAppTrackingTransparencyに関する公式ドキュメントを参照してください。この機能をオンにする場合、App Storeにアプリをレビュー用に提出する際に、広告識別子を取得する正当な理由を宣言する必要があることに注意してください。

[[TreasureData sharedInstance] enableAutoAppendAdvertisingIdentifier];

// カラム名をカスタマイズする場合は、APIに渡します
[[TreasureData sharedInstance] enableAutoAppendAdvertisingIdentifier:@"custom_ad_id_column"];

デフォルトでは、td_maidというカラム名で値が出力されます。

各イベントへのデバイスモデル情報の自動追加

TreasureData#enableAutoAppendModelInformationを呼び出すと、各イベントにデバイスモデル情報が自動的に追加されます。

[[TreasureData sharedInstance] enableAutoAppendModelInformation];

以下のカラム名と値が出力されます。

  • td_device : UIDevice.model
  • td_model : UIDevice.model
  • td_os_ver : UIDevice.model.systemVersion
  • td_os_type : "iOS"

各イベントへのアプリケーションバージョン情報の自動追加

enableAutoAppendAppInformationを呼び出すと、各イベントにアプリケーションバージョン情報が自動的に追加されます。

[[TreasureData sharedInstance] enableAutoAppendAppInformation];

以下のカラム名と値が出力されます。

  • td_app_ver : Core FoundationキーCFBundleShortVersionString
  • td_app_ver_num : Core FoundationキーCFBundleVersion

各イベントへのロケール設定情報の自動追加

TreasureData#enableAutoAppendLocaleInformationを呼び出すと、各イベントにロケール設定情報が自動的に追加されます。

[[TreasureData sharedInstance] enableAutoAppendLocaleInformation];

以下のカラム名と値が出力されます。

  • td_locale_country : [[NSLocale currentLocale] objectForKey: NSLocaleCountryCode]
  • td_locale_lang : [[NSLocale currentLocale] objectForKey: NSLocaleLanguageCode]

デバイスIPの自動トラッキング

enableAutoTrackingIPを呼び出すと、各イベントにtd_ipカラムでデバイスIPが自動的に追加されます。トラッキングされるIPアドレスは、イベントを追加したときではなく、Treasure Dataにイベントをアップロードしたときのものであることに注意してください。

[[TreasureData sharedInstance] enableAutoTrackingIP];

IPの自動トラッキングを無効にするには:

[[TreasureData sharedInstance] disableAutoTrackingIP];

デバッグログの有効化と無効化

[TreasureData enableLogging];
[TreasureData disableLogging];

アプリライフサイクルイベントの自動トラッキング

アプリライフサイクルイベントのトラッキングはオプションであり、デフォルトでは有効になっていません。enableAppLifecycleEvent()を使用して、アプリライフサイクルイベントを自動的にトラッキングできます。

[[TreasureData sharedInstance] enableAppLifecycleEvent];

トラッキングされるアプリライフサイクルイベントには3つのタイプがあります。

  • TD_IOS_APP_OPEN
  • TD_IOS_APP_INSTALL
  • TD_IOS_APP_UPDATE(td_ios_eventカラムに書き込まれます)

以下は、トラッキングされたインストールイベントの例です。

"td_ios_event" = "TD_IOS_APP_INSTALL";
"td_app_ver" = "1.1";
"td_app_ver_num" = 2;

アプリ内購入イベントの自動トラッキング

アプリ内購入イベントのトラッキングはオプションであり、デフォルトでは有効になっていません。

Treasure Data SDKは、独自のトランザクションオブザーバーを記述することなく、IAP SKPaymentTransactionStatePurchasedイベントを自動的にトラッキングできます。

[[TreasureData sharedInstance] enableInAppPurchaseEvent];

InAppPurchaseEvent、AppLifecycleEvent、customEventの間には微妙な違いがあります。後者の2つは永続的な設定であり、そのステータスはアプリの起動をまたいで保存されます。inAppPurchaseEventは通常のオブジェクトオプションのように動作し、保存されません。新しいTreasureDataインスタンス(initializeWithApiKey()を使用したsharedInstanceのみ)を初期化した後に有効にする必要があります。以下はIAPイベントの例です。

- "td_ios_event" : "TD_IOS_IN_APP_PURCHASE",
- "td_iap_transaction_identifier" : "1000000514091400",
- "td_iap_transaction_date" : "2019-03-28T08:44:12+07:00",
- "td_iap_quantity" : 1,
- "td_iap_product_identifier" : "com.yourcompany.yourapp.yourproduct",
- "td_iap_product_price" : 0.99,
- "td_iap_product_localized_title" : "Your Product Title",
- "td_iap_product_localized_description" : "Your Product Description",
- "td_iap_product_currency_code" : "USD", // これはiOS 10以降でのみ利用可能です

Treasure Dataは、製品に関する完全な情報を取得するために別のSKProductsRequestを実行します。リクエストが失敗した場合、td_iap_product_プレフィックスを持つフィールドはnullになります。currency_codeはiOS 10以降でのみ利用可能です。

Profiles API

この機能はデフォルトではアカウントで有効になっていません。詳細については、カスタマーサポートまたはカスタマーサクセス担当者にお問い合わせください。

info

TreasureDataのsharedInstanceのcdpEndpointプロパティを設定する必要があります。

以下は、Profiles APIを使用してプロファイルを検索する方法の例です。

// TreasureDataを初期化する際にcdpEndpointを設定します
[[TreasureData sharedInstance] setCdpEnpoint: @"[your cdp endpoint goes here]"]

// fetchUserSegmentsを呼び出して、ユーザーセグメントをNSArrayとして取得します

NSArray *audienceTokens = @[@"Your Profile API (Audience) Token here"];
NSDictionary *keys = @{@"your_key": @"your_value"};
NSDictionary<TDRequestOptionsKey, id> *options = @{
    TDRequestOptionsTimeoutIntervalKey: [NSNumber numberWithInteger: 10],
    TDRequestOptionsCachePolicyKey: [NSNumber numberWithUnsignedInteger: NSURLRequestReloadIgnoringCacheData]
};
[[TreasureData sharedInstance] fetchUserSegments:audienceTokens
                                            keys:keys
                                        options:options
                               completionHandler:^(NSArray * _Nullable jsonResponse, NSError * _Nullable error) {
    NSLog(@"fetchUserSegments jsonResponse: %@", jsonResponse);
    NSLog(@"fetchUserSegments error: %@", error);
}];

iOSサポートバージョン

サポートされているiOS/tvOSバージョンのリストについては、GitHubリポジトリを参照してください。

参考資料

追加情報については、iOS SDK Github Repoを参照してください。