Главная » Android SDK
Android SDK
1. Подготовка к использованию
    1.1 Отпечаток сертификата
2. Подключение в приложении
    2.1. Подключение как артефакт Maven
    2.2. С использованием Gradle
    2.3. Без использования Gradle
    2.4. Подключение в Eclipse
    2.5. Редактирование AndroidManifest.xml
3. Работа с SDK
    3.1. Инициализация SDK
    3.2. Авторизация пользователя
    3.3 Обработка невалидного AccessToken
4. Вызов методов API
    4.1. Подготовка запросов
    4.2. Отправка запроса
    4.3. Пакетная обработка запросов
5. Публикация записей
    5.1. Работа с диалогом Share
    5.2. Работа с wall.post

SDK упрощает использование API ВКонтакте в Android-приложениях. Пользователи смогут пройти авторизацию без ввода логина и пароля. После этого вы сможете сразу начать использовать методы API.

Страница проекта и исходный код на GitHub:
http://github.com/VKCOM/vk-android-sdk

Поддерживаются версии Android 2.3 и выше.
1. Подготовка к использованию
Перед началом работы с VK SDK необходимо создать Standalone-приложение на странице создания приложения. Сохраните ID Вашего приложения и заполните поля «Название пакета для Android»,«Main Activity для Android», «Отпечаток сертификата для Android».
1.1 Отпечаток сертификата
Для получения отпечатка Вашего сертификата можно воспользоваться одним из следующих способов.
Получение отпечатка с помощью keytool
1) Необходимо определить местоположение хранилища для приложения. Хранилище ключей для отладки (debug) обычно находится в одной из этих директорий:
  • ~/.android/ для OS X и Linux,
  • C:\Documents and Settings\<user>\.android\ для Windows XP,
  • C:\Users\<user>\.android\ для Windows Vista, Windows 7 и Windows 8.

Хранилище для release версии обычно создаётся разработчиком.
2) После того, как Вы определили местоположение Вашего хранилища, используйте утилиту keytool (поставляемую совместно с Java SDK). Получите список ключей следующей командой:
keytool -exportcert -alias androiddebugkey -keystore path-to-debug-or-production-keystore -list -v

Вы должны увидеть нечто вроде
Certificate fingerprint: SHA1: DA:39:A3:EE:5E:6B:4B:0D:32:55:BF:EF:95:60:18:90:AF:D8:07:09

Удалив все двоеточия, Вы получите отпечаток своего ключа.
Получение отпечатка с помощью SDK
Если Вы уже добавили SDK в свой проект, можно использовать следующую функцию в любой Activity Вашего приложения.
String[] fingerprints = VKUtil.getCertificateFingerprint(this, this.getPackageName());

Как правило, fingerprints содержит одну строку, которая будет отпечатком Вашего сертификата (в зависимости от того, каким сертификатом было подписано приложение).

В настройках приложения можно добавить несколько отпечатков, например, debug и release.
2. Подключение в приложении
Мы отдаём предпочтение Android Studio, поэтому ориентируемся, в первую очередь, на него.
2.1. Подключение как артефакт Maven
androidsdk on Maven
Вы можете добавить в свой проект следующую maven-зависимость:
com.vk:androidsdk:[MAVEN_CENTRAL_VERSION]


К примеру, Ваш gradle скрипт будет содержать следующие зависимости:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:20.0.0'
    compile 'com.vk:androidsdk:1.6.5'
}

2.2. С использованием Gradle
Вы можете добавить библиотеку в Ваш проект с использованием Gradle:
1) Скопируйте директорию vksdk_library в директорию Вашего проекта.
2) Найдите settings.gradle.

Скорее всего, он содержит что-то вроде
include ':app'

Отредактируйте строку следующим образом:
include ':vksdk_library',':app'

3) Ваш проект теперь содержит модуль vksdk_library. Необходимо добавить его как зависимость к Вашему приложению. Найдите build.gradle в поддиректории модуля Вашего приложения (например YOUR_PROJECT/app/build.gradle)
Добавьте новую строку в dependencies.
compile project(':vksdk_library')

Ваш файл может выглядеть примерно так:

2.3. Без использования Gradle
Если Ваш проект не поддерживает Gradle, добавить SDK можно следующим образом:
  • Откройте Project Settings и выберите Modules.
  • Нажмите кнопку «Добавить» (+), и выберите Import module
  • Найдите директорию с VK SDK и выберите vksdk_library, нажмите «Добавить».
  • Выберите Create module from existing sources, затем два раза нажмите "Next" и переименуйте модуль из "main" в "vksdk", снова нажмите "next".
  • Добавьте новый модуль vksdk зависимостью к модулю Вашего приложения.

2.4. Подключение в Eclipse
  • В Package explorer нажмите правую кнопку мыши, затем Import.
  • Выберите Android/Existing android code into workspace.
  • Найдите папку с SDK, выберите vksdk_library.
  • Откройте Properties нового проекта vksdk_library, далее Java build path, Add folder, и выберите java.
  • В Properties Вашего приложения перейдите в Android, в секции library добавьте новую библиотеку vksdk_library.

2.5. Редактирование AndroidManifest.xml
Необходимо добавить в Ваш манифест следующие элементы:
1) в корень <manifest> необходимо добавить разрешение
<uses-permission android:name="android.permission.INTERNET" />

2) в <application> стоит добавить
<activity android:name="com.vk.sdk.VKServiceActivity" android:label="ServiceActivity" android:theme="@style/VK.Transparent" />

