Настройка воспроизведения сеанса при сбоях для iOS

Материал из Dynatrace

На этой странице описывается, как включить и настроить повтор сеанса при сбоях для ваших приложений iOS.

Воспроизведение сеанса при сбоях дает вам дополнительный контекст для анализа сбоев в виде видеозаписей экрана, которые воспроизводят действия пользователя, непосредственно предшествующие обнаруженному сбою.

Предпосылки

Убедитесь, что ваша система соответствует следующим требованиям:

  • Ключ-АСТРОМ версии 1.208+
  • ЕдиныйАгент версии 1.207+
  • Свифт 5+
  • iOS 9+
  • Xкод 13+
  • Реальный мониторинг пользователей включен для вашего приложения
  • Активная лицензия Ключ-АСТРОМ Digital Experience Monitoring
  • URL-адрес веб-интерфейса имеет доверенный сертификат
  • Только для управляемых Ключ-АСТРОМ Дополнительный диск , настроенный для хранения данных сеанса пользователя Рассчитать размер вторичного диска

Начиная сЕдиныйАгент для iOS версии 8.257(весной 2023 г.) Ключ-АСТРОМ прекратит поддержку iOS 9 и 10, Xcode 13 и сборок с поддержкой битового кода. Мы будем поддерживать только iOS 11+ и Xcode 14+.

Кроме того, в соответствии с рекомендациями Apple по отправке приложений мы будем поддерживать только приложения, созданные с помощью Xcode 14.1+, начиная с апреля 2023 года.

Известные ограничения

  • Воспроизведение сеанса при сбоях недоступно для tvOS и iPadOS.
  • Воспроизведение сеанса недоступно для Cordova, React Native, Flutter или Xamarin.
  • Для гибридного приложения воспроизведение сеанса при сбоях поддерживается только для собственной части приложения. Воспроизведение сеанса не поддерживается для браузерной части гибридного приложения.
  • Мы рекомендуем вам не использовать другие инструменты отчетности о сбоях вместе с Ключ-АСТРОМ Session Replay.
  • Воспроизведение сеанса может фиксировать только определенные события. Однако если вам нужно отслеживать конкретное представление или событие, которое не поддерживается по умолчанию, вы можете зафиксировать пользовательское событие .
  • Вы можете воспроизводить сеансы пользователей, записанные с помощью Session Replay, только в определенных браузерах .

Дополнительную информацию см. в разделе Технические ограничения для повтора сеанса .

Включить повтор сеанса

Если вы еще этого не сделали, выполните все шаги, описанные в мастере инструментовки.

  1. В меню Ключ-АСТРОМ выберите Mobile .
  2. Выберите мобильное приложение, которое вы хотите настроить.
  3. Выберите « Дополнительно » ( … ) > « Изменить » в правом верхнем углу плитки с названием вашего приложения.
  1. В настройках мобильного приложения выберите « Основные » > « Включение и контроль затрат » .
  2. Включите параметр «Включить воспроизведение сеанса при сбоях» .
  3. В настройках мобильного приложения выберите « Основные » > « Конфиденциальность данных » .
  4. Включите Включить режим подписки пользователя .
  5. В настройках мобильного приложения перейдите к мастеру инструментов и выберите Android или iOS .
  6. Следуйте инструкциям мастера инструментовки.

Включить повтор сеанса для приложений SwiftUI

ЕдиныйАгент для iOS версии 8.249+

Если вы уже оснастили свое приложение SwiftUI инструментами , вы можете дополнительно включить повтор сеанса для такого мобильного приложения.

Чтобы включить повтор сеанса для инструментированного приложения SwiftUI

  1. Выполните все шаги инструкции « Включить повтор сеанса » выше.
  2. Установите DTXSwiftUIEnableSessionReplayInstrumentation ключ конфигурации в файлtrue вашего проекта .Info.plist

<key>DTXSwiftUIEnableSessionReplayInstrumentation</key>

<true/>

Поддерживаемые контейнеры SwiftUI

Мы поддерживаем воспроизведение сеанса для следующих контейнеров SwiftUI:

  • Список
  • LazyVGrid
  • LazyHGrid

Известные ограничения для приложений SwiftUI

Ключ-АСТРОМ не обрабатывает следующие контейнеры SwiftUI:

  • Списки внутри расширений
  • Списки со статическим содержимым
  • Списки, в которых объект кормления не соответствует Equatableпротоколу

