<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://doc.ruscomtech.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D0%B8%D0%B9_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0_%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D0%B9_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F_%D0%B4%D0%BB%D1%8F_iOS</id>
	<title>Инструментарий для анализа действий пользователя для iOS - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://doc.ruscomtech.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D0%B8%D0%B9_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0_%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D0%B9_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F_%D0%B4%D0%BB%D1%8F_iOS"/>
	<link rel="alternate" type="text/html" href="https://doc.ruscomtech.ru/index.php?title=%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D0%B8%D0%B9_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0_%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D0%B9_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F_%D0%B4%D0%BB%D1%8F_iOS&amp;action=history"/>
	<updated>2026-09-16T13:25:53Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://doc.ruscomtech.ru/index.php?title=%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D0%B8%D0%B9_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0_%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D0%B9_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F_%D0%B4%D0%BB%D1%8F_iOS&amp;diff=6598&amp;oldid=prev</id>
		<title>IKuznetsov: Новая страница: «= Инструментарий для анализа действий пользователя =  Действие пользователя представляет собой важную операцию в вашем приложении — оно объединяет запросы, навигации и ошибки, возникающие в результате одного взаимодействия пользователя, в одно событ...»</title>
		<link rel="alternate" type="text/html" href="https://doc.ruscomtech.ru/index.php?title=%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D0%B8%D0%B9_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0_%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D0%B9_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F_%D0%B4%D0%BB%D1%8F_iOS&amp;diff=6598&amp;oldid=prev"/>
		<updated>2026-08-19T18:04:50Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «= Инструментарий для анализа действий пользователя =  Действие пользователя представляет собой важную операцию в вашем приложении — оно объединяет запросы, навигации и ошибки, возникающие в результате одного взаимодействия пользователя, в одно событ...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Инструментарий для анализа действий пользователя =&lt;br /&gt;
