- Часто використовувані скорочення
- Огляд інтерфейсів Facebook Platform API
- Введення в Facebook SDK for Android
- Таблиця 1. Пакет com.facebook.android
- Установка Android SDK
- Установка Facebook SDK for Android
- Реєстрація додатки
- приклад програми
- Лістинг 1. Ініціалізація ідентифікатора додатка
- Лістинг 2. Оголошення призначеного для користувача інтерфейсу для головного екрану
- Лістинг 3. Оголошення призначеного для користувача інтерфейсу рядки ListView
- Лістинг 4. Оголошення призначеного для користувача інтерфейсу елементів меню
- Малюнок 1. Схема екрану SampleApp
- Лістинг 5. Ініціалізація додатки
- Лістинг 6. Створення меню
- Лістинг 7. Створення меню
- Лістинг 8. Обробка дії, обраного в меню
- Відображення діалогів Facebook
- Лістинг 9. Метод Facebook Dialog
- Лістинг 10. Виклик методу dialog () і обробка функції зворотного виклику
- Малюнок 2. Розміщення повідомлення на стіні
- авторизація користувачів
- Малюнок 3. Протокол OAuth 2.0 (IETF)
- Лістинг 11. Генерування хеш-ключа додатки
- Малюнок 4. Введення хеш-ключа додатки
- Лістинг 12. Визначення обробника результату дії
- Лістинг 13. Метод authorize
- Лістинг 14. Виклик методу authorize () з дозволами
- Малюнок 5. Екрани авторизації і дозволів (WebView)
- Виконання запитів Facebook API
- Лістинг 15. Асинхронна диспетчеризація методу
- Лістинг 16. Обробка запиту на отримання списку друзів
- Малюнок 6. Відображення результатів
- Ресурси для скачування
Наша взаимовыгодная связь https://banwar.org/
Створення Facebook-додатків для платформи Android Platform за допомогою Facebook SDK for Android
16 грудня 2010 року - за запитом автора оновлений файл для завантаження і змінено його назву на fb-sampleapp.zip (див. Розділ Завантаження ).
Часто використовувані скорочення
- ADT: Android Development Tools (інструментарій розробки для платформи Android)
- API: Application Programming Interface (прикладний інтерфейс програмування)
- IDE: Integrated Development Environment (інтегроване середовище розробки)
- JDK: Java Development Kit (комплект інструментальних засобів для розробки на мові Java)
- JSON: JavaScript Object Notation (система позначень об'єктів JavaScript)
- REST: Representational State Transfer (передача репрезентативного стану)
- SDK: Software Development Kit (комплект інструментальних засобів для розробки програмного забезпечення)
- UI: User Interface (призначений для користувача інтерфейс)
- URL: Uniform Resource Locator (уніфікований покажчик ресурсів)
- XML: Extensible Markup Language (розширювана мова розмітки)
попередні вимоги
Для роботи зі статтею необхідні відповідна кваліфікація та інструментальні засоби:
- Базові знання технології Java ™ та навички використання Eclipse (або інший IDE).
- Java Development Kit (версії 5 або 6).
- Eclipse (версії 3.4 або 3.5).
- Android SDK і плагін ADT.
Посилання на файли для завантаження і інформацію по установці приведені в розділі ресурси .
Огляд інтерфейсів Facebook Platform API
Перед вивченням Facebook SDK for Android важливо розібратися в платформі Facebook Platform і її інтерфейси. Згідно Facebook, платформа Facebook Platform дозволяє кожному "створювати соціальні програми для Facebook і Web". Для створення таких додатків Facebook пропонує великий набір основних і розширених API і SDK (див. Розділ ресурси ).
Основним інтерфейсом Facebook Platform є Graph API, який дозволяє читати і записувати дані в Facebook. Facebook також має так званий "старий" Old Rest API. Більш новий Graph API змінює парадигму API зі способу читання або запису даних в Facebook, орієнтованого на використання методів, на нову парадигму, яка використовує об'єкти (призначені для користувача профілі, друзі, поштові повідомлення, фотографії, переваги і т.д.) і їх взаємини або взаємозв'язку один з одним. Такий підхід спрощує Facebook API і робить його більш цілісним. Потрібно відзначити, що хоча Graph API і є кращим прикладним інтерфейсом Facebook API, Old REST API все ще активно використовується і підтримується. Обидва інтерфейсу, Graph API і REST API, застосовні до мобільних додатків, як переносних орієнтованим (native) так і Web-додатків, включаючи мобільний Web-контент у вбудованих додатках, що використовують WebViews.
Кожному об'єкту Graph API призначається унікальний ідентифікатор (ID), що дозволяє легко звертатися до нього по URL, який згодом можна уточнити для конкретного об'єкта / підключення. Загальна структура URL об'єкта: https://graph.facebook.com/OBJECT_ID/CONNECTION_TYPE, де OBJECT_ID - унікальний ідентифікатор об'єкта, а CONNECTION_TYPE - один з типів підключення, підтримуваних об'єктом. Наприклад, сторінка підтримує наступні підключення: feed / wall, photos, notes, posts, members і т.д.
Використовуючи Graph API, можна отримувати, видаляти і публікувати об'єкти. Можна виконувати пошук об'єкта, оновлення об'єкта, фільтрацію результатів пошуку і навіть динамічно виявляти підключення і взаємозв'язку об'єкта.
За замовчуванням додатка мають доступ до відкритих даних користувача. Щоб отримати доступ до закритих даних, з додатком потрібно спочатку запитати у користувача дозволу, звані розширеними дозволами (extended permissions). Facebook визначає велике число дозволів, про які можна прочитати на сторінці Extended Permissions (див. Розділ ресурси ).
Введення в Facebook SDK for Android
Тепер, після знайомства з Facebook Platform API, давайте розглянемо Facebook SDK for Android.
Facebook SDK for Android - це надбудова на мові програмування Java над Facebook Graph API і Old REST API. Цей SDK має відкриті вихідні коди і розміщується на github в репозиторії facebook / facebook-android-sdk (див. Розділ ресурси ). Відзначимо, що цей SDK може змінюватися, так як за своєю природою є постійно розвиваються. Він поширюється на умовах Apache License Version 2.0.
Facebook SDK for Android приховує більшу частину деталей реалізації, розглянутих в попередньому розділі Огляд Facebook Platform API . Це досягається за допомогою шести Java-класів, описаних в таблиці 1 .
Таблиця 1. Пакет com.facebook.android
Класи Опис AsyncFacebookRunner Допоміжний клас, який реалізує асинхронні виклики Facebook API. DialogError Клас, інкапсулює помилки діалогу. Facebook Головний клас Facebook для взаємодії з Facebook Platform API. FacebookError Клас, інкапсулює помилки Facebook. FbDialog Клас, який реалізує діалоги WebView for Facebook. Util Допоміжний клас з декількома корисними методами.
Facebook SDK for Android також містить кілька корисних прикладів, які можна використовувати як основу для своїх власних додатків.
Особливий інтерес представляють класи Facebook і Facebook Dialog, які ми розглянемо більш докладно. Базовий клас Facebook инкапсулирует методи для авторизації користувача, створення діалогів Facebook, виконання запитів до API, завершення сеансу роботи користувача, а також отримання і настройки доступу та інформації про сеанс і його стані. Клас Facebook Dialog реалізує WebView і методи для його створення, а також логіку обробки відповідей Facebook URL (станів). Діалог - це центральне поняття в SDK. SDK надає два методи аутентифікації - т.зв. єдиний вхід (single-sign on), що використовує, якщо він обраний, вбудовані прикладні діалоги Facebook, і підхід за замовчуванням, який базується на WebView. У даній статті я сконцентруюся на підході WebView. Решта класи SDK і допоміжні класи інкапсулюють інформацію про помилки або надають корисні функції, які використовуються в рамках SDK.
У наступних розділах основна увага приділяється варіантів використання типового Facebook-додатки:
- Установка Facebook SDK for Android.
- Реєстрація додатки.
- Створення SampleApp.
- Відображення діалогів Facebook.
- Авторизація користувача.
- Виконання запитів до API.
Установка Android SDK
Необхідно завантажити і встановити Eclipse або іншу бажану IDE. Крім того, необхідно встановити Android SDK. Інформація щодо завантаження та встановлення Eclipse і Android SDK приведена на сторінці Download the Android SDK Web-сайту Android Developer (див. Розділ ресурси ).
Установка Facebook SDK for Android
Facebook SDK for Android розміщений в github в репозиторії facebook / facebook-android-sdk. Завантажте вихідний код SDK на свій комп'ютер і розархівуйте його в робочий каталог. Запустіть Eclipse і створіть проект Android Project, вибравши File Menu -> New -> Project і Android Project. Створіть проект з існуючого вихідного коду і вкажіть каталог, в який розархівували завантажені файли (посилання на вихідний код приведена в розділі Завантаження ).
Реєстрація додатки
Перед початком роботи необхідно зареєструвати Facebook-додаток, а також отримати ідентифікатор додатки (client_id) і асоційований з ним секретний ключ (client_secret). Ідентифікатор client_id використовується в додатку при виконанні різних звернень до Facebook API.
приклад програми
Мій приклад програми, який я назвав SampleApp, демонструє використання Facebook SDK for Android. Додаток складається з одного файлу, що реалізує роботу SampleApp і використовує один екран для відображення повідомлень, друзів Facebook і елементів меню для реєстрації / аутентифікації користувача, отримання списку друзів і для відправки повідомлення на стіну (wall) аутентифицированного користувача (me).
Пам'ятайте, що до початку роботи необхідно зареєструвати додаток на Facebook (як розглядалося раніше) і встановити для атрибута APP_ID в SampleApp.java значення client_id, надане Facebook (див. лістинг 1 ).
Лістинг 1. Ініціалізація ідентифікатора додатка
// Установка ідентифікатора додатка в отримане значення client_id // Див. Http://www.facebook.com/developers/createapp.php public static final String APP_ID = ".....";
У нашому прикладі програми використовується лінійна схема екрану, яка містить TextView для повідомлень про стан, ListView для відображення списку друзів Facebook, витягнутого з сервера, і елементи меню: реєстрація / авторизація користувача, отримання списку друзів, відправка повідомлення на стіну аутентифицированного користувача. В лістингу 2 наведені оголошення призначеного для користувача інтерфейсу на мові XML для схеми головного екрана призначеного для користувача інтерфейсу.
Лістинг 2. Оголошення призначеного для користувача інтерфейсу для головного екрану
<? Xml version = "1.0" encoding = "utf-8"?> <LinearLayout xmlns: android = "http://schemas.android.com/apk/res/android" android: orientation = "vertical" android: layout_width = "fill_parent" android: layout_height = "fill_parent" android: background = "@ drawable / black"> <TextView android: id = "@ + id / txt" android: text = "@ string / hello" android: textColor = " @ drawable / white "android: layout_width =" wrap_content "android: layout_height =" wrap_content "android: paddingRight =" 10dp "android: paddingLeft =" 10dp "android: layout_margin =" 10dp "android: textSize =" 10sp "android: layout_marginTop = "5px" android: layout_marginBottom = "5px" android: layout_marginRight = "0px" android: layout_marginLeft = "0px" android: gravity = "left" /> <ListView android: id = "@ + id / friendsview" android: layout_width = "fill_parent" android: layout_height = "wrap_content" android: textFilterEnabled = "true" /> <TextView android: id = "@ id / android: empty" android: layout_width = "match_parent" android: layout_height = "match_parent" android: text = "No data" /> </ LinearLayout>
В лістингу 3 наведені оголошення призначеного для користувача інтерфейсу на XML для кожного рядка в ListView.
Лістинг 3. Оголошення призначеного для користувача інтерфейсу рядки ListView
<? Xml version = "1.0" encoding = "utf-8"?> <LinearLayout xmlns: android = "http://schemas.android.com/apk/res/android" android: layout_width = "fill_parent" android: layout_height = "? android: attr / listPreferredItemHeight" android: padding = "10dip"> <TextView android: id = "@ + id / rowtext_top" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: gravity = "center_vertical "/> </ LinearLayout>
В лістингу 4 наведені оголошення призначеного для користувача інтерфейсу на XML для елементів меню.
Лістинг 4. Оголошення призначеного для користувача інтерфейсу елементів меню
<Menu xmlns: android = "http://schemas.android.com/apk/res/android"> <item android: id = "@ + id / login" android: title = "Login" /> <item android: id = "@ + id / getfriends" android: title = "Get Friends" /> <item android: id = "@ + id / wallpost" android: title = "Wall Post" /> </ menu>
на малюнку 1 показані результати цих оголошень призначеного для користувача інтерфейсу для SampleApp до (з кнопкою Login) і після (з кнопками Logout, Get Friends і Wall Post) входу в систему.
Малюнок 1. Схема екрану SampleApp

При створенні екземпляра SampleApp платформа Android активізує метод SampleApp onCreate (). Цей метод попередньо перевіряє, чи встановлений App ID, инициализирует ресурси призначеного для користувача інтерфейсу і екземпляр Facebook-сеансу (див. лістинг 5 ).
Лістинг 5. Ініціалізація додатки
/ ** Викликається при першій активності. * / @Override public void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); // Перевірка установки client_app. if (APP_ID == null) {Util.showAlert (this, "Warning", "Facebook Application ID must be set ..."); } // Ініціалізація уявлення вмісту. setContentView (R.layout.main); // Get the status text line resource mText = (TextView) SampleApp.this.findViewById (R.id.txt); // Установка ListView Adapter, що завантажується при виборі get friends. listView = (ListView) findViewById (R.id.friendsview); friendsArrayAdapter = new FriendsArrayAdapter (this, R.layout.rowlayout, friends); listView.setAdapter (friendsArrayAdapter); // Визначення крутного об'єкта (spinner), що використовується // при завантаженні списку користувачів по мережі. mSpinner = new ProgressDialog (listView.getContext ()); mSpinner.requestWindowFeature (Window.FEATURE_NO_TITLE); mSpinner.setMessage ( "Loading ..."); // Ініціалізація сеансу роботи Facebook. mFacebook = new Facebook (APP_ID); mAsyncRunner = new AsyncFacebookRunner (mFacebook); }
Інша логіка роботи програми активізується при взаємодіях з призначеним для користувача інтерфейсом за допомогою елементів меню. Визначено три елементи меню: 1) login / logout (вхід / вихід, що перемикається), 2) get friends (отримання списку друзів) і 3) post to the wall (публікація на стіні) (див. лістинг 4 ). При виборі елемента меню додаток виконує відповідну дію. В лістингу 6 показано, як обробляються елементи меню. Він демонструє створення екземпляра меню шляхом конкретизації його XML-визначення.
Лістинг 6. Створення меню
/ ** * Активізується під час створення меню * @param - створюване меню * / @Override public boolean onCreateOptionsMenu (Menu menu) {MenuInflater inflater = getMenuInflater (); inflater.inflate (R.menu.main_menu, menu); return true; }
В лістингу 7 демонструється зміна елементів меню перед відображенням, тобто висновок кнопок login або logout, а також включення / вимикання опцій вилучення списку друзів і публікації на стіні.
Лістинг 7. Створення меню
/ ** * Активізується при підготовці відображення меню * @param menu - Готують меню * / @Override public boolean onPrepareOptionsMenu (Menu menu) {MenuItem loginItem = menu.findItem (R.id.login); MenuItem postItem = menu.findItem (R.id.wallpost); MenuItem getfriendsItem = menu.findItem (R.id.getfriends); if (mFacebook.isSessionValid ()) {loginItem.setTitle ( "Logout"); postItem.setEnabled (true); getfriendsItem.setEnabled (true); } Else {loginItem.setTitle ( "Login"); postItem.setEnabled (false); getfriendsItem.setEnabled (false); } LoginItem.setEnabled (true); return super.onPrepareOptionsMenu (menu); }
В лістингу 8 показано, як обробляються елементи меню і активізується відповідне дію (login / logout, get friends, post to wall).
Лістинг 8. Обробка дії, обраного в меню
/ ** * Активізується при виборі елемента меню * @param item - обраний елемент меню * / @Override public boolean onOptionsItemSelected (MenuItem item) {switch (item.getItemId ()) {// Перемикання login / logout. case R.id.login: // Зміна стану кнопки. // Після login перейти в logout. if (mFacebook.isSessionValid ()) {AsyncFacebookRunner asyncRunner = new AsyncFacebookRunner (mFacebook); asyncRunner.logout (this.getBaseContext (), new LogoutRequestListener ()); } Else {// Зміна стану кнопки. // Після logout переключити в login (авторизація). mFacebook.authorize (this, PERMISSIONS, new LoginDialogListener ()); } Break; // Повідомлення на стіні. case R.id.wallpost: // Wall Post mFacebook.dialog (SampleApp.this, "stream.publish", new WallPostDialogListener ()); break; // Отримати список друзів. case R.id.getfriends: // Wall Post // Отримати список друзів аутентифицированного користувача. mSpinner.show (); mAsyncRunner.request ( "me / friends", new FriendsRequestListener ()); break; default: return false; } Return true; }
Для обробки стану кожного асинхронного виклику в додатку використовується кілька функцій зворотного виклику (callback). У SampleApp визначені функції зворотного виклику для обробки успішних чи невдалих запитів на вхід в систему, для діалогів виходу з системи, для діалогів відправки повідомлення на стіну, для запитів про друзів. Ви можете додати свої власні дії, слідуючи тому ж шаблону додавання меню і відповідних викликів Facebook з відповідними функціями зворотного виклику для отримання повідомлень про стан.
Обидва елементи меню, login і post to wall, активізують діалоги Facebook, які за замовчуванням використовують WebView-діалоги SDK, якщо не вибрана опція єдиного входу; це питання розглядається в наступному розділі.
Функція зворотного виклику FriendsRequestListener описується в розділі Виконання запитів Facebook API . Остання функція зворотного виклику MyDialogListener реалізує Facebook SDK for Android DialogListener для запитів Facebook, які використовують WebView-діалоги SDK, як описано в наступному розділі. Конструктор DialogListener повинен реалізовувати відповідну логіку завершення, наприклад, під час запитів login і wall post.
Відображення діалогів Facebook
Facebook SDK for Android заснований на Facebook-діалогах Web / сервер, що забезпечують різні взаємодії з користувачами, такі як авторизація, установка дозволів і публікація повідомлень. Базовий клас SDK Facebook.java визначає метод dialog () при генеруванні діалогу призначеного для користувача інтерфейсу для запитуваної дії (див. лістинг 9 ).
Лістинг 9. Метод Facebook Dialog
/ ** * Генерація UI-діалогу для запитуваної дії в конкретному * Android-контексті з використанням наданих параметрів. * / Public void dialog (Context context, String action, Bundle parameters, final DialogListener listener) {:}
Цей асинхронний метод приймає в якості вхідних даних контекст додатки, яке виконує дію (наприклад, login, publish_stream, read_stream, offline_access), необхідні для конкретного запиту або дії параметри і метод listener, що викликається при завершенні виконання асинхронних методів. Метод створює відповідний WebView-діалог. Наприклад, для публікації повідомлення про стан виконується виклик методу dialog () базового класу Facebook, в який передається дія stream.publish (див. лістинг 10 ).
Лістинг 10. Виклик методу dialog () і обробка функції зворотного виклику
package com.myapp.facebook.android; : Import com.facebook.android. *; : MFacebook = new Facebook (); // Facebook core: // Створити Facebook-діалог (використовуючи виклик асинхронного API). mFacebook.dialog (this, "stream.publish", new MyDialogListener ()); :: // // Асинхронний прослуховувач діалогу. // public class MyDialogListener extends com.facebook.android.Facebook.DialogListener {public void onComplete (Bundle values) {final String postId = values.getString ( "post_id"); if (postId! = null) {// "Wall post made ..."} else {// "No wall post made ..."}} public void onFacebookError (FacebookError e) {...} public void onError ( DialogError e) {...} public void onCancel () {...}}
Результатом цього виклику є Web-діалог publish to wall, показаний на малюнку 2 .
Малюнок 2. Розміщення повідомлення на стіні

Це знайома Web-сторінка Facebook для розміщення повідомлення на стіні користувача. Користувач може пропустити це вікно або продовжити дію і опублікувати повідомлення. Таке спільне використання вбудованого і Web-вмісту в одному мобільному додатку є відмінним прикладом можливостей гібридних додатків.
авторизація користувачів
Платформа Facebook Platform надає підтримку аутентифікації OAuth 2.0, а також більш старої сигнатурної схеми авторизації. При написанні нових додатків слід уникати застосування старої схеми аутентифікації, оскільки в найближчому майбутньому підтримка цієї схеми припиниться. В розділі ресурси наведено посилання на специфікацію OAuth 2.0 Protocol.
Facebook SDK for Android разом з Facebook Platform приховують складність OAuth-аутентифікації (див. малюнок 3 ).
Малюнок 3. Протокол OAuth 2.0 (IETF)

Facebook SDK for Android використовує для аутентифікації мобільний Web-метод, а не вбудований. Відзначимо, що майбутні версії SDK, можливо, будуть мати вбудовану підтримку OAuth. При такому підході SDK використовує для аутентифікації Web-діалог Facebook всередині WebView. Такий підхід цікавий з кількох причин:
- Зменшується складність реализации OAuth, вбудованої в додаток.
- Можливо, Користувачі более довіряють Стандартним и знайомиться діалогам входу и запиту дозволено, что Відображається в звичайний браузерах при вікорістанні Facebook.
Недоліком цього підходу є ті, что іноді ВІН может віявітіся більш повільнім, чем вбудована реалізація. У зв'язку з ЦІМ в SDK такоже Пропонується альтернативний підхід до аутентіфікації / входу, Який вікорістовує Вбудовані в Facebook кошти єдиного входу. Если на пристрої встановлен офіційне Facebook-додаток, Facebook SDK for Android может використовуват его алгоритм авторізації / входу. Але для цього необхідно спочатку підписати ваше додаток (див. Статтю Френка Ейблсона "Введення в систему захисту Android", посилання на яку наведено в розділі ресурси ), А потім згенерувати підпис або хеш-ключ (див. лістинг 11 ).
Лістинг 11. Генерування хеш-ключа додатки
keytool -exportcert -alias [alias] -keystore [keystore] | openssl sha1 -binary | openssl base64
Відзначимо, що код з лістингу 11 зазвичай розташовується в одному рядку. Тут він розділений на кілька рядків з метою форматування.
Потім потрібно зареєструвати згенерований хеш-ключ для вашого конкретного додатка на Facebook в розділі Mobile and devices, як показано на малюнку 4 . ( збільшена версія малюнка 4.)
Малюнок 4. Введення хеш-ключа додатки

Після реєстрації необхідно визначити обробник результату дії для додатка - реалізувати onActivityResult (...), в якому активізувати метод facebook.authorizeCallback (...), як показано в лістингу 12 .
Лістинг 12. Визначення обробника результату дії
@Override public void onActivityResult (int requestCode, int resultCode, Intent data) {super.onActivityResult (requestCode, resultCode, data); facebook.authorizeCallback (requestCode, resultCode, data); :: // ... Інші дії onActivityResult в додатку ...}
Відзначимо, що якщо метод єдиного входу не визначений або відсутній вбудоване Facebook-додаток, SDK за замовчуванням буде вибирати WebView-підхід для аутентифікації / входу. У решти статті застосовується підхід за замовчуванням.
Як вже говорилося, за замовчуванням програма має доступ до відкритих даних в профілі користувача. Для доступу до закритих даних додаток має запросити дозволу, а користувач - надати їх. Дозволи на отримання доступу до закритих даних називаються Extended Permissions.
Метод authorize () платформи Facebook SDK for Android реалізує алгоритм OAuth 2.0 User-Agent для вилучення маркера доступу, що використовується в повторних запитів API. Метод запускає яку дію (Activity) (вбудоване Facebook-додаток, якщо воно присутнє і налаштоване), або WebView-діалог, запитувач у користувача його повноваження (аутентифікація) та дозволу (авторизація) (див. лістинг 13 ).
Лістинг 13. Метод authorize
/ ** * Метод authorize, що надає призначені для користувача дозволу. * / Public void authorize (Activity activity, String [] permissions, final DialogListener listener) {:}
Відзначимо, що для коректної роботи аутентифікації за допомогою єдиного входу необхідно в функцію onActivityResult () включити виклик методу authorizeCallback ().
Згадайте, як елемент меню login в лістингу 8 активував метод authorize () з дозволами.
лістинг 14 демонструє, як активізувати метод authorize () з дозволами на запис вмісту. Він також має дозвіл на запис коментарів і переваг (publish_stream), читання для користувача фідів (feed), виконання пошуку (read_stream) і продовження повноважень доступу (offline_access). Не забудьте встановити свій APP_ID.
Лістинг 14. Виклик методу authorize () з дозволами
package com.myapp.facebook.android; : Import com.facebook.android. *; : Public static final String APP_ID = "13234 ..."; private static final String [] PERMISSIONS = new String [] { "publish_stream", "read_stream", "offline_access"}; :: // Виклик методу авторизації. mFacebook.authorize (getContext (), APP_ID, mPermissions, new MyLoginDialogListener ()); :: // Асинхронний зворотний виклик після завершення авторизації. private final class MyLoginDialogListener implements com.facebook.android .Facebook.DialogListener {public void onComplete (Bundle values) {...} // дозволити logout public void onFacebookError (FacebookError error) {...} public void onError (DialogError error) {...} public void onCancel () {...}}
Метод authorize () активізує розглянутий раніше метод dialog (), але на цей раз в якості дії передається запит Login. За допомогою Facebook Platform і її реалізації специфікації OAuth метод authorize () забезпечує запит аутентифікації в Facebook і повернення маркера access_token, що використовується в сеансі Facebook і при зверненні до API: https: //graph.facebook.com/ID? Access_token = ... .
Детальна інформація про те, як працює аутентифікація, розміщена на сторінці Facebook Authentication, посилання на яку наведено в розділі ресурси .
Виклик методу authorize () призводить до відображення WebView-діалогів, показаних на малюнку 5 .
Малюнок 5. Екрани авторизації і дозволів (WebView)

Після входу користувача в систему додаток запитує дозволу на доступ до певних даних (інформація про адресу електронної пошти або телефоні і пароль). Користувач може дозволити або заборонити додатком доступ до своєї Facebook-сторінці, а також доступ до базової інформації, можливість публікації на стіні користувача, доступ до повідомлень у новинних фідах, доступ до даних про користувача.
Виконання запитів Facebook API
Базовий клас Facebook реалізує кілька методів request () для викликів Old REST і Graph API. Крім того, SDK надає допоміжні класи для виконання асинхронних викликів API.
Як приклад виклику API ми виконаємо запит вилучення списку друзів аутентифицированного користувача. Згадайте структуру Graph API:
https://graph.facebook.com/ID/CONNECTION_TYPE
Знову зверніть увагу на спеціальний ідентифікатор me, який використовується для ідентифікації аутентифицированного користувача; користувач увійшов в https://graph.facebook.com/me/friends.
В лістингу 15 наведено фрагмент коду з лістингу 8 , В якому показаний виклик методу request (). У цьому прикладі використовується метод AsyncFacebookRunner.request (...), який є допоміжною оболонкою, що дозволяє викликати використовуваний метод асинхронно шляхом виконання його в своєму власному потоці. Ця дія виконується, щоб уникнути блокування головного потоку призначеного для користувача інтерфейсу.
Лістинг 15. Асинхронна диспетчеризація методу
// Отримати список друзів case R.id.getfriends: // Wall Post // Отримати список друзів аутентифицированного користувача mSpinner.show (); mAsyncRunner.request ( "me / friends", new FriendsRequestListener ()); break;
Функція зворотного виклику FriendsRequestListener onComplete (...) активізується, коли завершується виконання запиту на отримання списку друзів. Цей метод аналізує повертається JSON зі списком друзів. Відзначімо, что в лістингу 16 не показані всі реалізовані методи.
Лістинг 16. Обробка запиту на отримання списку друзів
/ ** * FriendsRequestListener реалізує Прослуховувач запиту / функцію зворотного * виклику для запитів get friends. * / Public class FriendsRequestListener implements com.facebook.android.AsyncFacebookRunner.RequestListener {/ ** * Викликається після завершення запиту на отримання списку друзів. * Витяг, аналіз і відображення потоку JSON. * / Public void onComplete (final String response) {mSpinner.dismiss (); try {// обробка відповіді: виконується в фоновому потоці Log.d ( "Facebook-Example-Friends Request", "response.length ():" + response.length ()); Log.d ( "Facebook-Example-Friends Request", "Response:" + response); final JSONObject json = new JSONObject (response); JSONArray d = json.getJSONArray ( "data"); int l = (d! = null? d.length (): 0); Log.d ( "Facebook-Example-Friends Request", "d.length ():" + l); for (int i = 0; i <l; i ++) {JSONObject o = d.getJSONObject (i); String n = o.getString ( "name"); String id = o.getString ( "id"); Friend f = new Friend (); f.id = id; f.name = n; friends.add (f); } // Тільки власник потоку може звернутися до своїх уявлень. SampleApp.this.runOnUiThread (new Runnable () {public void run () {friendsArrayAdapter = new FriendsArrayAdapter (SampleApp.this, R.layout.rowlayout, friends); listView.setAdapter (friendsArrayAdapter); friendsArrayAdapter.notifyDataSetChanged ();}} ); } Catch (JSONException e) {Log.w ( "Facebook-Example", "JSON Error in response"); }}:}
Виходячи з вимог до певної програми відповідь сервера Facebook, представлений в форматі JSON, необхідно проаналізувати і обробити відповідним чином. Ви також можете відобразити цю інформацію, використовуючи WebView або ListView, як в нашому прикладі SampleApp (див. рисунок 6 ).
Малюнок 6. Відображення результатів

Висновок
У даній статті були розглянуті інтерфейси Facebook API. Було дано загальний огляд платформи Facebook Platform і її API, а потім були розглянуті Facebook SDK for Android і приклад програми. Ця інформація допоможе краще зрозуміти різні інтерфейси Facebook API і приступити до створення Facebook-додатків для платформи Android.
Ресурси для скачування
Схожі тими
- Оригінал статті: Introduction to Facebook APIs (EN).
- Web-сторінка мобільних додатків Facebook : Інформація про включення Facebook в свій мобільний додаток за допомогою тих же API, які використовуються усіма Web-сайтами, адаптованих для мобільного телефону.
- Створення програми - розробники Facebook : Реєстрація Facebook-додатки.
- Розширені дозволу - розробники Facebook : Запит розширених дозволів при необхідності отримати доступ до закритих частин профілю користувача або опублікувати вміст на Facebook від імені користувача.
- Офіційна документація для розробників Facebook-додатків : Інформація про можливості API, що дозволяє створювати функції для роботи в соціальних мережах для підвищення привабливості та функціональності ваших Web-сайтів.
- Аутентифікація в Facebook : Інформація про аутентифікації і авторизації при використанні платформи Facebook для розробки додатків.
- План дій розробника Facebook-додатків : Інформація для планування змін, які можуть зажадати модифікації вихідного коду.
- Введення в розробку Android-додатків (Френк Ейблсон (Frank Ableson), developerWorks, травень 2009 року): введення в платформу Android і приклад простого Android-додатки (EN).
- Мережеві можливості Android (Френк Ейблсон (Frank Ableson), developerWorks, червень 2009 року): інформація про мережеві можливості платформи Android (EN).
- Робота з XML на платформі Android (Майкл Галпін (Michael Galpin), developerWorks, червень 2009 року): інформація про різні варіанти роботи з XML на Android і їх використанні для створення своїх власних Android-додатків (EN).
- Під капотом вбудованих Web-додатків для платформи Android : Інформація про гібридних додатках в Android.
- Детально про платформу Android (Френк Ейблсон (Frank Ableson), Manning Publications, 2010 рік): всі аспекти розробки Android-додатків (EN).
- Дизайн і розробка мобільних додатків (Брайан Флінг (Brian Fling), O'Reilly Media, 2009 рік): практичні рекомендації, стандарти, методики та передовий досвід створення мобільних додатків (EN).
- Документація по Android SDK : Найсвіжіша інформація в довіднику по Android API.
- Інтерактивна документація про пакет android.webkit : Додаткова інформація з налаштування елемента управління WebView.
- The Open Handset Alliance : Спонсор Android.
- Інші статті автора (Енріке Ортіс (C. Enrique Ortiz), developerWorks, з липня 2004 року по теперішній час): статті про Android, мобільних додатках, Web-сервісах і інших технологіях (EN).
- Facebook SDK for Android (В даний час альфа-версія): попрацюйте з цією бібліотекою і інтегруйте Facebook в свої мобільні Android-додатки.
- Платформа Facebook Platform : Розширте свої можливості по створенню соціальних програм на Facebook і в Web.
- Facebook Old REST API (Попередня версія Graph API): програмне взаємодія з Web-сайтом Facebook за допомогою простих HTTP-запитів.
- Facebook Graph API (Поточна версія): детальна інформація про базову інтерфейсі Facebook Platform API.
- Специфікація OAuth 2.0 Protocol (Липень 2010 року): інформація про OAuth-аутентифікації, підтримуваної платформою Facebook Platform.
- Android SDK : Файли для завантаження SDK, довідкова інформація по API, останні новини по платформі Android на офіційному сайті для розробників Android-додатків. Для прикладів статті підійде версія 1.5 або вище.
- Проект Android Open Source Project : Інформація і відкритий вихідний код для проектування сумісних з Android пристроїв.
- JDK 6 Update 21 : Платформа Java Platform, Standard Edition.
- Eclipse : Остання версія Eclipse IDE.
- Facebook SDK for Android : Посилання на поточну версію (на момент публікації - альфа-версію) Facebook SDK for Android.
- Сертифікація IBM XML : Інформація про отримання сертифіката IBM-Certified Developer по XML і суміжних технологій.
Підпішіть мене на ПОВІДОМЛЕННЯ до коментарів
Encoding = "utf-8"?Encoding = "utf-8"?
Com/apk/res/android" android: layout_width = "fill_parent" android: layout_height = "?
Com/ID?
Null?