Маскировка конфиденциальных данных

Воспроизведение сеанса при сбоях имеет три предопределенных уровня маскировки:

  • Самый безопасный — все редактируемые текстовые поля, изображения, метки, веб-представления и переключатели маскируются.
  • Безопасно — все редактируемые текстовые поля маскируются.
  • Custom — по умолчанию маскирует те же элементы, что и Safest , но вы можете точно решить, какие компоненты приложения или представления следует маскировать.

Чтобы посмотреть, какие данные Session Replay маскирует и какие части экрана захвачены, используйте отладчик снимков экрана Session Replay .

Изменить уровень маскировки

По умолчанию ЕдиныйАгент применяет самый безопасный уровень маскировки. Чтобы изменить его на безопасный или пользовательский уровень, используйте API для настройки ЕдиныйАгент.

  1. Импортируйте AstromkeySessionReplayфреймворк в класс.

import AstromkeySessionReplay

2. Установите необходимый уровень маскировки .

let maskingConfiguration = MaskingConfiguration(maskingLevelType: .safe) // .safest or .custom AgentManager.setMaskingConfiguration(maskingConfiguration)

Настройка пользовательской маскировки

Если вы установите уровень маскирования данных на Custom , вы можете использовать дополнительные методы API, чтобы решить, какие именно компоненты приложения или представления следует маскировать.

Включить или отключить правила маскирования

Вы можете включить или отключить правила глобально или для выбранных компонентов, таких как текстовые поля, изображения, метки, веб-представления и переключатели.

try? maskingConfiguration.add(rule: .maskAllImages) // Adds one rule

try? maskingConfiguration.remove(rule: .maskAllSwitches) // Removes one rule

try? maskingConfiguration.addAllRules() // Adds all rules

try? maskingConfiguration.removeAllRules() // Removes all rules

Если вы удалите все правила маскирования, Session Replay ничего не будет маскировать. Если вы включите все правила маскирования, это будет эквивалентно самому безопасному уровню маскирования.

Маскируйте представления с помощьюaccessibilityIdentifier

Вы можете включить или отключить маскирование выбранных представлений на основе их accessibilityIdentifier.

try? maskingConfiguration.addMaskedView(viewIds: ["masked_view_id"])

try? maskingConfiguration.removeMaskedView(viewIds: ["masked_view_id"])

try? maskingConfiguration.addNonMaskedView(viewIds: ["nonMasked_view_id"])

try? maskingConfiguration.removeNonMaskedView(viewIds: ["nonMasked_view_id"])

Маскируйте представления с помощью маскирующего тега

Вы также можете замаскировать представление, добавив data-dtrum-maskтег маскирования в файл представления accessibilityIdentifier. Представление с этим тегом маскирования всегда маскируется.

Включить журналы воспроизведения сеанса

Вы можете включить журналы повторения сеанса так же, как и для ЕдиныйАгент. Дополнительную информацию см. в разделе Ведение журнала отладки ЕдиныйАгент для iOS .

Захват пользовательских событий

Повтор сеанса записывает только определенные события. Вы можете дополнительно захватывать пользовательские события, которые не поддерживаются по умолчанию. Вы можете зафиксировать пользовательское событие с включенным снимком экрана определенного вида, определенной области экрана или всего экрана.

Все методы захвата настраиваемых событий могут вызвать TrackCustomEventError.notInMainThreadошибку, если вы попытаетесь захватить настраиваемое событие из потока, который не является основным потоком. Мы предлагаем вам включить предложение do-catch, пока все не заработает должным образом; тогда вы можете заменить предложение более простой версией, которая даже в случае ошибки просто не фиксирует пользовательское событие.

do {
    try AgentManager.trackCustomEvent(name: "my_event_name", view: nil)
} catch  {
    print(error)
}

СЕдиныйАгент для iOS версии 8.239, мы отказались от следующих методов захвата пользовательских событий:

  • trackCustomEvent(name:withFrame:)
  • trackCustomEvent(name:withView:takeScreenshot:)
  • takeScreenshot()

Используйте следующие новые методы для захвата пользовательских событий:

  • trackCustomEvent(name:view:) throws
  • trackCustomEvent(name:frame:) throws
  • trackCustomEvent(name:) throws

Конкретный вид

ЕдиныйАгент для iOS версии 8.239+

Захват пользовательского события со снимком экрана определенного представления.

try? AgentManager.trackCustomEvent(name: "my_view_name", view: myView)

Конкретная область экрана

ЕдиныйАгент для iOS версии 8.239+

Захват пользовательского события со снимком экрана определенной области экрана.

try? AgentManager.trackCustomEvent(name: "my_view_name", frame: anyFrame)

Полноэкранный

ЕдиныйАгент для iOS версии 8.239+

Захват пользовательского события с полноэкранным снимком экрана.

Вы можете использовать этот метод вместо устаревшего takeScreenshot()метода.

try? AgentManager.trackCustomEvent(name: "my_view_name")

Захват пользовательских событий в более ранних версиях ЕдиныйАгент

ЕдиныйАгент для iOS версии 8.237 и более ранних версий

AgentManager.trackCustomEvent(name: my_name, withView: my_view, takeScreenshot: true)

  • name— имя пользовательского события, отображаемое на временной шкале во время воспроизведения сеанса пользователя.
  • withView— это необязательное значение, относящееся к UIView, из которого ЕдиныйАгент берет изображение. По умолчанию ЕдиныйАгент занимает окно приложения.
  • takeScreenshot— это необязательное логическое значение, используемое для определения того, есть ли у пользовательского события снимок экрана или нет.

Кроме того, вы можете сделать скриншот вида. В этом случае пользовательское событие под названием «Пользовательский снимок экрана» отображается на временной шкале во время воспроизведения сеанса пользователя.

AgentManager.takeScreenshot()

Измените режим передачи на Wi-Fi для изображений

По умолчанию все данные — информация о захваченных событиях и изображениях — отправляются по любому соединению. Однако вы можете выбрать передачу изображений только тогда, когда пользователи подключены к Wi-Fi, чтобы сохранить свои мобильные данные.

AgentManager.setTransmissionMode(.wifi) // .data by default

Отладчик скриншотов

ЕдиныйАгент для iOS версии 8.239+

Отладчик снимков экрана Session Replay позволяет увидеть, когда сделаны снимки экрана, какие части экрана захвачены и какие данные — текстовые поля, изображения, метки, веб-представления и переключатели — маскируются.

Вы можете использовать отладчик снимков экрана Session Replay при запуске мобильного приложения в симуляторе, поэтому вам не нужно ждать, пока сеанс будет закрыт и загружен в Ключ-АСТРОМ.

После того, как вы включите отладчик снимков экрана Session Replay, вы увидите соответствующие ключи в своем проекте. Обратите внимание, что эти ключи не отправляются в код приложения для компиляции выпуска или архива, поэтому они никогда не включаются в производственный код. Эти ключи используются только для выполнения отладки.

Включение отладчика снимков экрана повтора сеанса

  1. В Xcode выберите « Редактировать схему » в меню « Схема» , чтобы изменить схему приложения.
  2. В настройках схемы приложения выберите действие « Выполнить» , а затем перейдите на вкладку « Аргументы ».
  3. В разделе Environment Variables добавьте один или оба следующих ключа:
    • DTXDebugMasking. Этот ключ показывает снимки экрана, сделанные с помощью Session Replay, включая замаскированное содержимое и элементы управления пользовательского интерфейса. Для каждого захваченного снимка экрана вы видите короткую вспышку.
    • DTXDebugFrameHighlight. Эта клавиша выделяет захваченную часть экрана красной рамкой, чтобы вы могли точно знать, какая часть экрана захвачена.

Исправление проблем

Убедитесь, что ваша система соответствует требованиям к воспроизведению сеанса .

Сеансы пользователей не записываются вообще

  • Если вы используете симулятор в Xcode для проверки воспроизведения сеанса, перейдите в раздел « Редактировать схему… » > « Выполнить» | Debug и снимите флажок « Отладка исполняемого файла » для схемы Xcode.
  • Убедитесь, что вы выполнили шаги, описанные в мастере мобильных инструментов :
    • Вы добавили Session Replay в качестве зависимости к вашему подфайлу.
    • Вы включили все обязательные идентификационные ключи приложения в Info.plistфайл вашего приложения .
    • Вы включили режим согласия пользователя и добавили уведомление о конфиденциальности.
  • Убедитесь, что вы можете импортировать библиотеки Ключ-АСТРОМ:

import Astromkey

