カスタム HTTP ライブラリでのエージェントの使用

iOS エージェントは、 または クラスのいずれかによって基盤となる実装が処理されたときに、自動的にネットワークリクエストを検出します。これにより、ほとんどの iOS ネットワークリクエストが対象になります。ただし、モバイルアプリケーションでは、カスタム HTTP ライブラリが使用される場合があります。

リクエストトラッキングの追加

リクエストトラッキングを手動で追加するには、リクエストの開始と終了のタイミングをエージェントに通知します。また、応答のステータスをエージェントに通知するようにプロパティを設定します。

要求のトラッキングの開始

HTTP リクエストのトラッキングを開始するには、リクエストを送信する直前に次のメソッドを呼び出します。

警告: このメソッドを使用する前に、 ADEumInstrumentationinitWithKey メソッドのいずれかを使用してエージェントを初期化する必要があります。
@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

次の作業が必要です。

  1. バックエンドにリクエストを送信する前に、generate メソッドを呼び出し、生成されたヘッダーを設定します。

  2. 上記の 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 ライブラリを使用する構成を行うには、次の手順を実行します。

  1. このプロトコルに準拠したクラスを実装します。

    /** 
    * 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
  2. ADEumCollectorChannel を初期化する前に ADEumInstrumentationADEumAgentConfiguration プロパティを設定します。これは を実装するクラスのインスタンスを渡します。最新の iOS SDK ドキュメントを参照してください。
    @property (nonatomic, strong) id<ADEumCollectorChannel> collectorChannel;