Let’s get started
Most of the applications have some authentication mechanism to store information about users, give users ability to create profiles and etc. I think most of the users prefer to sign in/ sign up using social media options, as its much easier and faster, because there is no need to create passwords, pass email verification and so on. If your application is not very big and you don’t want to have a backend — the easiest way to implement authentication is using Firebase authentication. It gives ability to authenticate using email/password or using some social medias such as Google, Facebook etc., but there is no option for VK.
VK is one of the most popular social networks in Russian speaking countries. If your application has a big user base from that region you may consider to give them option authenticating into your app using their VK login. In this blog I will tell you how to implement VK authentication and how to connect it with the Firebase authentication.
VK Application setup
First of all you need to have an VK account. Then for using VK SDK you need to create a new VK application. You can do it here. Choose the Standalone application type. Write your app title and confirm the action via SMS and you will be redirected to the application settings page. In the settings page you need to fill the following fields for Android:
In package name for Android write your Android application package, in Main activity for Android write your main activity name. For Signing certificate fingerprint for Android you should mention your signing key Certificate fingerprint: SHA1 by deleting all the colons. You can get your certificate fingerprint from Android studio using gradle command: gradle signingReport or you can get it using VK SDK. After adding SDK you can use the following code in your Activity to get fingerprint and then log it:
You can add more than one fingerprint for debug and release configs.
To add VK SDK to your android project add following dependency to your app build.gradle file:
Also you need to add Internet permission in your AndroidManifest file:
Then in your resources you need to add vk app id. I suggest to create configs.xml if you don’t have one and add there:
Your app id you can find from VK application settings page:
VK Login
To login into VK account and get user’s info you need to call:
This will redirect user to the VK login page and ask user to give access to your application. The first parameter is context which should be an activity and the second is a list of scopes that we need to access. In our case we only need to access the user email, to be able to register them into firebase, but if you need you can ask to access other user information such as their wall, groups, friends and etc.
After user pass authorization you can handle the result in onActivityResult method. Please see the code below:
Implement VKAuthCallback interface, which has methods: onLogin and onLoginFailed. Call VK.onActivityResult by passing the callback. It will call your callback if the result is from VK authentication, else it return false.
Connecting VK with Firebase
I will not go into details on how to add Firebase and Firebase Authentication into your project. You can find it from the official documentation. To authenticate with firebase, we need to create a new user with email password or sign in with custom token. For custom token we need to have a backend that will generate that token, so the easiest way is to sign in with an email password. We can get user the email from the vk access token and we need to generate a unique password for the user. In this example as password, I will use the VK user id.
To check if a user already exists for the given email call firebase auth method fetchSignInMethodsForEmail, which will return the list of signs in the methods associated with the email. If that list is empty we need to create a new user in firebase unless we already have user with the email and we just sign in with email password. Please see the code above.
For more insightful articles on all things tech — check out Read Priotix.
VK SDK Android — Auth¶
If user had installed the official VK App, you can ask for the access without user need to enter the login and password. But Authorization code flow is not supported either by the VK App or by official SDK. Otherwise, WebView will be used and user will be used to enter their credentials only the first time.
Using the VK SDK Android — Auth feature, you can:
- use login method and way to show the page will be chosen automatically
- force to use the WebView using the VkAuth.AuthMode.RequireWebView method
- force to use the VK App using the VkAuth.AuthMode.RequireApp methods
- exception will be thrown if app is not installed, but you can manually check this fact using the method VkAuth.isVkAppInstalled
Ways to retrieve the auth result¶
In both cases, with the VK App or with WebView, some Activities will be opened using the startActivityForResult method.
Using Custom Tabs, onNewIntent listener will be added.Use the inline callback¶
The first param is androidx.activity.ComponentActivity (e.g. androidx.appcompat.app.AppCompatActivity ):
Chrome Custom Tabs¶
To support auth via Chrome Custom Tabs, you need:
1. Prepare your VK app¶
First of all, you need to add the redirect URI to the app settings.
For this, go here: https://vk.com/apps?act=manage
Choose your app, and then go to the Settings : https://vk.com/editapp?id=XXX§ion=options
And add your redirect URI to the Authorized redirect URI: field.2. Prepare your website¶
You need to make a JSON file available here: https://domain.com/.well-known/assetlinks.json
3. Prepare your AndroidManifest.xml¶
Make your auth activity (from where you will do the auth) discoverable:
4. Prepare your activity¶
In your auth activity, just before onCreate , call VkAuth.register(this) and use the returned ActivityResultLauncher .
Et voila!¶
Now your user will have a greater & secure experience.
They will not have to enter their passwords, if they logged into VK in their browser.Авторизация в системе с помощью ВК (Android)
Подскажите, пожалуйста, как авторизоваться в системе с помощью социальной сети. Я не могу найти какой-то подробной информации о том, как это правильно сделать. Имеется сервер Java + Spring (Tomcat) и мобильное приложение Android. Вопрос заключается в том, как правильно построить механизм авторизации? Я могу с помощью SDK от ВК авторизовать пользователя на мобильном устройстве, да, но что это мне даёт? Как авторизовать его в системе? Авторизация в ВК даст мне какой-то токен? Который я отправлю на свой сервер, а сервер должен проверить валидность этого токена с помощью того же API от ВК? Где об этом можно почитать? Скажите, как вы решали подобные задачи.
Здесь есть несколько возможных решений. Я бы сделал как-то так:
- На мобиле юзер авторизуется в ВК, получая access_token .
- Отсылает токен на сервер.
- Сервер по токену получает профиль юзера с API ВК.
- Проверяет есть ли такой юзер в БД по его id в ВК.
- Если нет — создаёт юзера в своей БД, прописывая его id в ВК в поле таблицы юзеров.
- Если юзер такой уже есть или его только что создали — генерирует для него свой токен по логину (например id в ВК) и паролю (пусть это будет случайная строка, генерирующаяся при создании юзера)
- Отсылает на мобилу сгенерированный свой токен.
- Мобила пишет его в SharedPreferences и использует для запросов к серверу.
В итоге для юзера это будет выглядеть как логин через ВК, а у вас будет на сервере вся его доступная инфа из ВК, возможность логинить юзера по логину и паролю и все запросы к вашему серверу будут красиво требовать токена.
Name already in use
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Интеграция с ВКонтакте
В рамках этого практического задания предлагается сделать небольшое приложение, использующее SDK социальной сети ВКонтакте для выполнения авторизации и нескольких несложных запросов. Работа с SDK описана на странице официально документациий для разработчиков ВКонтакте: https://vk.com/dev/android_sdk — и в процессе выполнения этого задания надо будет ознакомиться с ней и выполнить описанные в ней инструкции. В результате получится приложение, зарегистрированное для работы с ВКонтакте, которое можно будет использовать в качестве основы для реализации функций интеграции с социальной сетью, если такие функции понадобятся, к примеру, в курсовом проекте.
Первый экран приложения ( MainActivity ) содержит только кнопку «Войти через ВКонтакте», по нажатию на которую открывается второй экран.

