ℹ️ Версия 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 через объект 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, например активити.
Вы можете передать дополнительные параметры авторизации с помощью вспомогаельной билдер-функции:
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-й версии.
Проект VK ID SDK имеет открытый исходный код на GitHub, и вы можете присоединиться к его доработке — мы будем благодарны за внесение улучшений и исправление возможных ошибок.
В руководстве вы можете подробно ознакомиться с процессом разработки и узнать, как предлагать улучшения и исправления, а ещё — как добавлять и тестировать свои изменения в VK ID SDK. Также рекомендуем ознакомиться с общими правилами оформления кода в проекте и списком технических команд.