import AstromkeySessionReplay

  • В логах запущенной консоли приложения найдите следующее:
    • Строка с указанием версии ЕдиныйАгент, например,Astromkey ЕдиныйАгент (iOS) 8.207.1.XXXX
    • Строка в версии Session Replay, например,Astromkey Mobile Session Replay Agent (iOS) 1.207

Сеансы пользователей записываются, но воспроизведение сеанса недоступно

  • Убедитесь, что воспроизведение сеанса включено. В настройках мобильного приложения перейдите в « Общие » , чтобы проверить это.
  • Убедитесь, что включен режим согласия пользователя. В настройках мобильного приложения перейдите в настройки инструментов, чтобы проверить это.
  • В логах запущенной консоли приложения проверьте следующее:
    • Строка, подтверждающая, что воспроизведение сеанса включено:

FINEST Communications [DTXReplayAgentChannel.m:146-771-1] posted MRA notification: DTXServerConfigurationChangedNotification, userInfo:{

...

replayConfig = { // Session Replay config

capture = 1; // 1 means Session Replay is enabled; 0 means Session Replay is disabled

...

  • Строка в новом сеансе, например,[ASTROMKEY]: ℹ️ Info -> New sessionId:0003, visitorId:123456789101112, visitStore:1 and serverId:4 from DT agent <NSThread: 0x6000013fe800>{number = 1, name = main}

Часто задаваемые вопросы

Каково потребление лицензии для сеанса пользователя, захваченного с помощью Session Replay?

1,0 единица DEM за пользовательский сеанс, захваченный с помощью Session Replay.

Сколько памяти используется на устройстве пользователя?

Мы установили жесткие ограничения: 300 КБ на сеанс и 10 МБ на все сеансы. Все, что превышает эти пределы, обрезается до пределов, как указано выше.

При записи сеанса пользователя Ключ-АСТРОМ может потреблять до 10 МБ памяти мобильного устройства пользователя. Однако Ключ-АСТРОМ не будет отправлять сеанс размером более 300 КБ.

Данные отправляются один раз или несколько раз?

Данные отправляются один раз. Это выполняется несколькими запросами в соответствии с собранными данными.

Как долго Ключ-АСТРОМ хранит изображения, если установлен режим передачи Wi-Fi?

Если вы изменили режим передачи на Wi-Fi , изображения отправляются только тогда, когда пользователи вашего приложения подключены к Wi-Fi.

В настоящее время срок хранения изображений не ограничен; применяется только упомянутое выше жесткое ограничение в 10 МБ. Однако в ситуациях аварийной остановки все удаляется.

Наблюдаются ли накладные расходы во время запуска или выполнения? Связаны ли накладные расходы напрямую со сложностью приложения?

Воздействие очень низкое, и накладные расходы в основном видны во время выполнения. Как правило, это связано со сложностью приложения, например, с тем, сколько представлений отображается одновременно.

Каков размер инфраструктуры повтора сеанса? Сколько МБ он добавит моему приложению?

Трудно точно ответить на этот вопрос, поскольку окончательный размер инфраструктуры повтора сеанса зависит от нескольких факторов.

Несколько архитектур включены в двоичный файл толстых фреймворков: ARMv7, ATM64, i386и x86-64. Фрагменты ARMиспользуются физическими устройствами iOS, i386а x86-64части и используются симулятором и удаляются из вашего приложения в процессе сборки и архивирования. Более того, когда пользователи загружают ваше приложение из App Store, они получают только ту архитектуру, которая требуется их устройству.

У нас также есть биткод, представляющий собой неоптимизированное представление промежуточного кода. Он включен для архитектур ARM, но не влияет на окончательный размер вашего приложения. Apple использует бит-код для возможной перекомпиляции и повторной оптимизации двоичного файла вашего приложения после того, как вы отправили свое мобильное приложение в App Store.

Из-за всех этих факторов лучший способ оценить размер фреймворка Session Replay — это скомпилировать ваше приложение без этого фреймворка и сгенерировать файл IPA; затем сделайте то же самое, но с включенным фреймворком и сравните размеры этих двух файлов IPA. Разница заключается в размере фреймворка Session Replay.

Для нашего тестового приложения размер инфраструктуры повтора сеанса составляет около 500 КБ в сжатом виде.

Когда данные отправляются в Ключ-АСТРОМ? Нужно ли пользователю повторно открывать приложение?

Данные отправляются только тогда, когда пользователь повторно открывает приложение. Однако, если пользователь не открывает приложение в течение 10 минут, данные удаляются.