Второй экран приложения ( VkDemoActivity ) при старте проверят, был ли пользователь приложения ранее уже авторизован во ВКонтакте, и если нет — выполняет авторизацию при помощи Vk SDK. В процессе этой авторизации может быть показан либо экран приложения ВКонтакте, если оно установлено на устройстве, либо страница мобильного сайта ВКонтакте, показанная в WebView внутри приложения. После успешной авторизации выполняется запрос информации о пользовтеле и показывается его фотография и имя. По нажатию на кнопку «Выйти» происходит выход на первый экран, чтобы можно было снова залогиниться тем же или другим пользователем.
Код первого экрана уже реализован, а код второго экрана надо написать в классе VkDemoActivity в рамках этого задания.
Задание 1 — Интеграция с VK SDK
Для того, чтобы можно было использовать функции Vk SDK в нашем приложении, нужно выполнить инструкции, описанные здесь: https://vk.com/dev/android_sdk
Подробнее по шагам:
Поменять ID приложения
ID Anroid приложения указывается в файле build.gradle в модуле приложения. По этому ID приложения идентифицируются, например, в магазине приложений Google Play, а в нашем случае он нужен для идентификации приложения в API ВКонтакте. У двух приложений ID не может быть одинаковым, поэтому вам следует поменять ID, который сейчас прописан в исходном коде задания.
Найдите в файле app/build.gradle строчку, содержащую applicationId «ru.ifmo.droid2016.vkdemo» и замените этот ID на свой новый уникальный ID. Можно просто добавить в конце свою фамилию или другое уникальное слово.
Получить отпечаток сертификата
Следуя инструкции https://vk.com/dev/android_sdk?f=1.1%20%D0%9E%D1%82%D0%BF%D0%B5%D1%87%D0%B0%D1%82%D0%BE%D0%BA%20%D1%81%D0%B5%D1%80%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%B0, определить отпечаток сертификата, установленного на компьютере, который вы используете для разработки. Это делается при помощи утилиты keytool , которая входит в состам JDK. В процессе выполнения задания нужно использовать debug сертификат (не release). Команда для получения сертификата выглядит приблизительно так (на Windows):
Дефолтный пароль для keystore: android
В выводе этой команды надо найти строчку вида
Из которой надо взять шестнадцатеричное значение, удалив все двоеточия — это и будет отпечаток сертификата, как он используется для идентификации приложения в API ВКонтакте: CD4C0748CD1AD063DB439F57245A4990C733218E .
Зарегистрировать приложение в API Вконтакте
- Зайти на страницу для разработчиков ВКонтакте: https://vk.com/dev
- Нажать «Создать приложение»

