В рамках этого практического задания предлагается сделать небольшое приложение, использующее SDK социальной сети ВКонтакте для выполнения авторизации и нескольких несложных запросов. Работа с SDK описана на странице официально документациий для разработчиков ВКонтакте: https://vk.com/dev/android_sdk -- и в процессе выполнения этого задания надо будет ознакомиться с ней и выполнить описанные в ней инструкции. В результате получится приложение, зарегистрированное для работы с ВКонтакте, которое можно будет использовать в качестве основы для реализации функций интеграции с социальной сетью, если такие функции понадобятся, к примеру, в курсовом проекте.
Первый экран приложения (MainActivity) содержит только кнопку "Войти через ВКонтакте", по нажатию на которую открывается второй экран.
Второй экран приложения (VkDemoActivity) при старте проверят, был ли пользователь приложения ранее уже авторизован во ВКонтакте, и если нет -- выполняет авторизацию при помощи Vk SDK. В процессе этой авторизации может быть показан либо экран приложения ВКонтакте, если оно установлено на устройстве, либо страница мобильного сайта ВКонтакте, показанная в WebView внутри приложения. После успешной авторизации выполняется запрос информации о пользовтеле и показывается его фотография и имя. По нажатию на кнопку "Выйти" происходит выход на первый экран, чтобы можно было снова залогиниться тем же или другим пользователем.
![]() |
![]() |
Код первого экрана уже реализован, а код второго экрана надо написать в классе VkDemoActivity в рамках этого задания.
Для того, чтобы можно было использовать функции Vk SDK в нашем приложении, нужно выполнить инструкции, описанные здесь: https://vk.com/dev/android_sdk
Подробнее по шагам:
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):
keytool -exportcert -alias androiddebugkey -keystore C:/Users/<имя пользователя Windows>/.android/debug.keystore -list -v
Дефолтный пароль для keystore: android
В выводе этой команды надо найти строчку вида
SHA1: CD:4C:07:48:CD:1A:D0:63:DB:43:9F:57:24:5A:49:90:C7:33:21:8E
Из которой надо взять шестнадцатеричное значение, удалив все двоеточия -- это и будет отпечаток сертификата, как он используется для идентификации приложения в API ВКонтакте: CD4C0748CD1AD063DB439F57245A4990C733218E.
- Зайти на страницу для разработчиков ВКонтакте: https://vk.com/dev
- Нажать "Создать приложение"
- Ввести любое название приложения, выбрать вариант "Standalone" и нажать "Подключить приложение"
- Пройти предложенную верификацию (через приложение или SMS -- как вам нравится)
- После успешной верификации зайти в настройки зарегистрированного приложения и получить там ID приложения
- Там же в настройках приложения ввести
- Android application ID (которое вы прописали в
app/build.gradle) - Название активности
ru.ifmo.droid2016.vkdemo.VkDemoActivity - Ваш отпечаток сертификата (полученный ранее при помощи keytool)
- Android application ID (которое вы прописали в
- Не забыть нажать "Сохранить изменения"
Следовать дальше инструкциям https://vk.com/dev/android_sdk?f=2.%20%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B2%20%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B8
- Указать зависимость на Vk SDK в файле
app/build.gradle, добавив строчку в раздел dependencies (это пункт 2.1 инструкций, пункты 2.2 - 2.4 пропустить):
compile 'com.vk:androidsdk:1.6.7'
- В файл
app/src/main/AndroidManifest.xmlдобавить рарешение на доступ в Интернет:
<uses-permission android:name="android.permission.INTERNET" />
- Туда же в манифесте добавить запись об активности, которая используется Vk SDK для OAuth авторизации:
<activity
android:name="com.vk.sdk.VKServiceActivity"
android:label="ServiceActivity"
android:theme="@style/VK.Transparent" />
- Создать файл ресурсов
vk.xmlв папкеapp/src/main/res/valuesи прописать в нем ID приложения, полученный при регистрации приложения в API Вконтакте:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="com_vk_sdk_AppId">ID приложения, зарегистрированного в API ВКонтакте</integer>
</resources>
- В коде
VkDemoApplication.onCreateдобавить инициализацию Vk SDK:
VKSdk.initialize(this);
После выполнения этой части задания приложение готово к использованию функционала Vk SDK, однако видимого результата не видно -- еще никакой полезный код не написан. Можно убедиться, что приложение собирается и запускается.
Следуя инструкции https://vk.com/dev/android_sdk?f=3.2.%20%D0%90%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F выполнить авторизацию пользователя во ВКонтакте.
- Авторизация должна инициироваться из
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)
После успешного логина можно выполнять запросы к API Вконтакте при помощи Vk SDK. При этом не понадобится писать код, выполняющий HTTP запросы или код JSON-парсеров -- все это берет на себя Vk SDK.
Мы хотим запросить информацию о текущем залогиненном пользователе при помощи запроса users.get и из полученного ответа извлечь имя пользователя и URL его фотографии, и отобразить их на экране. Для отображения имени в верстке и в коде VkDemoActivity уже есть элемент:
private TextView nameView;
а для фотографии:
private SimpleDraweeView imageView;
Принцип выполнения запросов к API Вконтакте описан здесь: https://vk.com/dev/android_sdk?f=4.%20%D0%92%D1%8B%D0%B7%D0%BE%D0%B2%20%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2%20API. Запрос должен выполняться асинхронно в фоновом потоке, а результат должен обрабатываться в основном (main) потоке. Для асинхронного выполнения запроса можно использовать вызов VKRequest.executeWithListener - но тогда придется подумать о том, как сохранить результат выполнения запроса при смене конфигурации, чтобы при повороте экрана не выполнять запрос снова. Другой вариант -- использовать механизм AsyncTaskLoader, и в нем в методе loadInBackground выполнять запрос при помощи вызова VKRequest.executeSyncWithListener.
- В методе
VkDemoActivity.onLoggedIn(VKAccessToken token)написать код, который запустит асинхронное выполнение запроса users.get без параметра user_ids (запрос информации о текущем пользователе). - Чтобы самим не писать парсер, нужно у объекта запроса
VKRequestперед выполнением запроса вызвать метод:
request.setModelClass(VKUsersArray.class);
тогда готовая модель ответа типа VKUsersArray окажется в поле ответа VKResponse.parsedModel.
- При получении результата выполнения запроса отобразить имя и фото пользователя, либо сообщение об ошибке.
Можно продолжить экспериментировать с Vk SDK и выполнить какие-нибудь еще запросы. Например, можно запросить список друзей при помощи метода friends.get и показать его в отдельном экране при помощи RecyclerView.