иначе могут быть проблемы с запуском авторизационной activity.
3. Работа с SDK
3.1. Инициализация SDK
1) Необходимо добавить в файл ресурсов (например strings.xml) информацию о ID Вашего приложения
<integer name="com_vk_sdk_AppId">YOUR_APP_ID</integer>

2) Необходимо инициализировать SDK при запуске приложения следующим методом, лучше всего это делать в методе onCreate Вашего Application
VKSdk.initialize(Context applicationContext);
3.2. Авторизация пользователя
Если у пользователя установлено приложение ВКонтакте, то авторизация пройдет через него без ввода логина и пароля.


Для авторизации есть несколько методов:
VKSdk.login(Activity runningActivity, String... scope);
VKSdk.login(Fragment runningFragment, String... scope);

Если у пользователя не установлено приложение ВКонтакте, то SDK будет использовать авторизацию через новую Activity при помощи OAuth.

После этапа авторизации в Вашем Activity или Fragment будет вызван метод onActivityResult. Пример обработки приведен ниже
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 if (!VKSdk.onActivityResult(requestCode, resultCode, data, new VKCallback<VKAccessToken>() {
@Override
public void onResult(VKAccessToken res) {
// Пользователь успешно авторизовался
}
@Override
public void onError(VKError error) {
// Произошла ошибка авторизации (например, пользователь запретил авторизацию)
}
})) {
super.onActivityResult(requestCode, resultCode, data);
}
}

3.3 Обработка невалидного AccessToken
Для обработки ситуаций, когда AccessToken становится невалиден (например, пользователь сменил пароль) необходимо использовать VKAccessTokenTracker как показано в примере ниже
public class Application extends android.app.Application {
VKAccessTokenTracker vkAccessTokenTracker = new VKAccessTokenTracker() {
@Override
public void onVKAccessTokenChanged(VKAccessToken oldToken, VKAccessToken newToken) {
if (newToken == null) {
// VKAccessToken is invalid
}
}
};
@Override
public void onCreate() {
super.onCreate();
vkAccessTokenTracker.startTracking();
VKSdk.initialize(this);
}
}
4. Вызов методов API
Для доступа к API можно использовать как встроенные в SDK методы, так и получив access_token использовать свою библиотеку.
4.1. Подготовка запросов
1) Простой запрос.
VKRequest request = VKApi.users().get();


2) Запрос с параметрами.
VKRequest request = VKApi.users().get(VKParameters.from(VKApiConst.USER_IDS, "1,2"));


3) Вариант с http загрузкой (если при авторизации в scope был передан VK_PER_NOHTTPS).
VKRequest request = VKApi.users().get(VKParameters.from(VKApiConst.USER_IDS, "1,2"));
request.secure = NO;


4) Запрос с количеством повторений.
VKRequest request = VKApi.wall().post(VKParameters.from(VKApiConst.OWNER_ID, "-60479154", VKApiConst.MESSAGE, "Привет, друзья!"));
request.attempts = 10;
//or infinite
//postReq.attempts = 0;

Будет выполнено 10 запросов, пока не произойдет успех, или не будет возвращен API error

5) Загрузка произвольного метода API (нужно иметь в виду полученный scope).
VKRequest request = new VKRequest("friends.get", VKParameters.from(VKApiConst.FIELDS, "sex,bdate,city"));


6) Загрузка фото на сервера VK.

final Bitmap photo = getPhoto();
VKRequest request = VKApi.uploadWallPhotoRequest(new VKUploadImage(photo, VKImageParameters.jpgImage(0.9f)), 0, 60479154);

4.2. Отправка запроса

request.executeWithListener(new VKRequestListener() {
@Override
public void onComplete(VKResponse response) {
//Do complete stuff
}
@Override
public void onError(VKError error) {
//Do error stuff
}
@Override
public void attemptFailed(VKRequest request, int attemptNumber, int totalAttempts) {
//I don't really believe in progress
}
});

4.3. Пакетная обработка запросов
SDK предусматривает возможность выполнения нескольких методов в один запрос.
1) Подготавливаются необходимые запросы:

VKRequest request1 = VKApi.uploadWallPhotoRequest(new VKUploadImage(photo1, VKImageParameters.jpgImage(0.9f)), 0, 60479154);
VKRequest request2 = VKApi.uploadWallPhotoRequest(new VKUploadImage(photo2, VKImageParameters.jpgImage(0.5f)), 0, 60479154);
VKRequest request3 = VKApi.uploadWallPhotoRequest(new VKUploadImage(photo3, VKImageParameters.jpgImage(0.1f)), 0, 60479154);
VKRequest request4 = VKApi.uploadWallPhotoRequest(new VKUploadImage(photo4, VKImageParameters.pngImage()), 0, 60479154);

2) Необходимые запросы объединяются в один.
VKBatchRequest batch = new VKBatchRequest(request1, request2, request3, request4);

3) Запрос загружается стандартным путём.
batch.executeWithListener(new VKBatchRequestListener() {
@Override
public void onComplete(VKResponse[] responses) {
super.onComplete(responses);
String[] photos = new String[responses.length];
for (int i = 0; i < responses.length; i++) {
VKPhoto photoModel = ((VKPhotoArray) responses[i].parsedModel).get(0);
photos[i] = String.format("photo%s_%s", photoModel.owner_id, photoModel.id);
}
makePost(VKStringJoiner.join(photos, ","));
}

@Override
public void onError(VKError error) {
showError(error);
}
});


Продолжение