# Коллбэки и обработчики iOS SDK
Обработчики и коллбеки не являются обязательными. Используйте их, если считаете, что они будут полезны, но мы рекомендуем установить хотя бы tokenExpirationHandler
, чтобы убедиться, что токен доступа актуален.
# Уведомление об обновлении статуса
Используйте коллбэк onStatusDidChange
, чтобы получать уведомления об этапах процесса верификации.
Этот коллбэк принимает два параметра:
sdk
— экземпляр SDK,prevStatus
— предыдущий статус.
После этого вы можете проанализировать sdk.status
, чтобы определить текущий статус проверки.
sdk.onStatusDidChange { (sdk, prevStatus) in
print("onStatusDidChange: [\(sdk.description(for: prevStatus))] -> [\(sdk.description(for: sdk.status))]")
switch sdk.status {
case .ready:
// Технически ‘.ready’ не может быть передано сюда, так как коллбэк был установлен после того, как ‘status’ стал ‘.ready’.
break
case .failed:
print("failReason: [\(sdk.description(for: sdk.failReason))] - \(sdk.verboseStatus)")
case .initial:
print("No verification steps are passed yet")
case .incomplete:
print("Some but not all of the verification steps have been passed over")
case .pending:
print("Verification is pending")
case .temporarilyDeclined:
print("Applicant has been temporarily declined")
case .finallyRejected:
print("Applicant has been finally rejected")
case .approved:
print("Applicant has been approved")
}
}
# Уведомление о событиях
Подписка на коллбэк onEvent
позволяет получать уведомления о событиях, происходящих в процессе обработки.
События передаются в коллбек в виде экземпляров класса, унаследованных от базового класса CBREvent
. Таким образом, каждое событие имеет eventType
и набор параметров, упакованных в словарь payload
.
В зависимости от того что вам нужно, вы можете получать параметры события, либо анализируя payload
напрямую, либо приводя переданный экземпляр события к соответствующему классу CBREvent*
в зависимости от его типа.
sdk.onEvent { (sdk, event) in
switch event.eventType {
case .applicantLoaded:
if let event = event as? CBREventApplicantLoaded {
print("onEvent: Applicant [\(event.applicantId)] has been loaded")
}
case .stepInitiated:
if let event = event as? CBREventStepInitiated {
print("onEvent: Step \(event.idDocSetType) has been initiated")
}
case .stepCompleted:
if let event = event as? CBREventStepCompleted {
print("onEvent: Step \(event.idDocSetType) has been \(event.isCancelled ? "cancelled" : "fulfilled")")
}
case .analytics:
if let event = event as? CBREventAnalytics {
print("onEvent: Analytics event [\(event.eventName)] has occured with payload=\(event.eventPayload ?? [:])")
}
@unknown default:
print("onEvent: eventType=\(event.description(for: event.eventType)) payload=\(event.payload)")
}
}
# Уведомление о завершении работы SDK
Дополнительный способ получения уведомлений о том, что SDK закрывается.
sdk.onDidDismiss { (sdk) in
print("onDidDismiss: sdk has been dismissed with status [\(sdk.description(for: sdk.status))]")
}
# Истечение срока действия токена
Из-за ограниченного срока действия токена доступа (accessToken
) важно уметь обрабатывать ситуацию, когда токен истекает и требуется его обновление.
Обработчик tokenExpirationHandler
делает запрос на ваш сервер, получает новый токен и затем передать его обратно в SDK, вызвав замыкание onComplete
.
sdk.tokenExpirationHandler { (onComplete) in
get_token_from_your_backend { (newToken) in
onComplete(newToken)
}
}
Примечание:
onComplete
должен быть выполнен, даже если вы не можете предоставить новый токен, в этом случае передайте nil
.
# Завершение проверки
Вы можете использовать verificationHandler
, чтобы получить уведомление, когда верификация будет завершена с окончательным решением.
Параметр isApproved
сообщает, что пользователь был одобрен или окончательно отклонен. Если вы хотите получать уведомления о других статусах проверки, используйте onStatusDidChange
. Подробнее в Уведомления об обновлении статуса.
sdk.verificationHandler { (isApproved) in
print("verificationHandler: Applicant is " + (isApproved ? "approved" : "finally rejected"))
}
# Управление закрытием
Вы можете взять на себя управление закрытием, назначив dismissHandler
. Обработчик получает текущий экземпляр sdk
и контроллер mainVC
. Вы можете закрыть mainVC
так, как считаете нужным.
sdk.dismissHandler { (sdk, mainVC) in
mainVC.dismiss(animated: true, completion: nil)
}