Начал я разрабатывать под платформу Android не так давно, поэтому приходилось очень много гуглить в поисках какого либо решения для различных задач. В итоге материала много, но он разбросан по разным источникам и почти везде описания совсем нет. В своей статья я постараюсь максимально подробно описать те проблемы, с которыми я сталкнулся в ходе изучения языка и решения опредёленных задач.
Наша задача, научиться постить на стену вконтакте, используя Api функцию wall.post, фотографии сделанные с камеры телефона или прямо из галереи. Поэтому начнём пожалуй с самого важного, это авторизация через вконтакте и получение token'на.
Используя поиск google.com можно быстро и легко найти пост на хабре, в котором описано подключение библиотеки проекта "Kate Mobile". Сейчас там реализованы основные функции для работы с Api VKontakte, но часть из них пришлось дописывать для нашей конкретной задачи. Об этом немного позже.
SDK опубликовано на гитхабе https://github.com/thest1/Android-VKontakte-SDK. Распространяется по лицензии MIT. Вы можете её использовать в любых проектах, в том числе коммерческих. Можете её модифицировать.
Быстро понять принципы работы библиотеки вам поможет демо-проект AndroidVkSdkSample. В нём реализована авторизация и, в качестве примера, отправка записи на свою стену.
И так приступим:
- Импортируем проект AndroidVkSdk в свою IDE (лично я использую IntelliJ IDEA от JetBrains, мне как то больше подуше продукты этой компании). Я просто взял и скопировал папку src/* и res/* в свой проект.
- Добавляем в файл AndroidManifest.xml запрос прав на доступ в интернет:
<uses-permission android:name="android.permission.INTERNET"/>
- Объявляем переменные в классе MainActivyty:
private final int REQUEST_LOGIN = 1; private static final int REQUEST_CAMERA = 2; private static final int REQUEST_SELECT_PHOTO = 3; Account account = new Account(); Api api;
- Делаем запрос авторизации сразу при загрузке приложения, для этого в функции onCreate класса MainActivity пропишем строки:
//Восстановление сохранённой сессии account.restore(this); //Если сессия есть создаём API для обращения к серверу if( account.access_token != null ) { api = new Api(account.access_token, Constants.APP_ID); //Данные юзера есть, можно постить на стену api.createWallPost(user_id, text, null, null, false, false, false, null, null); } else { Intent intent = new Intent(); intent.setClass(this, LoginActivity.class); startActivityForResult(intent, REQUEST_LOGIN); }
- Добавляем функцию onActivityResult для получения ответа об успешной авторизации из LoginActivity:
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch( requestCode ) { //Получили авторизацию от контакта case REQUEST_LOGIN: if( resultCode == RESULT_OK ) { //авторизовались успешно account.access_token = data.getStringExtra("token"); account.user_id = data.getLongExtra("user_id", 0); account.save(StartActivity.this); api = new Api(account.access_token, Constants.API_ID); } break; } }
- Для того, чтобы приложение постоянно не спрашивало логин и пароль от контакта, а незаметно получала права, закомитим следующие строчки в файле LoginActivity.java:
//CookieSyncManager.createInstance(this); // //CookieManager cookieManager = CookieManager.getInstance(); //cookieManager.removeAllCookie();
В итоге, мы научились получать авторизацию из VK со всеми необходимыми правами для работы нашего приложения. Удачи вам в ваших начинаниях.
UPD:
Данный пост можно считать морально устаревшим, более новый с использованием VK SDK описан в статье Android и VKontakte SDK.
P.Nixx, 18.09.2012, 17:11