プログラムによるセッションの制御

デフォルトでは、ユーザが非アクティブになってからモバイルセッションが終了します。たとえば、ユーザがアプリケーションを開くと、セッションは開始され、ユーザが設定した期間にアプリケーションを使用しなくなった後にのみ終了します。ユーザがアプリケーションの再使用を開始すると、新しいセッションが開始されます。

ただし、セッションの期間を定義するのに非アクティブな期間を設定する代わりに、次の API を使用して、セッションの開始と終了をプログラムで制御できます。

 - (void)startNextSession

インストルメンテーション クラスからメソッド startNextSession を呼び出すと、現在のセッションが終了し、新しいセッションが開始されます。API を使用すると、セッションを定義してフレーム化することができます。これにより、ビジネス目標と予想されるユーザフローをより厳密に合わせることができます。たとえば、API を使用して、製品の購入を追跡するセッションを定義したり、新しいユーザを登録したりすることができます。

この API を過剰に使用すると、セッションが調整されます(過剰使用は iOS エージェントごとに 1 分あたり 10 コールを超えた場合になりますが、変更される可能性があります)。API を使用しない場合、セッションは、ユーザが非アクティブになった後、デフォルトの終了にフォールバックします。

プログラムによって制御されるセッションの例

次の例では、現在のセッションが終了し、チェックアウトが行われると新しいセッションが開始されます。
Objective-C
-(void) checkout {
    AppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
    NSString *checkoutUrl = [appDelegate.url stringByAppendingString:@"rest/cart/co/"];
    NSURL *url = [NSURL URLWithString:checkoutUrl];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
    NSURLResponse *response = nil;
    NSError *error = nil;
    
    NSData *body = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    const char *responseBytes = [body bytes];
    if (responseBytes == nil)
        checkoutResponse = [NSString stringWithUTF8String:"Could not connect to the server"];
    else {
        checkoutResponse = [NSString stringWithUTF8String:responseBytes];
        [ADEumInstrumentation startNextSession];
    }
}
Swift
func checkout() {
    let appDelegate = UIApplication.shared.delegate as? AppDelegate
    let checkoutUrl = appDelegate?.url ?? "" + ("rest/cart/co/")
    let url = URL(string: checkoutUrl)
    var request: NSMutableURLRequest? = nil
    if let url = url {
        request = NSMutableURLRequest(url: url, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 60.0)
    }
    var response: URLResponse? = nil
    var error: Error? = nil
    var body: Data? = nil
    if let request = request {
        body = try? NSURLConnection.sendSynchronousRequest(request, returning: &response)
    }
    let responseBytes = Int8(body?.bytes ?? 0)
    if responseBytes == nil {
        checkoutResponse = String(utf8String: "Could not connect to the server")
    } else {
        checkoutResponse = String(utf8String: &responseBytes)
        ADEumInstrumentation.startNextSession()
    }
}