カスタム HTTP ライブラリでのエージェントの使用
iOS エージェントは、 または クラスのいずれかによって基盤となる実装が処理されたときに、自動的にネットワークリクエストを検出します。これにより、ほとんどの iOS ネットワークリクエストが対象になります。ただし、モバイルアプリケーションでは、カスタム HTTP ライブラリが使用される場合があります。
- iOS エージェントがカスタムライブラリからのリクエストを検出するには、
ADEumHTTPRequestTrackerクラスを使用してアプリケーションに手動でリクエスト トラッキング コードを追加します。 - サーバ側の処理との相関を許可するようにヘッダーを設定するには、
ADEumServerCorrelationHeadersクラスを使用します。 - カスタムライブラリを使用して、HTTP 経由でビーコンを送信するようにエージェントを設定するには、
ADEumCollectorChannelプロトコルとADEumAgentConfigurationクラスを使用します。
リクエストトラッキングの追加
リクエストトラッキングを手動で追加するには、リクエストの開始と終了のタイミングをエージェントに通知します。また、応答のステータスをエージェントに通知するようにプロパティを設定します。
要求のトラッキングの開始
HTTP リクエストのトラッキングを開始するには、リクエストを送信する直前に次のメソッドを呼び出します。
ADEumInstrumentation の initWithKey メソッドのいずれかを使用してエージェントを初期化する必要があります。@interface ADEumHTTPRequestTracker : NSObject
...
+ (ADEumHTTPRequestTracker *)requestTrackerWithURL:(NSURL *)url;
url は要求される URL です。このパラメータを nil にすることはできません。
HTTP リクエストのトラッキングを完了するには、応答またはエラーを受信した直後に、トラッカーオブジェクトに適切な を設定し、次のメソッドを呼び出してリクエストの結果をエージェントに返します。リクエスト トラッカー プロパティの設定このメソッドを呼び出した後は、このオブジェクトを使用し続けることはできません。別のリクエストを追跡するには、requestTrackerWithURL を再度呼び出します。
- (void)reportDone;
リクエスト トラッカー プロパティの設定
エージェントにコールの結果を返すには、requestTrackerWithURL オブジェクトに次のプロパティを設定する必要があります。
@property (copy, nonatomic) NSError *error;
応答の受信に失敗した場合を示します。リクエストが成功した場合は、nil である必要があります。
@property (copy, nonatomic) NSNumber *statusCode;
応答の HTTP ステータスコード(受信した場合)を示します。
-
応答を受信した場合は、整数である必要があります。
-
エラーが発生し、応答が受信されなかった場合、これは にする必要があります。
@property (copy, nonatomic) NSDictionary *allHeaderFields;
サーバーのレスポンスヘッダーのキーと値を表すディクショナリを指定します。このディクショナリの形式は、 の allHTTPHeadersFields プロパティと同じである必要があります。ディクショナリエレメントは、キーと値のペアで構成されます。キーはヘッダーキー名で、値はヘッダー値です。
エラーが発生し、応答が受信されなかった場合、これは にする必要があります。
例
次のようなリクエストスニペットがあるとします。
- (NSData *)sendRequest:(NSURL *) url error:(NSError **)error {
// implementation omitted
NSData *result = nil;
if (errorOccurred) {
*error = theError;
} else {
result = responseBody;
}
return result;
}
トラッカーを追加すると、次のようになります。
- (NSData *)sendRequest:(NSURL *)url error:(NSError **)error {
ADEumHTTPRequestTracker *tracker = [ADEumHTTPRequestTracker requestTrackerWithURL:url];
// implementation omitted
NSData *result = nil;
if (errorOccurred) {
*error = theError;
tracker.error = theError;
} else {
tracker.statusCode = theStatusCode;
tracker.allHeaderFields = theResponseHeaders;
result = responseBody;
}
[tracker reportDone];
return result;
}
サーバー側の相関を有効にする
リクエストとサーバ側の処理の相関を有効にするには、サーバ側エージェントが検出できる発信リクエストに特定のヘッダーを追加し、応答でサーバ側エージェントから取得したヘッダーを返して、iOS エージェントが使用できるようにします。
これは、標準 HTTP ライブラリに対して自動的に実行されます。
@interface ADEumServerCorrelationHeaders : NSObject
+ (NSDictionary *)generate;
@end
次の作業が必要です。
-
バックエンドにリクエストを送信する前に、generate メソッドを呼び出し、生成されたヘッダーを設定します。
-
上記の allHeaderFields プロパティを使用して、レスポンスヘッダーを返します。
ネットワークリクエストへのカスタムデータの追加
次のメソッドを 1 つ(または複数)呼び出して属性を ADEumHTTPRequestTracker に追加することで、カスタムデータをネットワークリクエストに追加できます。
- (NSData *)sendRequest:(NSURL *)url error:(NSError **)error {
ADEumHTTPRequestTracker *tracker = [ADEumHTTPRequestTracker requestTrackerWithURL:url];
// implementation omitted
NSData *result = nil;
if (errorOccurred) {
*error = theError;
tracker.error = theError;
} else {
tracker.statusCode = theStatusCode;
tracker.allHeaderFields = theResponseHeaders;
result = responseBody;
}
// Custom data can be added to this one request.
// Different types can be used.
// The data added will only appear for this network request and will not persist.
[tracker setUserData:@"trackerStringKey" value:@"Test String Value"];
[tracker setUserDataLong:@"trackerLongKey" value:66004024];
[tracker setUserDataBoolean:@"trackerBooleanKey" value:1];
[tracker setUserDataDouble:@"trackerDoubleKey" value:5905400.6];
[tracker setUserDataDate:@"trackerDateKey" value:[NSDate date]];
[tracker reportDone];
return result;
}カスタム HTTP ライブラリを使用するようにビーコンチャネルを設定
iOS エージェントは、ビーコンを送信するために HTTP を使用します。この目的で、エージェントがカスタム HTTP ライブラリを使用する構成を行うには、次の手順を実行します。
-
このプロトコルに準拠したクラスを実装します。
/** * Protocol for customizing the connection between the agent SDK and the collector. */ @protocol ADEumCollectorChannel <NSObject> /** * Sends a request synchronously and returns the response received, or an error. * * The semantics of this method are exactly equivalent to NSURLConnection's * sendSynchronousRequest:returningResponse:error: method. * * @param request The URL request to load. * @param response Out parameter for the URL response returned by the server. * @param error Out parameter used if an error occurs while processing the request. May be NULL. */ - (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error; @end -
ADEumCollectorChannelを初期化する前にADEumInstrumentationの ADEumAgentConfiguration プロパティを設定します。これはを実装するクラスのインスタンスを渡します。最新の iOS SDK ドキュメントを参照してください。@property (nonatomic, strong) id<ADEumCollectorChannel> collectorChannel;