&lt;br /&gt;
Действие пользователя представляет собой важную операцию в вашем приложении — оно объединяет запросы, навигации и ошибки, возникающие в результате одного взаимодействия пользователя, в одно событие. Полный концептуальный обзор того, как начинаются, заканчиваются действия пользователя и какие данные они собирают, см. в разделе «Действия пользователя». Разделы ниже содержат только сведения об инструментировании, специфичные для &amp;#039;&amp;#039;&amp;#039;iOS&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Автоматизированные измерительные приборы ==&lt;br /&gt;
&lt;br /&gt;
Автоматические действия пользователя вызываются взаимодействием пользователя с обработчиком действий.&lt;br /&gt;
&lt;br /&gt;
=== Названия действий пользователя ===&lt;br /&gt;
&lt;br /&gt;
Общий шаблон именования описан в разделе «Действия пользователя». На &amp;#039;&amp;#039;&amp;#039;iOS&amp;#039;&amp;#039;&amp;#039; две части имени обрабатываются следующим образом:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Имя экрана&amp;#039;&amp;#039;&amp;#039;: Полное имя класса, в котором произошло касание, например, &amp;lt;code&amp;gt;ViewController&amp;lt;/code&amp;gt; для &amp;#039;&amp;#039;&amp;#039;UIKit&amp;#039;&amp;#039;&amp;#039; или &amp;lt;code&amp;gt;ContentView&amp;lt;/code&amp;gt; для &amp;#039;&amp;#039;&amp;#039;SwiftUI&amp;#039;&amp;#039;&amp;#039;. Если вы зададите пользовательское имя представления через API, будет использоваться именно это имя.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Название элемента&amp;#039;&amp;#039;&amp;#039;: ЕдиныйАгент использует название типа компонента элемента, который обрабатывал выделение, например, &amp;lt;code&amp;gt;UIButton&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;коснитесь кнопки UIButton в ViewController&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Примеры обработчиков действий ===&lt;br /&gt;
&lt;br /&gt;
Обработчик действий — это код приложения, привязанный к взаимодействию пользователя, который реализует поведение, запускаемое этим взаимодействием. Только взаимодействия пользователя, к которым прикреплен обработчик действий, могут приводить к выполнению действия пользователем.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;UIKit&amp;#039;&amp;#039;&amp;#039;: Логика выполняется в методе &amp;lt;code&amp;gt;UIApplication&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;sendEvent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SwiftUI&amp;#039;&amp;#039;&amp;#039;: Логика выполняется либо через действие кнопки, либо через модификатор &amp;lt;code&amp;gt;onTapGesture&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Подробное объяснение обработчиков действий см. в разделе «Взаимодействие с пользователем».&lt;br /&gt;
&lt;br /&gt;
=== Настройка автоматической инструментальной обработки ===&lt;br /&gt;
&lt;br /&gt;
Используется &amp;lt;code&amp;gt;Astromkey.setAutomaticUserActionDetectionEnabled(Bool)&amp;lt;/code&amp;gt; для активации или деактивации автоматического определения действий пользователя во время выполнения. Автоматическое определение активно по умолчанию.&lt;br /&gt;
&lt;br /&gt;
При отключении автоматического определения действия пользователя, их взаимодействие с пользователем больше не запускает автоматическое создание действий. Действия пользователя, созданные вручную, &amp;lt;code&amp;gt;createUserAction&amp;lt;/code&amp;gt; остаются без изменений.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Swift&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Astromkey.setAutomaticUserActionDetectionEnabled(false)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Objective-C&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Astromkey setAutomaticUserActionDetectionEnabled:NO];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ручные измерительные приборы ==&lt;br /&gt;
&lt;br /&gt;
Действия пользователей, запускаемые через API, позволяют отслеживать пользовательские рабочие процессы, которые агент не может автоматизировать, например, многоэтапные бизнес-процессы, фоновые задачи или взаимодействия, охватывающие несколько представлений.&lt;br /&gt;
&lt;br /&gt;
=== Создать действие пользователя ===&lt;br /&gt;
&lt;br /&gt;
Используйте &amp;lt;code&amp;gt;Astromkey.createUserAction(configuration: DTXUserActionConfiguration)&amp;lt;/code&amp;gt; для запуска действия пользователя, инициируемого API. Передайте объект &amp;lt;code&amp;gt;DTXUserActionConfiguration&amp;lt;/code&amp;gt; с пользовательским именем, описывающим отслеживаемый вами рабочий процесс. Вызовите функцию &amp;lt;code&amp;gt;complete()&amp;lt;/code&amp;gt; по завершении рабочего процесса.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;createUserAction&amp;lt;/code&amp;gt; всегда возвращает действие пользователя, а недопустимые аргументы обрабатываются молча.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Swift&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let userAction = Astromkey.createUserAction(configuration:&lt;br /&gt;
    DTXUserActionConfiguration(customName: &amp;quot;Процесс оформления заказа&amp;quot;)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
// ... выполнить рабочий процесс ...&lt;br /&gt;
&lt;br /&gt;
userAction.complete()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Objective-C&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DTXUserActionConfiguration *configuration = [[DTXUserActionConfiguration alloc] initWithCustomName:@&amp;quot;Checkout Process&amp;quot;];&lt;br /&gt;
DTXUserAction *userAction = [Astromkey createUserActionWithConfiguration:configuration];&lt;br /&gt;
&lt;br /&gt;
// ... выполнить рабочий процесс ...&lt;br /&gt;
&lt;br /&gt;
[userAction complete];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Автоматическое завершение ===&lt;br /&gt;
&lt;br /&gt;
По умолчанию вызов необходимо выполнить &amp;lt;code&amp;gt;complete()&amp;lt;/code&amp;gt; явно. Если ваш рабочий процесс запускает веб-запросы, и вы хотите, чтобы действие пользователя автоматически завершалось после завершения всех выполняющихся запросов, активируйте этот параметр &amp;lt;code&amp;gt;withCompleteAutomatically(true)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Swift&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let userAction = Astromkey.createUserAction(configuration:&lt;br /&gt;
    DTXUserActionConfiguration(customName: &amp;quot;Процесс оформления заказа&amp;quot;)&lt;br /&gt;
        .withCompleteAutomatically(true)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
// Действие пользователя завершается автоматически после окончания обработки ожидающих запросов.&lt;br /&gt;
// Вы по-прежнему можете вызвать метод complete(), чтобы закрыть его раньше.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Objective-C&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DTXUserActionConfiguration *configuration = [[[DTXUserActionConfiguration alloc] initWithCustomName:@&amp;quot;Checkout Process&amp;quot;] withCompleteAutomatically:YES];&lt;br /&gt;
DTXUserAction *userAction = [Astromkey createUserActionWithConfiguration:configuration];&lt;br /&gt;
&lt;br /&gt;
// Действие пользователя завершается автоматически после окончания обработки ожидающих запросов.&lt;br /&gt;
// Вы по-прежнему можете вызвать метод complete(), чтобы закрыть его раньше.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вы также можете изменить это поведение в любой момент времени в течение выполнения действия пользователем с помощью &amp;lt;code&amp;gt;setCompleteAutomatically(enabled: Bool)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Добавить свойства события ===&lt;br /&gt;
&lt;br /&gt;
Используется &amp;lt;code&amp;gt;addEventProperty&amp;lt;/code&amp;gt; для прикрепления пользовательских данных к действию пользователя. Ключи свойств должны иметь префикс &amp;lt;code&amp;gt;event_properties.&amp;lt;/code&amp;gt;. Свойства, добавленные после &amp;lt;code&amp;gt;complete()&amp;lt;/code&amp;gt; вызова метода, игнорируются без уведомления.&lt;br /&gt;
&lt;br /&gt;
Правила и ограничения именования свойств см. в разделе «Свойства событий и сессий».&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Swift&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let userAction = Astromkey.createUserAction(configuration:&lt;br /&gt;
    DTXUserActionConfiguration(customName: &amp;quot;Процесс оформления заказа&amp;quot;)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
userAction.addEventProperty(&amp;quot;event_properties.payment_method&amp;quot;, value: &amp;quot;credit_card&amp;quot;)&lt;br /&gt;
userAction.addEventProperty(&amp;quot;event_properties.cart_value&amp;quot;, value: 149.99)&lt;br /&gt;
userAction.addEventProperty(&amp;quot;event_properties.item_count&amp;quot;, value: 3)&lt;br /&gt;
&lt;br /&gt;
// ... выполнить рабочий процесс ...&lt;br /&gt;
&lt;br /&gt;
userAction.complete()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Objective-C&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DTXUserActionConfiguration *configuration = [[DTXUserActionConfiguration alloc] initWithCustomName:@&amp;quot;Checkout Process&amp;quot;];&lt;br /&gt;
DTXUserAction *userAction = [Astromkey createUserActionWithConfiguration:configuration];&lt;br /&gt;
&lt;br /&gt;
[userAction addEventProperty:@&amp;quot;event_properties.payment_method&amp;quot; value:@&amp;quot;credit_card&amp;quot;];&lt;br /&gt;
[userAction addEventProperty:@&amp;quot;event_properties.cart_value&amp;quot; value:@(149.99)];&lt;br /&gt;
[userAction addEventProperty:@&amp;quot;event_properties.item_count&amp;quot; value:@(3)];&lt;br /&gt;
&lt;br /&gt;
// ... выполнить рабочий процесс ...&lt;br /&gt;
&lt;br /&gt;
[userAction complete];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Пример: Процесс оформления заказа в интернет-магазине ===&lt;br /&gt;
&lt;br /&gt;
В следующем примере отслеживается процесс оформления заказа как единое действие пользователя, охватывающее несколько методов. Действие запускается в обработчике кнопки, так что время его начала совпадает с выбором пользователя, сохраняется в качестве поля в &amp;#039;&amp;#039;&amp;#039;CheckoutViewController&amp;#039;&amp;#039;&amp;#039; во время обработки платежа и закрывается — с прикрепленными свойствами результата — как в пути успешного завершения, так и в пути ошибки.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Swift&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
final class CheckoutViewController: UIViewController {&lt;br /&gt;
&lt;br /&gt;
    // MARK: - Свойства&lt;br /&gt;
&lt;br /&gt;
    private let cart: Cart&lt;br /&gt;
    private let paymentService: PaymentService&lt;br /&gt;
&lt;br /&gt;
    private var checkoutAction: DTXUserAction?&lt;br /&gt;
&lt;br /&gt;
    // MARK: - Частные методы&lt;br /&gt;
&lt;br /&gt;
    @objc private func checkoutButtonTapped(_ sender: UIButton) {&lt;br /&gt;
        let configuration = DTXUserActionConfiguration(customName: &amp;quot;Checkout Process&amp;quot;)&lt;br /&gt;
        checkoutAction = Astromkey.createUserAction(configuration: configuration)&lt;br /&gt;
&lt;br /&gt;
        checkoutAction?.addEventProperty(&amp;quot;event_properties.cart_id&amp;quot;, value: cart.id)&lt;br /&gt;
        checkoutAction?.addEventProperty(&amp;quot;event_properties.item_count&amp;quot;, value: cart.items.count)&lt;br /&gt;
        checkoutAction?.addEventProperty(&amp;quot;event_properties.cart_total&amp;quot;, value: cart.total)&lt;br /&gt;
        checkoutAction?.addEventProperty(&amp;quot;event_properties.currency&amp;quot;, value: cart.currency)&lt;br /&gt;
&lt;br /&gt;
        paymentService.processPayment(for: cart) { [weak self] result in&lt;br /&gt;
            switch result {&lt;br /&gt;
            case .success(let order):&lt;br /&gt;
                self?.completeCheckout(orderId: order.id)&lt;br /&gt;
            case .failure(let error):&lt;br /&gt;
                self?.cancelCheckout(reason: error.localizedDescription)&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private func completeCheckout(orderId: String) {&lt;br /&gt;
        checkoutAction?.addEventProperty(&amp;quot;event_properties.order_id&amp;quot;, value: orderId)&lt;br /&gt;
        checkoutAction?.addEventProperty(&amp;quot;event_properties.checkout_successful&amp;quot;, value: true)&lt;br /&gt;
        checkoutAction?.complete()&lt;br /&gt;
        checkoutAction = nil&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private func cancelCheckout(reason: String) {&lt;br /&gt;
        checkoutAction?.addEventProperty(&amp;quot;event_properties.checkout_successful&amp;quot;, value: false)&lt;br /&gt;
        checkoutAction?.addEventProperty(&amp;quot;event_properties.cancellation_reason&amp;quot;, value: reason)&lt;br /&gt;
        checkoutAction?.complete()&lt;br /&gt;
        checkoutAction = nil&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Objective-C&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@interface CheckoutViewController ()&lt;br /&gt;
&lt;br /&gt;
@property (nonatomic) Cart *cart;&lt;br /&gt;
@property (nonatomic) PaymentService *paymentService;&lt;br /&gt;
@property (nonatomic, nullable) DTXUserAction *checkoutAction;&lt;br /&gt;
&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
@implementation CheckoutViewController&lt;br /&gt;
&lt;br /&gt;
- (void)checkoutButtonTapped:(UIButton *)sender {&lt;br /&gt;
    DTXUserActionConfiguration *configuration = [[DTXUserActionConfiguration alloc] initWithCustomName:@&amp;quot;Checkout Process&amp;quot;];&lt;br /&gt;
    self.checkoutAction = [Astromkey createUserActionWithConfiguration:configuration];&lt;br /&gt;
&lt;br /&gt;
    [self.checkoutAction addEventProperty:@&amp;quot;event_properties.cart_id&amp;quot; value:self.cart.id];&lt;br /&gt;
    [self.checkoutAction addEventProperty:@&amp;quot;event_properties.item_count&amp;quot; value:@(self.cart.items.count)];&lt;br /&gt;
    [self.checkoutAction addEventProperty:@&amp;quot;event_properties.cart_total&amp;quot; value:self.cart.total];&lt;br /&gt;
    [self.checkoutAction addEventProperty:@&amp;quot;event_properties.currency&amp;quot; value:self.cart.currency];&lt;br /&gt;
&lt;br /&gt;
    __weak typeof(self) weakSelf = self;&lt;br /&gt;
    [self.paymentService processPaymentForCart:self.cart completion:^(Order *order, NSError *error) {&lt;br /&gt;
        if (order) {&lt;br /&gt;
            [weakSelf completeCheckoutWithOrderId:order.id];&lt;br /&gt;
        } else {&lt;br /&gt;
            [weakSelf cancelCheckoutWithReason:error.localizedDescription];&lt;br /&gt;
        }&lt;br /&gt;
    }];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
- (void)completeCheckoutWithOrderId:(NSString *)orderId {&lt;br /&gt;
    [self.checkoutAction addEventProperty:@&amp;quot;event_properties.order_id&amp;quot; value:orderId];&lt;br /&gt;
    [self.checkoutAction addEventProperty:@&amp;quot;event_properties.checkout_successful&amp;quot; value:@YES];&lt;br /&gt;
    [self.checkoutAction complete];&lt;br /&gt;
    self.checkoutAction = nil;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
- (void)cancelCheckoutWithReason:(NSString *)reason {&lt;br /&gt;
    [self.checkoutAction addEventProperty:@&amp;quot;event_properties.checkout_successful&amp;quot; value:@NO];&lt;br /&gt;
    [self.checkoutAction addEventProperty:@&amp;quot;event_properties.cancellation_reason&amp;quot; value:reason];&lt;br /&gt;
    [self.checkoutAction complete];&lt;br /&gt;
    self.checkoutAction = nil;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>IKuznetsov</name></author>
	</entry>
</feed>