Перейти к основному содержимому

Возможные ошибки

При интеграции важно различать статус завершения Activity (resultCode) и логический результат операции, передаваемый внутри Intent (res_code).

1. Статус Activity (resultCode)

Activity.RESULT_OK ( -1 ) Приложение IC Camera 3 отработало штатно и вернуло результат (успешный или с ошибкой). В этом случае необходимо проверить содержимое Intent data.

Activity.RESULT_CANCELED ( 0 ) Приложение было закрыто без результата. Это происходит в следующих случаях:

  • Пользователь нажал кнопку "Назад" до начала операции (до начала синхронизации или открытия визита).
  • Приложение IC Camera 3 было закрыто пользователем через меню недавних приложений.
  • Произошел сбой (крэш).

В этом случае Intent data будет null.

2. Логический результат (внутри Intent)

Если resultCode == Activity.RESULT_OK, проверьте поле DeepLinkConst.Parameters.RESULT_CODE ("res_code") в полученном Intent.

VISIT_VALID (1) - Визит успешно завершен (новый или открытый).

VISIT_ERR (2) - Ошибка визита (валидация, отсутствие магазина и т.д.). Подробности в res_info.

SYNC_OK (3) - Синхронизация успешно выполнена.

SYNC_ERR (4) - Ошибка синхронизации. Подробности в res_info.

Пример полной обработки ответа

private val icCameraLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
// IC Camera 3 всегда возвращает Intent с данными при RESULT_OK,
// но для безопасности добавляем проверку на null.
val data = result.data ?: return@registerForActivityResult

val logicResultCode = data.getIntExtra(DeepLinkConst.Parameters.RESULT_CODE, 0)
val debugInfo = data.getStringExtra(DeepLinkConst.Parameters.RESULT_INFO)

when (logicResultCode) {
DeepLinkConst.ResultCode.VISIT_VALID -> {
// Успешный сценарий визита
}
DeepLinkConst.ResultCode.SYNC_OK -> {
// Успешный сценарий синхронизации
}
DeepLinkConst.ResultCode.VISIT_ERR,
DeepLinkConst.ResultCode.SYNC_ERR -> {
// Логическая ошибка (неверный токен, магазин не найден и т.д.)
}
}
} else {
// Activity.RESULT_CANCELED
// Приложение закрылось аварийно, было убито системой/пользователем
// или закрыто сразу при запуске.
}
}

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