На сегодняшний день почти любой мобильное приложение имеет «социальные» фишки. Вся хотят твитить и ставить лайки. И мы хотим! Поэтому давайте сегодня научимся работать с Facebook SDK for Android.

Что будем делать?

Создадим приложение под ничего не значащим названием «Everybody loves Idev.by!», которое будет постить сообщение в ленту пользователя. Сообщение будет содержать ссылку и изображение.

Необходимый инструмент

Для работы нам понадобится следующее:

  1. Eclipse + ADT
  2. Android SDK
  3. Facebook SDK


Первые два инструмента вы скорее всего уже имеете.

Опишу, как и где получить последнее. Для этого пройдите по ссылки https://github.com/facebook/facebook-android-sdk где легким движением мыши его можно скачать. Если пользуетесь git, то все еще проще, в консоли введите

git clone git://github.com/facebook/facebook-android-sdk.git

в результате этой команды получите у себя на компе копию репозитория с искомым SDK

Алгоритм действий

Последовательность действий при привязке приложения к FB можно описать следующим образом:

  1. Зарегистрировать приложение в FB
  2. Добавить в workspace эклипса Facebook SDK как библиотеку
  3. Реализовать авторизацию приложения
  4. Реализовать собственно постинг на стену


Далее пройдемся по этим пунктам детально.

Регистрация приложения в 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 подхода:

  1. Авторизация используя SSO – авторизироваться нужно будет один раз и если на девайсе есть официальный клиент от FB то вообще не придется, подход чуть более сложный и если нужно запостить одно сообщение по-моему мнению не оправданный. Прочитать про SSO можно тут
  2. Авторизация «в лоб», простой подход, не очень хороший подход, если обращений к 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 поля? Сейчас расскажу, зачем они нужны.

  1. API_KEY – это тот самый ключ, который вы можете видеть на странице вашего приложения
  2. permissions – содержит в себе разрешения на действия, которые будет выполнять приложение. На самом деле их очень много, мы используем только одно “publish_stream” – запрос на пост сообщений на стену юзера. Все разрешения, которые требует приложение, будут показаны пользователю во время авторизации
  3. 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *