Skip to content

IFMO-Android-2016/practice3

Repository files navigation

Интеграция с ВКонтакте

В рамках этого практического задания предлагается сделать небольшое приложение, использующее 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):

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.

Зарегистрировать приложение в API Вконтакте

  • Зайти на страницу для разработчиков ВКонтакте: https://vk.com/dev
  • Нажать "Создать приложение"

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

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

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

Интеграция Vk SDK в коде приложения

Следовать дальше инструкциям 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, однако видимого результата не видно -- еще никакой полезный код не написан. Можно убедиться, что приложение собирается и запускается.

Задание 2 - выполнение авторизации ВКонтакте

Следуя инструкции 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)

Задание 3 - выполнение запроса с Vk SDK

После успешного логина можно выполнять запросы к 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.

About

Авторизация во ВКонтакте

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages