/vkid-android-sdk

Primary LanguageKotlinMIT LicenseMIT

VK ID SDK Logo

VK ID SDK — библиотека для авторизации пользователей Android-приложений с помощью аккаунта VK ID.


ℹ️ Версия VK ID SDK 2.0.0 поддерживает авторизацию по протоколу OAuth 2.1, а также способы входа через аккаунты Одноклассников и Mail.


Демонстрация

SDK поставляется с тестовым примером приложения, где можно посмотреть работу авторизации. Чтобы тестовое приложение успешно собралось, сначала создайте файл sample/app/secrets.properties и пропишите в нем client_id и client_secret вашего приложения VK ID:

Файл secrets.properties:

VKIDClientSecret=Ваш защищённый ключ
VKIDClientID=Ваш ID приложения

Предварительно

Что такое VK ID и как интегрировать его в приложение читайте в статье "Начало работы".

Чтобы подключить VK ID SDK, сначала получите ID приложения (app_id) и защищенный ключ (client_secret). Для этого создайте приложение в кабинете подключения VK ID.

Документация API SDK доступна на Github.

Установка

Для начала работы добавьте репозиторий:

maven {
    url("https://artifactory-external.vkpartner.ru/artifactory/vkid-sdk-android/")
}

Подключите библиотеку:

implementation("com.vk.id:vkid:${sdkVersion}")

И пропишите плейсхолдеры манифеста в секции android в build.gradle.kts:

android {
    //...
    defeaultConfig {
        addManifestPlaceholders(
            mapOf(
                "VKIDClientID" to "1233445", // ID вашего приложения (app_id).
                "VKIDClientSecret" to "000000000000", // Ваш защищенный ключ (client_secret).
                "VKIDRedirectHost" to "vk.com", // Обычно используется vk.com.
                "VKIDRedirectScheme" to "vk1233445", // Обычно используется vk{ID приложения}.
            )
        )
    }
}

Интеграция

Инициализация VK ID SDK

Инициализируйте работу VK ID SDK через объект VKID.

// В Application
fun onCreate() {
    super.onCreate()
    VKID.init(this)
}

Авторизация

Результат авторизации передается в коллбэк VKIDAuthCallback, поэтому его нужно объявить:

private val vkAuthCallback = object : VKIDAuthCallback {
    override fun onSuccess(accessToken: AccessToken) {     
        val token = accessToken.token
        //...
    }
 
    override fun onFail(fail: VKIDAuthFail) {
        when (fail) {
            is VKIDAuthFail.Canceled -> { /*...*/ }
            else -> {
                //...
            }
        }
    }
}

Авторизация запускается с помощью метода authorize(), у которого есть два варианта вызова:

viewModelScope.launch {
    VKID.instance.authorize(vkAuthCallback)
}

или с передачей LifecycleOwner:

VKID.instance.authorize(this@MainActivity, vkAuthCallback) // Первый параметр LifecycleOwner, например активити.

Параметры aвторизации

Вы можете передать дополнительные параметры авторизации с помощью вспомогаельной билдер-функции:

VKID.instance.authorize(
    callback = vkAuthCallback,
    params = VKIDAuthParams {
        scopes = setOf("status", "email")
    }
)

Обновление токена

Токен живет ограниченное количество времени, при получении ошибки от апи обновите его:

viewModelScope.launch {
    VKID.instance.refreshToken(
        callback = object : VKIDRefreshTokenCallback {
            override fun onSuccess(token: AccessToken) {
                // Использование token
            }
            override fun onFail(fail: VKIDRefreshTokenFail) {
                when (fail) {
                    is FailedApiCall -> fail.description // Использование текста ошибки
                    is RefreshTokenExpired -> fail // Это означает, что нужно пройти авторизацию заново
                    is Unauthorized -> fail // Пользователь понимает, что сначала нужно авторизоваться
                }
            }
        }
    )
}

Также есть версия с передачей LifecycleOwner:

VKID.instance.refreshToken(
    lifecycleOwner = MainActivity@this,
    callback = ... // такой же, как в suspend версии
)

Документация

Локальная сборка

Если проект не собирается со странными ошибками, то скореe всего нужно выставить в настройках проекта в студии jdk-17. Для того, чтобы работали градл-скрипты из консоли, также нужно прописать в переменной среды JAVA_HOME путь по которому находится jdk 17-й версии.

Contributing

Проект VK ID SDK имеет открытый исходный код на GitHub, и вы можете присоединиться к его доработке — мы будем благодарны за внесение улучшений и исправление возможных ошибок.

Contributing Guide

В руководстве вы можете подробно ознакомиться с процессом разработки и узнать, как предлагать улучшения и исправления, а ещё — как добавлять и тестировать свои изменения в VK ID SDK. Также рекомендуем ознакомиться с общими правилами оформления кода в проекте и списком технических команд.