Готовая кнопка запускает весь поток по нажатию и блокирует повторные нажатия, пока выполняется запрос. Ей требуются две вещи: поставщик nonce и обработчик результата.
Примеры ниже ссылаются на следующие функции, которые предоставляете вы:
backend.requestSsoNonce(): String — suspend-вызов, запрашивающий у вашего сервера свежий одноразовый nonce.backend.signInWithPaspo(authCode: String) — отправляет код авторизации на ваш сервер для завершения входа.showError(error: PaspoClientError) — ваше отображение ошибки.onPaspoResult(result: PaspoAuthResult) — единый обработчик результата, определённый один раз:private fun onPaspoResult(result: PaspoAuthResult) {
when (result) {
is PaspoAuthResult.Success -> backend.signInWithPaspo(result.authCode)
is PaspoAuthResult.Failure -> showError(result.error)
PaspoAuthResult.Cancelled,
PaspoAuthResult.NotInstalled -> Unit
}
}
PaspoSignInButton(
nonceProvider = backend::requestSsoNonce,
onResult = ::onPaspoResult,
)
По умолчанию кнопка залита фирменным цветом Paspo. Её можно стилизовать под ваше приложение:
PaspoSignInButton(
nonceProvider = backend::requestSsoNonce,
onResult = ::onPaspoResult,
theme = PaspoButtonTheme.LIGHT, // BRAND (по умолчанию), LIGHT, DARK, NEUTRAL
cornerRadius = 12.dp, // по умолчанию рисуется pill
)
Объявите кнопку в разметке:
<paspo.id.ssoprovider.ui.PaspoSignInButton
android:id="@+id/paspo_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:paspoTheme="light"
app:paspoCornerRadius="12dp" />
и привяжите поток один раз:
binding.paspoButton.setAuthHandler(
activity = this,
scope = PaspoScope.PHONES,
nonceProvider = backend::requestSsoNonce,
onResult = ::onPaspoResult,
)
Кнопка рендерится независимо от темы хоста, чтобы выглядеть одинаково во всех приложениях. Если nonceProvider бросит исключение, результатом будет Failure(SERVICE_UNAVAILABLE). Compose-модуль дополнительно предоставляет render-only PaspoSignInButtonContent(colors = PaspoButtonColors(...)), который сообщает о кликах, не запуская поток, — для полного контроля над отрисовкой.
| Параметр | Значения | По умолчанию |
|---|---|---|
theme / app:paspoTheme | BRAND, LIGHT, DARK, NEUTRAL | BRAND |
cornerRadius / app:paspoCornerRadius | любая величина; большое значение даёт pill | pill |
iconOnly / app:paspoIconOnly | true / false (только логотип) | false |
showLogo / app:paspoShowLogo | true / false (только текст при false) | true |
Нужен полный контроль над UI? См. Собственную интеграцию.