val SHA256Digester = MessageDigest.getInstance("SHA-256")
val input = codeVerifier.toByteArray(Charset.forName("ISO_8859_1"))
SHA256Digester.update(input)
val digestBytes = SHA256Digester.digest()
Base64.encodeToString(digestBytes, Base64.URL_SAFE or Base64.NO_PADDING or Base64.NO_WRAP)curl "https://id.vk.ru/oauth2/auth" -d "client_id=7915193&grant_type=authorization_code&code_verifier=KnHKAdqyW57MUbjRcScaZRU9Bw26Kez9zwBgti...&device_id=1111&code=1f06e0c317b5b524c6&redirect_uri=vk7915193://vk.ru/blank.html"| Название | Описание |
|---|---|
| grant_type | Всегда имеет значение authorization_code |
| code | Код авторизации, полученный из callback onAuthCode |
| code_verifier | code_verifier, для которого был сгенерирован code_challenge |
| client_id | Идентификатор приложения. Должен совпадать с VKIDClientID, который вы указали в Manifest Placeholders |
| device_id | Уникальный идентификатор вашего мобильного устройства, полученный из callback onAuthCode |
| redirect_uri | Адрес для редиректа после авторизации. Должен быть в формате VKIDRedirectScheme://VKIDRedirectHost/blank.html, где VKIDRedirectScheme и VKIDRedirectHost — параметры, которые вы указали в Manifest Placeholders |
| state | Уникальная строка, сгенерированная по тем же правилам, что и для авторизации. Подробнее см. в подразделе Требования к параметрам PKCE |
{
"access_token": "XXXXX",
"refresh_token": "XXXXX",
"id_token": "XXXXX",
"expires_in": 0,
"user_id": 1234567890,
"state": "XXX"
}VKID.instance.authorize(
...
scopes = setOf("scope_1", ... , "scope_n")
...
)@Composable
OneTap(
...
scopes = setOf("scope_1", ... , "scope_n")
...
)val view = findViewById<OneTap>(R.id.onetap)
view.scopes = setOf("scope_1", ... , "scope_n")<com.vk.id.onetap.xml.OneTap
...
app:vkid_onetapScopes="scope_1,scope_2,...,scope_n"
/>