このデベロッパー ガイドでは、Google タグ マネージャーを 説明します。
はじめに
デベロッパーが設定を変更できる Google タグ マネージャー Google タグマネージャーを使用して インターフェースを使用して、アプリケーション バイナリを再ビルドしてアプリに再送信する必要はない マーケットプレイスです
これは、構成値を管理する場合に便利です。 後で変更の必要が生じた場合に、 含まれます。
- さまざまな UI 設定と表示文字列
- アプリで配信される広告のサイズ、場所、タイプ
- ゲームの設定
構成値は、ルールを使用して実行時に評価することもできます。 次のような動的構成を有効にします。
- 画面サイズに基づいて広告バナーのサイズを決定する
- 言語と地域を使用して UI 要素を構成する
Google タグ マネージャーではトラッキング タグの動的な実装も可能 使用する必要がありますデベロッパーは重要なイベントをデータにプッシュできる 呼び出すトラッキング タグやピクセルを後で決めることができます。 現在、タグ マネージャーでサポートされているタグは次のとおりです。
- Google モバイルアプリ解析
- カスタム関数呼び出しタグ
始める前に
このスタートガイドを使用するには、次のものが必要です。
- Google タグ マネージャー アカウント
- 新しいタグ マネージャー コンテナと値収集マクロ
- Google タグ マネージャーを実装する iOS 向けモバイルアプリ
- Google アナリティクス サービス : タグ マネージャー ライブラリが含まれています。
Google タグ マネージャーを初めてご利用の場合は、 <ph type="x-smartling-placeholder"></ph> このガイドの続きに進む前に、コンテナ、マクロ、ルールの詳細(ヘルプセンター)をご覧ください。
スタートガイド
このセクションでは、タグ マネージャーの一般的なワークフローについて説明します。
- Google タグ マネージャー SDK をプロジェクトに追加する
- コンテナのデフォルト値の設定
- コンテナを開く
- コンテナから構成値を取得する
- DataLayer にイベントをプッシュする
- プレビューとコンテナを公開する
1. Google タグ マネージャー SDK をプロジェクトに追加する
Google タグ マネージャー SDK を使用するには、URL にコードを
libGoogleAnalyticsServices.a
Library
の Google タグ マネージャー(GTM)ヘッダー ファイル
SDK パッケージのディレクトリをプロジェクトに追加します。
次に、アプリ ターゲットのリンクされたライブラリに以下を追加します( 次の値がすでに存在します。
CoreData.framework
SystemConfiguration.framework
libz.dylib
libsqlite3.dylib
libGoogleAnalyticsServices.a
アプリケーションでこの ID にアクセスする場合は、 (IDFA)と、そのフレームワークが提供するトラッキング フラグ Google タグ マネージャー SDK マクロを追加する際は、次のライブラリもリンクする必要があります。
libAdIdAccess.a
AdSupport.framework
2. プロジェクトへのデフォルトのコンテナ ファイルの追加
Google タグ マネージャーでは、アプリの初回実行時にデフォルトのコンテナが使用されます。デフォルト アプリが新しいコンテナを取得できるようになるまで、 接続します
デフォルトのコンテナ バイナリをダウンロードしてアプリケーションに追加する手順は次のとおりです。
- Google タグ マネージャーの管理画面にログインします。
- ダウンロードするコンテナのバージョンを選択します。
- [ダウンロード] ボタンをクリックしてコンテナ バイナリを取得します。
- バイナリ ファイルを 「補助ファイル」フォルダに移動します。フォルダに配置されます。
デフォルトのファイル名はコンテナ ID です(例: GTM-1234
)。完了したら、
ダウンロードしたファイルには、ファイル名からバージョンのサフィックスを
正しい命名規則に従っていることを確認してください。
バイナリ ファイルの使用をおすすめしますが、コンテナにルールやタグが含まれていない場合は、
シンプルな
プロパティ リストまたは JSON
ファイルを使用してください。
ファイルはメインバンドルに配置し、
命名規則は <Container_ID>.<plist|json>
です。
たとえば、コンテナ ID が GTM-1234
の場合は、次のように指定できます。
名前のプロパティ リスト ファイルに、デフォルトのコンテナ値を指定します。
GTM-1234.plist
。
3. コンテナを開く
コンテナから値を取得する前に、アプリケーションで 作成されます。コンテナを開くと、そのコンテナがディスク(利用可能な場合)から読み込まれます。 がネットワークからアクセス権をリクエストします(必要な場合)。
iOS でコンテナを開く最も簡単な方法は、
openContainerWithId:tagManager:openType:timeout:notifier:
。次の例のようになります。
// MyAppDelegate.h // This example assumes this file is using ARC. #import <UIKit/UIKit.h> @class TAGManager; @class TAGContainer; @interface MyAppDelegate : UIResponder <UIApplicationDelegate> @property (nonatomic, strong) TAGManager *tagManager; @property (nonatomic, strong) TAGContainer *container; @end // MyAppDelegate.m // This example assumes this file is using ARC. #import "MyAppDelegate.h" #import "TAGContainer.h" #import "TAGContainerOpener.h" #import "TAGManager.h" @interface MyAppDelegate ()<TAGContainerOpenerNotifier> @end @implementation MyAppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.tagManager = [TAGManager instance]; // Optional: Change the LogLevel to Verbose to enable logging at VERBOSE and higher levels. [self.tagManager.logger setLogLevel:kTAGLoggerLogLevelVerbose]; /* * Opens a container. * * @param containerId The ID of the container to load. * @param tagManager The TAGManager instance for getting the container. * @param openType The choice of how to open the container. * @param timeout The timeout period (default is 2.0 seconds). * @param notifier The notifier to inform on container load events. */ [TAGContainerOpener openContainerWithId:@"GTM-XXXX" // Update with your Container ID. tagManager:self.tagManager openType:kTAGOpenTypePreferFresh timeout:nil notifier:self]; // Method calls that don't need the container. return YES; } // TAGContainerOpenerNotifier callback. - (void)containerAvailable:(TAGContainer *)container { // Note that containerAvailable may be called on any thread, so you may need to dispatch back to // your main thread. dispatch_async(dispatch_get_main_queue(), ^{ self.container = container; }); } // The rest of your app delegate implementation.
4. コンテナから構成値を取得する
コンテナが開いたら、次のコマンドを使用して構成値を取得できます。
<type>ForKey:
メソッド:
// Retrieving a configuration value from a Tag Manager Container. MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; TAGContainer *container = appDelegate.container; // Get the configuration value by key. NSString *title = [container stringForKey:@"title_string"];
存在しないキーを使用してリクエストが行われると、適切なデフォルト値が返されます。 渡す必要があります。
// Empty keys will return a default value depending on the type requested. // Key does not exist. An empty string is returned. NSString subtitle = [container stringForKey:@"Non-existent-key"]; [subtitle isEqualToString:@""]; // Evaluates to true.
5. データレイヤーに値をプッシュする
DataLayer は、タップ情報など、アプリに関するランタイム情報を有効にするマップです。 イベントやスクリーン ビューを 1 つのキャンペーンで されます。
たとえば、スクリーン ビューに関する情報を DataLayer マップにプッシュすると、 タグ マネージャーの管理画面で、コンバージョン ピクセルを配信するタグを設定できます。 非常に手間のかかる作業を必要とせずに アプリにコーディングします。
push:
を使ってイベントをデータレイヤーにプッシュする
// // ViewController.m // Pushing an openScreen event with a screen name into the data layer. // #import "MyAppDelegate.h" #import "TAGDataLayer.h" #import "ViewController.h" @implementation ViewController - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; // The container should have already been opened, otherwise events pushed to // the data layer will not fire tags in that container. TAGDataLayer *dataLayer = [TAGManager instance].dataLayer; [dataLayer push:@{@"event": @"openScreen", @"screenName": @"Home Screen"}]; } // Rest of the ViewController implementation @end
管理画面で、タグ(Google アナリティクス タグなど)を作成できるようになりました。 次のルールを作成します。 は「openScreen」と等しい。スクリーン名を渡すには 「screenName」を参照するデータレイヤー マクロを Key-Value ペアですタグを作成することもできます。 (Google 広告のコンバージョン ピクセルなど)を使用して、特定のスクリーン ビューに対してのみ配信されるようにします。 が「openScreen」と等しいルールを作成する && は「ConfirmationScreen」と等しい。
6. プレビューとコンテナを公開する
マクロの値は、常に現在公開されているバージョンに対応します。 最新バージョンのコンテナを公開する前に、 下書きのコンテナです。
コンテナをプレビューするには、Google Chat でプレビュー URL を
タグ マネージャー管理画面でコンテナのバージョンを選択
プレビューするボタンをクリックし、[Preview
] を選択します。お待ちください
このプレビュー URL は後の手順で必要になります。
コンテナのプレビューを有効にするには、アプリにコードを追加する必要があります 実装ファイルをデリゲートし、Google タグ マネージャーのプレビュー URL を定義する プロジェクトのプロパティ リストにあるスキームを指定します。
まず、次の太字のコード スニペットをアプリのデリゲート ファイルに追加します。
@implementation MyAppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.tagManager = [TAGManager instance]; // Add the code in bold below to preview a Google Tag Manager container. // IMPORTANT: This code must be called before the container is opened. NSURL *url = [launchOptions valueForKey:UIApplicationLaunchOptionsURLKey]; if (url != nil) { [self.tagManager previewWithUrl:url]; } id<TAGContainerFuture> future = [TAGContainerOpener openContainerWithId:@"GTM-XXXX" // Placeholder Container ID. tagManager:self.tagManager openType:kTAGOpenTypePreferNonDefault timeout:nil]; // The rest of your method implementation. self.container = [future get]; return YES; } // Add the code in bold below preview a Google Tag Manager container. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { if ([self.tagManager previewWithUrl:url]) { return YES; } // Code to handle other urls. return NO; }
次に、URL 識別子として次の URL 識別子と URL スキームを アプリケーションのプロパティ リストファイルの URL 型キー:
URL identifier: your.package_name URL scheme: tagmanager.c.your.package.name
エミュレータまたは実機でリンクを開くと、 アプリでドラフト コンテナをプレビューできます。
ドラフトの構成値を公開する準備ができたら、 アプリケーション、 コンテナを公開します。
詳細設定
モバイル向け Google タグ マネージャーには、多くの高度な設定が用意されています。 オプションを使用してランタイム条件に基づいて値を選択できる コンテナを手動で更新したり、 学びました。以降のセクションでは、Google Cloud で最も一般的な できます。
コンテナを開くための詳細オプション
Google タグ マネージャー SDK には、タグを開くための方法がいくつか用意されています。 : 読み込みプロセスをより詳細に制御できるコンテナ:
openContainerById:callback:
openContainerById:callback:
は、ファイルを開くための最も低いレベルで最も柔軟な API です。
されます。すぐにデフォルトのコンテナが返されます。
コンテナが保存されていない場合は、ディスクまたはネットワークから非同期に読み込みます。
コンテナが存在するか、保存されたコンテナが最新でない場合(12 時間以上経過していない場合)。
@interface ContainerCallback : NSObject<TAGContainerCallback> @end @implementation ContainerCallback /** * Called before the refresh is about to begin. * * @param container The container being refreshed. * @param refreshType The type of refresh which is starting. */ - (void)containerRefreshBegin:(TAGContainer *)container refreshType:(TAGContainerCallbackRefreshType)refreshType { // Notify UI that container refresh is beginning. } /** * Called when a refresh has successfully completed for the given refresh type. * * @param container The container being refreshed. * @param refreshType The type of refresh which completed successfully. */ - (void)containerRefreshSuccess:(TAGContainer *)container refreshType:(TAGContainerCallbackRefreshType)refreshType { // Notify UI that container is available. } /** * Called when a refresh has failed to complete for the given refresh type. * * @param container The container being refreshed. * @param failure The reason for the refresh failure. * @param refreshType The type of refresh which failed. */ - (void)containerRefreshFailure:(TAGContainer *)container failure:(TAGContainerCallbackRefreshFailure)failure refreshType:(TAGContainerCallbackRefreshType)refreshType { // Notify UI that container request has failed. } @end
読み込みプロセス中に openContainerById:callback:
件の問題が発生しました。
ライフサイクル コールバックを複数用意し、コードがいつ呼び出されているかを
読み込みリクエストが開始したかどうか、失敗または成功の理由、および
コンテナは最終的にディスクまたはネットワークから読み込まれていました。
アプリケーションでデフォルト値の使用が許容される場合を除き、 これらのコールバックを使用して、保存済みまたはネットワークが コンテナが読み込まれました。保存したファイルや ネットワーク コンテナに作成されます。ただし、アプリの初回実行が ネットワーク接続です。
openContainerById:callback:
が次の enum
を渡す
各値を渡します。
RefreshType
値 | 説明 |
---|---|
kTAGContainerCallbackRefreshTypeSaved
|
更新リクエストは、ローカルに保存されたコンテナを読み込んでいます。 |
kTAGContainerCallbackRefreshTypeNetwork
|
更新リクエストは、ネットワーク経由でコンテナを読み込みます。 |
RefreshFailure
値 | 説明 |
---|---|
kTAGContainerCallbackRefreshFailureNoSavedContainer
|
保存されているコンテナはありません。 |
kTAGContainerCallbackRefreshFailureIoError
|
I/O エラーによりコンテナを更新できませんでした。 |
kTAGContainerCallbackRefreshFailureNoNetwork
| ネットワーク接続を利用できません。 |
kTAGContainerCallbackRefreshFailureNetworkError
|
ネットワークエラーが発生しました。 |
kTAGContainerCallbackRefreshFailureServerError
|
サーバーでエラーが発生しました。 |
kTAGContainerCallbackRefreshFailureUnknownError
|
分類できないエラーが発生しました。 |
デフォルト以外の最新のコンテナを開く方法
TAGContainerOpener
は openContainerById:callback:
をラップします
コンテナを開くための便利な方法が 2 つあります。
openContainerWithId:tagManager:openType:timeout:notifier:
と
openContainerWithId:tagManager:openType:timeout:
。
これらのメソッドはそれぞれ、デフォルト以外の値または 作成します。
kTAGOpenTypePreferNonDefault
は、ほとんどのアプリケーションで推奨されます。
特定の期間内に使用可能な、デフォルト以外の最初のコンテナを返します。
ディスクまたはネットワークからのタイムアウト期間です。たとえそのコンテナが
過去 12 時間以上経過していないことを確認します。古い保存済みコンテナが返されると、
非同期ネットワーク リクエストを作成します。
kTAGOpenTypePreferNonDefault
を使用する場合、デフォルトは
他のコンテナが使用できない場合、またはタイムアウト期間が指定された場合は、container が返されます。
超えています。
kTAGOpenTypePreferFresh
が新しいコンテナを
指定のタイムアウト期間内にディスクまたはネットワークに送られます。
ネットワーク モジュールが
接続が利用できないか、タイムアウト時間を超過しています。
kTAGOpenTypePreferFresh
の使用はおすすめしません
リクエスト時間が長くなるとユーザーエクスペリエンスに顕著な影響を与える可能性がある
使用しないでください。また、
TAGContainer::refresh
(指定なし)
ネットワークコンテナのリクエストを強制的に
実行できます
これらの便利なメソッドはどちらも非ブロッキングです。
openContainerWithId:tagManager:openType:timeout:
は以下を返します。
TAGContainerFuture
オブジェクト。このオブジェクトの get
メソッドが
読み込まれるとすぐに TAGContainer
(ただし、それまではブロックされます)。
openContainerWithId:tagManager:openType:timeout:notifier:
メソッドは単一のコールバックを受け取り、
呼び出されると呼び出されます。
どちらの方法でも、デフォルトのタイムアウト時間は
2.0
秒。
ルールを使用した実行時のマクロの評価
コンテナはルールを使用して実行時に値を評価できます。ルールの基準となるのは デバイスの言語、プラットフォーム、その他のマクロ値などの条件に基づいて設定できます。対象 たとえば、ルールを使用して、指定された文字列に基づいてローカライズされた表示文字列を 実行時にデバイスの言語を指定します。これを構成するには、 次のルールが適用されます。
<ph type="x-smartling-placeholder">その後、言語ごとに値コレクション マクロを作成して、 適切な言語コードを挿入する必要があります。このコンテナが が公開されると、アプリはローカライズされた表示を 実行時にユーザーのデバイスの言語に応じて異なります。
デフォルトのコンテナにルールが必要な場合は、 バイナリ コンテナ ファイルをデフォルトとして設定 されます。
<ph type="x-smartling-placeholder"></ph> ルールの構成に関する詳細(ヘルプセンター)
バイナリのデフォルト コンテナ ファイル
ルールが必要なデフォルト コンテナではバイナリ コンテナ ファイルを使用する プロパティ リストファイルまたは JSON ではなく ファイルをデフォルトのコンテナとして使用します。バイナリ コンテナは、コンテナ イメージの マクロ値を実行時に設定することは可能で、 プロパティ リストまたは JSON ありません。
バイナリ コンテナ ファイルは、Google タグ マネージャーのウェブからダウンロードできます。
インターフェースと
次の命名規則に従ってメイン アプリケーション バンドルに追加する必要があります。
GTM-XXXX
。ここで、ファイル名は
指定します。
プロパティ リスト ファイルや JSON ファイルが バイナリ コンテナ ファイルが存在する場合、SDK はバイナリ コンテナ 作成しました。
関数呼び出しマクロの使用
関数呼び出しマクロは、関数の戻り値に 関数を呼び出すことができます。関数呼び出しマクロは Google タグ マネージャーのルールに次のようなランタイム値を組み込む 設定された価格に基づいて、ユーザーにどの価格を 言語や通貨の把握に役立ちます
関数呼び出しマクロを構成するには:
- Google タグ マネージャーの管理画面で関数呼び出しマクロを定義します。 引数は、必要に応じて Key-Value ペアとして構成できます。
TAGFunctionCallMacroHandler
を実装するハンドラを定義する プロトコル:// MyFunctionCallMacroHandler.h #import "TAGContainer.h" // The function name field of the macro, as defined in the Google Tag Manager // web interface. extern NSString *const kMyMacroFunctionName; @interface MyFunctionCallMacroHandler : NSObject<TAGFunctionCallMacroHandler> @end // MyFunctionCallMacroHandler.m #import "MyFunctionCallMacroHandler.h" // Corresponds to the function name field in the Google Tag Manager interface. NSString *const kMyMacroFunctionName = @"myConfiguredFunctionName"; @implementation MacroHandler - (id)valueForMacro:(NSString *)functionName parameters:(NSDictionary *)parameters { if ([functionName isEqualToString:kMyMacroFunctionName]) { // Process and return the calculated value of this macro accordingly. return macro_value; } return nil; } @end
- TAGContainer::registerFunctionCallMacroHandler:forMacro: と関数名を使用してハンドラを登録する Google タグ マネージャーの管理画面で指定した次の値:
// // MyAppDelegate.h // #import <UIKit/UIKit.h> @interface MyAppDelegate : UIResponder <UIApplicationDelegate> @end // // MyAppDelegate.m // #import "MyAppDelegate.h" #import "MyFunctionCallMacroHandler.h" #import "TAGContainer.h" #import "TAGContainerOpener.h" #import "TAGManager.h" @implementation MyAppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Open the container. id<TAGContainerFuture> future = [TAGContainerOpener openContainerWithId:@"GTM-XXXX" // Placeholder Container ID. tagManager:[TAGManager instance] openType:kTAGOpenTypePreferNonDefault timeout:nil]; // Method calls that don't need the container. self.container = [future get]; // Register a function call macro handler using the macro name defined // in the Google Tag Manager web interface. [self.container registerFunctionCallMacroHandler:[[MyFunctionCallMacroHandler alloc] init] forMacro:kMyMacroFunctionName]; } @end
関数呼び出しタグの使用
関数呼び出しタグを使用すると、事前登録した関数を常に実行できる
イベントがデータレイヤーにプッシュされ、タグルール
true
と評価します。
関数呼び出しタグを構成するには:
- Google タグ マネージャーの管理画面で関数呼び出しタグを定義します。 引数は、必要に応じて Key-Value ペアとして構成できます。
TAGFunctionCallTagHandler
プロトコルを実装します。// // MyFunctionCallTagHandler.h // #import "TAGContainer.h" extern NSString *const kMyTagFunctionName; @interface MyFunctionCallTagHandler : NSObject<TAGFunctionCallTagHandler> @end // // MyFunctionCallTagHandler.m // // Corresponds to the function name field in the Google Tag Manager interface. NSString *const kMyTagFunctionName = @"myConfiguredFunctionName"; @implementation MyFunctionCallTagHandler /** * This method will be called when any custom tag's rule(s) evaluate to true and * should check the functionName and process accordingly. * * @param functionName corresponds to the function name field, not tag * name field, defined in the Google Tag Manager web interface. * @param parameters An optional map of parameters as defined in the Google * Tag Manager web interface. */ - (void)execute:(NSString *)functionName parameters:(NSDictionary *)parameters { if ([functionName isEqualToString:kMyTagFunctionName]) { // Process accordingly. } } @end
- タグ名を使用して、関数呼び出しのタグハンドラを登録します。 Google タグ マネージャーの管理画面:
// // MyAppDelegate.h // #import <UIKit/UIKit.h> @interface MyAppDelegate : UIResponder <UIApplicationDelegate> @end // // MyAppDelegate.m // #import "MyAppDelegate.h" #import "MyFunctionCallTagHandler.h" #import "TAGContainer.h" #import "TAGContainerOpener.h" #import "TAGManager.h" @implementation MyAppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Open the container. id<TAGContainerFuture> future = [TAGContainerOpener openContainerWithId:@"GTM-XXXX" // Placeholder Container ID. tagManager:[TAGManager instance] openType:kTAGOpenTypePreferNonDefault timeout:nil]; // Method calls that don't need the container. self.container = [future get]; // Register a function call tag handler using the function name of the tag as // defined in the Google Tag Manager web interface. [self.container registerFunctionCallTagHandler:[[MyFunctionCallTagHandler alloc] init] forTag:kMyTagFunctionName]; } @end
カスタムの更新間隔の設定
Google タグ マネージャー SDK は
現在のコンテナの経過時間が 12 時間を超えた場合は新しいコンテナを目標の値を設定するには、
カスタム コンテナの更新期間を設定する場合は、
NSTimer
(例:
次の例をご覧ください。
- (void)refreshContainer:(NSTimer *)timer { [self.container refresh]; } self.refreshTimer = [NSTimer scheduledTimerWithTimeInterval:<refresh_interval> target:self selector:@selector(refreshContainer:) userInfo:nil repeats:YES];
ロガーによるデバッグ
Google タグ マネージャー SDK では、デフォルトでエラーと警告がログに出力されます。
より詳細なログを有効にすると、デバッグに役立ち、
次の例のように、独自の Logger
を実装します。
// MyAppDelegate.h // This example assumes this file is using ARC. // This Logger class will print out not just errors and warnings (as the default // logger does), but also info, debug, and verbose messages. @interface MyLogger: NSObject<TAGLogger> @end @implementation MyLogger - (void)error:(NSString *)message { NSLog(@"Error: %@", message); } - (void)warning:(NSString *)message { NSLog(@"Warning: %@", message); } - (void)info:(NSString *)message { NSLog(@"Info: %@", message); } - (void)debug:(NSString *)message { NSLog(@"Debug: %@", message); } - (void)verbose:(NSString *)message { NSLog(@"Verbose: %@", message); } @end // MyAppDelegate.m // This example assumes this file is using ARC. @implementation MyAppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.tagManager = [TAGManager instance]; self.tagManager.logger = [[MyLogger alloc] init]; // Rest of Tag Manager and method implementation. return YES; } // Rest of app delegate implementation. @end
または、次のコマンドを使用して、既存のロガーの LogLevel を設定できます。
TagManager::logger::setLogLevel
,
使用します。
// Change the LogLevel to INFO to enable logging at INFO and higher levels. self.tagManager = [TAGManager instance]; [self.tagManager.logger setLogLevel:kTAGLoggerLogLevelInfo];