Обработка ответа после авторизации
После авторизации пользователем по Сбер ID будет вызван обратный deeplink равный redirectUri, переданного на старте входа.
Данный deeplink вызовет ваше приложение и будет содержать информацию о входе.
В манифесте вашего приложения для activity, которая будет обрабатывать результат авторизации по Сбер ID, необходимо указать scheme и host обратного deeplink.
Если хотите обрабатывать обратный deeplink в той же activity, в которой и стартовали аутентификацию, необходимо указать в атрибуте launchMode для вашей активити значение "singleTop" и получать интент с результатом в методе onNewIntent(intent: Intent).
Примеры обработки deeplink:
<activity android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"> //для обработки deeplink в той же activity
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="redirect"
android:scheme="partner" />
</intent-filter>
</activity>
Для проверки результата необходимо передать полученный intent в метод SIDLogin.getIDAuthResult(), который обработает ответ и вернет сущность SIDResultModel.
В этой модели будут содержаться все необходимые данные для аутентификации, включая nonce, state и authCode. Вам нужно передать их на свой бэкенд для дальнейшей аутентификации вместе с codeVerifier (если используете), созданным на этапе входа.
Пример обработки результата
В той же activity:
//В методе onNewIntent, если применить для activity android:launchMode="singleTop"
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
val resultModel = SID.Login.getIDAuthResult(intent)
if (resultModel.isSuccess == true) {
// Отправьте result.authCode, resultModel.state, resultModel.nonce на свой бэк для окончания авторизации
} else {
// Ошибка, отобразите пользователю, что вход не получился
}
}
При обработки в новой activity можно перехватить в onCreate(savedInstanceState: Bundle?):
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val resultModel = SID.Login.getIDAuthResult(intent)
if (resultModel.isSuccess == true) {
// Отправьте result.authCode, resultModel.state, resultModel.nonce на свой бэк для окончания авторизации
} else {
// Ошибка, отобразите пользователю, что вход не получился
}
}