Возможные ошибки
При интеграции важно различать статус завершения 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
// Приложение закрылось аварийно, было убито системой/пользователем
// или закрыто сразу при запуске.
}
}
Если у вас возникли вопросы или проблемы, обратитесь в техподдержку.