- Ввести любое название приложения, выбрать вариант «Standalone» и нажать «Подключить приложение»

- Пройти предложенную верификацию (через приложение или SMS — как вам нравится)
- После успешной верификации зайти в настройки зарегистрированного приложения и получить там ID приложения

- Там же в настройках приложения ввести
- Android application ID (которое вы прописали в app/build.gradle )
- Название активности ru.ifmo.droid2016.vkdemo.VkDemoActivity
- Ваш отпечаток сертификата (полученный ранее при помощи keytool)

Интеграция Vk SDK в коде приложения
- Указать зависимость на Vk SDK в файле app/build.gradle , добавив строчку в раздел dependencies (это пункт 2.1 инструкций, пункты 2.2 — 2.4 пропустить):
- В файл app/src/main/AndroidManifest.xml добавить рарешение на доступ в Интернет:
- Туда же в манифесте добавить запись об активности, которая используется Vk SDK для OAuth авторизации:
- Создать файл ресурсов vk.xml в папке app/src/main/res/values и прописать в нем ID приложения, полученный при регистрации приложения в API Вконтакте:
- В коде VkDemoApplication.onCreate добавить инициализацию Vk SDK:
После выполнения этой части задания приложение готово к использованию функционала Vk SDK, однако видимого результата не видно — еще никакой полезный код не написан. Можно убедиться, что приложение собирается и запускается.
Задание 2 — выполнение авторизации ВКонтакте
- Авторизация должна инициироваться из VkDemoActivity.onCreate
- В качестве параметра scope можно для начала использовать VKScopes.PHOTOS для доступа к фотографиям пользователя
- Код, обрабатывающий результат логина, должен быть написан в VkDemoActivity.onActivityResult
- В случае успешного логина вызвать метод VkDemoActivity.onLoggedIn(VKAccessToken token)
- В случае неуспешного логина вызвать метод VkDemoActivity.onLoginFailed(VKError error)
Если все работает правильно, то после логина должно быть показано короткое сообщение (тост) о результате логина.

Для того, чтобы не вызывать процедуру авторизации при каждом запуске приложения, токен можно сохранить в настройки и использовать при следующем запуске приложения:
- Сохранять токен следует при помощи вызова token.saveTokenToSharedPreferences(VkDemoActivity.this, Constants.KEY_TOKEN)
- Получить ранее сохраненный токен можно при помощи вызова VKAccessToken.tokenFromSharedPreferences(this, Constants.KEY_TOKEN)
Задание 3 — выполнение запроса с Vk SDK
После успешного логина можно выполнять запросы к API Вконтакте при помощи Vk SDK. При этом не понадобится писать код, выполняющий HTTP запросы или код JSON-парсеров — все это берет на себя Vk SDK.