Содержание
На сегодняшний день почти любой мобильное приложение имеет «социальные» фишки. Вся хотят твитить и ставить лайки. И мы хотим! Поэтому давайте сегодня научимся работать с Facebook SDK for Android.
Что будем делать?
Создадим приложение под ничего не значащим названием «Everybody loves Idev.by!», которое будет постить сообщение в ленту пользователя. Сообщение будет содержать ссылку и изображение.
Необходимый инструмент
Для работы нам понадобится следующее:
- Eclipse + ADT
- Android SDK
- Facebook SDK
Первые два инструмента вы скорее всего уже имеете.
Опишу, как и где получить последнее. Для этого пройдите по ссылки https://github.com/facebook/facebook-android-sdk где легким движением мыши его можно скачать. Если пользуетесь git, то все еще проще, в консоли введите
git clone git://github.com/facebook/facebook-android-sdk.git
в результате этой команды получите у себя на компе копию репозитория с искомым SDK
Алгоритм действий
Последовательность действий при привязке приложения к FB можно описать следующим образом:
- Зарегистрировать приложение в FB
- Добавить в workspace эклипса Facebook SDK как библиотеку
- Реализовать авторизацию приложения
- Реализовать собственно постинг на стену
Далее пройдемся по этим пунктам детально.
Регистрация приложения в Facebook
Проходим по ссылке https://developers.facebook.com/apps где в верхнем правом углу находим кнопку «+ создать новое приложение»
Водим название приложения, выбираем локаль и попадаем на следующий экран:
Заполняем нужные поля и запоминаем app ID – он понадобиться в недалеком будущем.
Теперь скролим страницу вниз и жмем на Mobile native, видите поле Android Key Hash?
Этот кэш нужно получить притом 2 раза: для вашего debug ключа и ключа которым вы будите подписывать приложение перед релизом. Для debug ключа это делается при помощи консольной команды:
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
Тут androiddebugkey — псевдоним вашего ключа (alias), а ~/.android/debug.keystore –путь к хранилищу ключей (keystore). При выполнении команды система обязательно должна спросить пароль – android.
Для получения хэша релизного ключа замените путь и псевдоним на свои, пароль тоже известен вам. После того как внесет оба хэша в нужно поле не забудь нажать “save changes”.
На всякий случай покажу, как узнать путь в дебажному ключу в эклипсе:
На этом первый шаг закончен. Идем дальше.
Добавление Facebook SDK как библиотеки
Мы уже получили sdk на в разделе «необходимый инструмент», теперь открываем эклипс и создаем новый проект из существующий ресурсов: (File | New | Project | Android Project) — Create project from existing source где выбираем папку с ресурсами из иерархии вида: /facebook-android-sdk/facebook).
Теперь создадим проект и назовем его Eveybody_loves_idev и создадим в нем ссылку на проект com_facebook_android, чтобы использовать его как библиотеку. Зайдите в настройки проекта и следуйте скриншоту:
Теперь можно использовать Facebook SDK в нашем проекте.
Авторизация приложения
авторизации есть 2 подхода:
- Авторизация используя SSO – авторизироваться нужно будет один раз и если на девайсе есть официальный клиент от FB то вообще не придется, подход чуть более сложный и если нужно запостить одно сообщение по-моему мнению не оправданный. Прочитать про SSO можно тут
- Авторизация «в лоб», простой подход, не очень хороший подход, если обращений к FB много.
Как вы уже поняли, тут будет описан второй подход. Предлагаю посмотреть код:
package by.idev.facebook;
import com.facebook.android.DialogError;
import com.facebook.android.Facebook;
import com.facebook.android.Facebook.DialogListener;
import com.facebook.android.FacebookError;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.Toast;
public class Everybody_loves_idevActivity extends Activity {
public final String API_KEY = "Ваш API_KEY";
public final String[] permissions = {"publish_stream"};
Facebook facebook = new Facebook(API_KEY);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageButton imageButton = (ImageButton)findViewById(R.id.button);
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
authorizeAndPostMassage();
}
});
}
public void authorizeAndPostMassage() {
facebook.authorize(this, permissions, new DialogListener () {
@Override
public void onComplete(Bundle values) {
Toast.makeText(Everybody_loves_idevActivity.this, "Authorization successful", Toast.LENGTH_SHORT).show();
postMassage();
}
@Override
public void onFacebookError(FacebookError e) {
Toast.makeText(Everybody_loves_idevActivity.this, "Facebook error, try again later", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(DialogError e) {
Toast.makeText(Everybody_loves_idevActivity.this, "Error, try again later", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel() {
//Этот коллбэк никогда не срабатывает, вероятно, ошибка в SDK
Toast.makeText(Everybody_loves_idevActivity.this, "Authorization canceled", Toast.LENGTH_SHORT).show();
}});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
facebook.authorizeCallback(requestCode, resultCode, data);
}
}
Видите 3 поля? Сейчас расскажу, зачем они нужны.
- API_KEY – это тот самый ключ, который вы можете видеть на странице вашего приложения
- permissions – содержит в себе разрешения на действия, которые будет выполнять приложение. На самом деле их очень много, мы используем только одно “publish_stream” – запрос на пост сообщений на стену юзера. Все разрешения, которые требует приложение, будут показаны пользователю во время авторизации
- facebook – утилитарный класс из SDK, через него происходит все взаимодействие с FB
Как видно из кода, при создании активности мы привязываем к кнопке действие, попытку авторизироваться и, в случае удачной авторизации, — запостить на стену.
Не забудьте реазиловать метд onActivityResult() так как описано, иначе будет траблы.
Подготовка и отправка сообщения
Сначала код, комментарии потом:
private void postMassage() {
Bundle messageBunlde = prepareBundle();
facebook.dialog(this, "feed", messageBunlde, new DialogListener () {
@Override
public void onComplete(Bundle values) {
Toast.makeText(Everybody_loves_idevActivity.this, "Tnx!", Toast.LENGTH_SHORT).show();
}
@Override
public void onFacebookError(FacebookError e) {
Toast.makeText(Everybody_loves_idevActivity.this, "Facebook error, try again later", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(DialogError e) {
Toast.makeText(Everybody_loves_idevActivity.this, "Error, try again later", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel() {
//Этот коллбэк никогда не срабатывает, вероятно, ошибка в SDK
Toast.makeText(Everybody_loves_idevActivity.this, "Authorization canceled", Toast.LENGTH_SHORT).show();
}});
}
private Bundle prepareBundle() {
Bundle postBundle = new Bundle();
postBundle.putString("name", "How much I love idev.by!");
postBundle.putString("caption", "I love it so much!");
postBundle.putString("description", "by USERNAME");
postBundle.putString("link","http://idev.by");
postBundle.putString("picture","http://i.inoblogger.ru/wp-content/uploads/2011/01/android-logo-androidia1.jpg");
return postBundle;
}
Тут всего 2 метода, один служебный prepareBundle() готовит бандл для сообщения, в него кладутся значения параметров нашего сообщения. Полный список параметров можно посмотреть тут:
http://developers.facebook.com/docs/reference/dialogs/feed/
Метод postMessage() прост до безобразия, берем бандл и обращаемся к facebook.dialog(), который принимает контекст, экшн (говорит о том, какое действие нужно выполнить, на данный момент это только «feed» и «oauth»), бандл с параметрами экшена и листенер.
На этом все, запускаем приложения и радуемся, теперь ваш апп может гадить юзеру на стену.
Перед релизом не забываем добавить хэш ключа на страницу приложения
Скачать исходники можно тут
Последние статьи
-
#Droidcon Stockholm 2014 или какими я хочу видеть Android-конференции [дополняется]
-
Вышла новая версия Android NDK r8e.
-
Вызов Java-методов из C/C++ кода при помощи JNI на Android.
-
Новое в iOS 6: Публикация в Facebook, Twitter, Sina’s Weibo
-
Учимся возбуждать…. Java-исключений из нативного кода на C/C++ через JNI в Android.
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: