Быстрый старт — готовая кнопка

Добавьте кнопку входа Paspo ID и подключите два коллбэка.

Готовая кнопка запускает весь поток по нажатию и блокирует повторные нажатия, пока выполняется запрос. Ей требуются две вещи: поставщик 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
    }
}

Compose

PaspoSignInButton(
    nonceProvider = backend::requestSsoNonce,
    onResult = ::onPaspoResult,
)

По умолчанию кнопка залита фирменным цветом Paspo. Её можно стилизовать под ваше приложение:

PaspoSignInButton(
    nonceProvider = backend::requestSsoNonce,
    onResult = ::onPaspoResult,
    theme = PaspoButtonTheme.LIGHT,   // BRAND (по умолчанию), LIGHT, DARK, NEUTRAL
    cornerRadius = 12.dp,             // по умолчанию рисуется pill
)

Классические View

Объявите кнопку в разметке:

<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:paspoThemeBRAND, LIGHT, DARK, NEUTRALBRAND
cornerRadius / app:paspoCornerRadiusлюбая величина; большое значение даёт pillpill
iconOnly / app:paspoIconOnlytrue / false (только логотип)false
showLogo / app:paspoShowLogotrue / false (только текст при false)true

Нужен полный контроль над UI? См. Собственную интеграцию.