Главная » Разработка для Android » ДОБАВЛЕНИЕ СОЦИАЛЬНЫХ ВОЗМОЖНОСТЕЙ

0

Вопросы, рассматриваемые в этом часе:

•             улучшение приложений путем добавления социальных возможностей;

•             добавление поддержки функции приглашения друзей;

•             отображение очков, набранных друзьями;

•             интеграция приложения со сторонними социальными сетевыми сервисами.

В этом часе вы улучшите приложение «Been There, Done That!», добавив в него некоторую интеграцию с социальными сервисами. В частности, вы измените приложение таким образом, чтобы пользователь мог отслеживать результаты других игроков. Вы также познакомитесь с различными приемами использования возможностей социальных сервисов и сторонних сайтов социальных сетевых сервисов в Android-приложениях, чтобы повысить привлекательность игры для пользователей.

УЛУЧШЕНИЕ ВАШЕГО ПРИЛОЖЕНИЯ ПРИ ПОМОЩИ ВОЗМОЖНОСТЕЙ

СОЦИАЛЬНЫХ СЕРВИСОВ

За последние несколько часов приложение «Been There, Done That!» приобрело вполне завершенный вид. Тем не менее постоянно играть в одиночку довольно скучно. В идеальном случае пользователи хотят делиться своими результатами и впечатлениями от игры с другими людьми. Приложения, предоставляющие определенные возможности для взаимодействия между пользователями, с большей долей вероятности приобретут популярность и будут очень быстро распространяться, тем самым гарантируя успех их создателям.

Приложения с поддержкой социальных сервисов можно примерно разделить на две категории: те, которые предоставляют непосредственный доступ к социальным сетям, например MySpace или Facebook, и те, которые используют социальную информацию для улучшения восприятия игры пользователем. Программу «Been There, Done That!» можно с уверенностью отнести ко второй категории.

Добавление социальных возможностей в ваше приложение

Придумать, какие именно социальные и интерактивные возможности будут добавлены в ваше приложение, непросто. Вы, как разработчик приложения, можете задать себе следующие вопросы:

•             Какие социальные возможности (если они есть) будут уместны в данном случае? Будут ли эти возможности использоваться для поддержания духа соперничества (сравнение лучших результатов игры, отправка уведомлении, когда один из друзей превзошел результат самого пользователя, и т. д.)? Будет ли приложение использовать возможности социальных сетей для информирования пользователей о последних из­менениях в игре (публиковать имена рекордсменов игры в ленте Facebook или Twitter), тем самым обеспечивая бесплатную рекламу приложению?

•             Каким образом конечный пользователь сможет пригласить в мое приложение других людей? Потребуется ли вводить адреса электронной почты, телефонные номера или имена друзей для связи с ними? Будут ли приглашения отправляться по электронной почте? Через SMS- сообщения? Должны ли оба игрока подтвердить, что они знают друг друга?

•             Какие социальные сети (например, Facebook, Twitter и т. д.) посещают целевые пользователи моего приложения, и имеет ли смысл интегрировать в приложение какие-либо из возможностей этих сайтов?

•             Как мое приложение будет защищать конфиденциальные данные пользователей (и их друзей)? Каких рекомендаций я буду придерживаться для определения того, что может и чего не может делать приложение (и моя компания) с конфиденциальными данными пользователей?

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

Приложения, поддерживающие социальные возможности, основаны на определенных отношениях между пользователями. В разных приложениях для описания этих отношений используется различная терминология. Чаще всего для описания отношений между пользователями используются термины «контакт» и «друг» («френд»), однако на некоторых сайтах используется иная терминология, например «круг доверия» и «читатели». В хорошо продуманных приложениях для приглашения «друзей» и «контактов» может учитываться контекст игры. Например, в игре на военную тематику можно было бы использовать фразу «Призовите бывалых солдат для выполнения миссии» вместо типичной «Пригласите ваших друзей поиграть в эту игру» указав их адреса электронной почты».

ДОБАВЛЕНИЕ ПОДДЕРЖКИ КРУГА ДРУЗЕЙ В ВАШЕ ПРИЛОЖЕНИЕ

Вы добавите простую социальную возможность в приложение There Pone That!», которая позволит игрокам видеть количество очков, набранных другими игроками. Это достаточно простой способ заинтересован игроков распространение только «открытой» информации о набранных очках позволит вам избежать необходимости реализации функциональности, осуществляющей проверку и подтверждение отношений между пользователями.

Простая социальная возможность, которая будет добавлена в этом часе, работает следующим образом:

1.                                 Игрок указывает адрес электронной почты своего друга, чтобы добавить этого человека в свой круг друзей.

2.                                 Если указанный адрес электронной почты принадлежит другому игроку, зарегистрированному на сервере приложения, создается дружественная связь.

3.                Каждый из игроков теперь может видеть очки, набранные другим игроком,

на вкладке Scores of Friends (Результаты друзей) экрана с результатами игры.

КСТАТИ ________________________________________________________________

Полная версия кода, рассматриваемого в этом часе, доступна на диске, прилагаемом к данной книге.

Добавление возможности приглашения друзей на экран с настройками

Чтобы добавить поддержку круга друзей в приложение «Been There, Done That!», вам потребуется изменить класс QuizSettingsActivity, чтобы позволить пользователю вводить адреса электронной почты своих друзей. В частности, вам нужно сделать следующее:

•             Добавить кнопку на экран с настройками, при нажатии на которую будет открываться новое диалоговое окно.

•             Добавить в класс QuizSettingsActivity реализацию нового диалогового окна, позволяющего пользователю вводить адрес электронной почты своего друга.

•             Добавить реализацию некоторых сетевых операций, связанных с передачей на сервер приложения запроса на добавление пользователя в круг друзей.

ОБНОВЛЕНИЕ МАКЕТА ЭКРАНА С НАСТРОЙКАМИ

Вам потребуется обновить пользовательский интерфейс приложения «Been There, Done That!», чтобы игрок мог ввести адреса электронной почты своих Друзей. Безусловно, сделать это можно несколькими различными способами. Можно добавить новую деятельность и обновить экран с основным меню, создав тем самым новый экран в приложении, или можно просто обновить экран с настройками, добавив новую область.

 

Рис. 17.2. Предварительный просмотр макета диалогового окна, предназначенного для формирования запроса на добавление пользователя в круг друзей

Содержимое пакета довольно простое. Макет представляет собой элемент- контейнер LinearLayout с двумя элементами: элементом TextView, который содержит текст, предлагающий пользователю ввести адрес электронной почты, и элемент EditText, позволяющий пользователю указать адрес электронной почты.

ОТКРЫТИЕ ДИАЛОГОВОГО ОКНА, ПРЕДНАЗНАЧЕННОГО ДЛЯ ДОБАВЛЕНИЯ ПОЛЬЗОВАТЕЛЯ В КРУГ ДРУЗЕЙ

Нажатие на элемент Button с именем Button_Friend_Email приводит к открытию диалогового окна, позволяющего пользователю ввести адрес электронной почты своего друга. Открытие этого диалогового окна во многом похоже на открытие других диалоговых окон, доступных на экране с настройками:

Button addFriend = (Button) findViewById(R.id.Button Friend Email); addFriend.setOnClickListener(new View.OnClickListener() { public void onClick(View v) {

showDialog(FRIEND_EMAIL_DIALOG_ID);

}

});

Вам       нужно            обновить            метод     o n C r e a t e D i a l o g ( )     класса

QuizSettingsActivity, чтобы добавить инструкцию case для этого нового диалогового окна:

case FRIEND_EMAIL_DIALOG_ID:

final View friendDialogLayout = layoutInflater.inflate( R.layout.friend_entry, (ViewGroup) findViewById(R.id.root));

AlertDialog.Builder friendDialogBuilder =

new AlertDialog.Builder(this); friendDialogBuilder.setView(friendDialogLayout); final TextView emailText = (TextView)

friendDialogLayout.findViewById(R.id.EditText_Friend_Email

friendDialogBuilder.setPositiveButton(

android.R.string.ok, new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

String friendEmail = emailText.getText().toString(); if (friendEmail != null && friendEmail.length() > 0) { doFriendRequest(friendEmail);

}

}

});

return friendDialogBuilder.create();

Данная реализация диалогового окна должна быть вам уже достаточно знакома. Как и раньше, вы создаете диалоговое окно AlertDialog, применяя к нему ресурс макета. Когда пользователь щелкает по кнопке 0К в этом диалоговом окне (рис. 17.3), указанный адрес электронной почты передается на сервер приложения в асинхронном режиме при помощи класса FriendRequestTask. (Мы поговорим об этом классе в следующем разделе.) Сервер приложения отвечает за создание дружественного отношения, если указанный пользователем адрес электронной почты друга присутствует в базе данных.

Рис. 17.3. Диалоговое окно, предназначенное для добавления пользователя в круг друзей

СОЗДАНИЕ КЛАССА ASYNCTASK, ПРЕДНАЗНАЧЕННОГО

ДЛЯ ОТПРАВКИ ЗАПРОСОВ НА ДОБАВЛЕНИЕ ПОЛЬЗОВАТЕЛЕЙ В КРУГ

ДРУЗЕЙ

Для отправки на сервер приложения запросов на добавление пользователей вкруг друзей вам потребуется добавить еще один класс FriendRequestTask, производный от класса AsyncTask, в класс QuizSettingsActivity. Класс FriendRequestTask может выполняться в результате вызова метода execute () каждый раз, когда игрок вводит адрес электронной почты своего друга в соответствующем диалоговом окне и нажимает на кнопку ОК.

Реализация производного класса FriendRequestTask во многом похожа на другие производные классы, унаследованные от класса AsyncTask, над которыми вы работали на протяжении последних нескольких часов. (В следующем примере для простоты понимания и краткости был удален код. обрабатывающий исключения.) Единственный действительно интересный момент в этой новой задаче — код метода doInBackground () , формирующий запрос на добавление пользователя в круг друзей:

@Override

protected Boolean doInBackground(String… params) { Boolean succeeded = false; String friendEmail = params[0]; SharedPreferences prefs =

getSharedPreferences(GAME_PREFERENCES, Context. MODE_PRIVATE); Integer playerId = prefs.getInt(GAME_PREFERENCES_PLAYER_ID, -1);

Vector<NameValuePair> vars = new Vector<NameValuePair>();

vars.add(new BasicNameValuePair(“command”, “add”));

vars.add(new BasicNameValuePair(“playerId”, playerId.toString())); vars.add(new BasicNameValuePair(“friend”, friendEmail)); HttpClient client = new DefaultHttpClient();

HttpPost request = new HttpPost(TRIVIA_SERVER_FRIEND_EDIT); request.setEntity(new UrlEncodedFormEntity(vars)); ResponseHandler<String> responseHandler = new BasicResponseHandler();

String responseBody = client.execute(request, responseHandler); if (responseBody != null) { succeeded = true;

}

return succeeded;

}

В этом примере для передачи POST-запроса протокола HTTP, содержащего переменные формы, на сервер приложении вы используете объект типа HttpClient. Вы можете сформировать объект запроса типа HttpPost путем объединения соответствующего адреса URL сервера приложения с переменными запрос;», закодированными с использованием удобного класса UrlEncodedFormEntity, установив экземпляр этою класса в качестве содержимого POST-запроса. Когда запрос будет полностью сформирован, вы можете отправить его на сервер при помощи метода execute() класса HttpClient, как вы делали это в предыдущих примерах. После этого вы просто проверяете ответ, полученный от сервера, чтобы определить успешность выполнения запроса на добавление пользователя в круг друзей, путем анализа результирующего объекта типа ResponseHandler.

Отображение результатов игры друзей

Теперь, когда игроки могут формировать круг своих друзей, вам нужно обновить класс QuizScoresActivity для заполнения вкладки Scores of Friends (Результаты друзей) оперативными данными, получаемыми с сервера приложения. К счастью, в реализации этой функциональности нет ничего сложного, поскольку поддержку связей между друзьями в основном осуществляет сервер приложения. Для получения результатов игры друзей требуется просто немного измененный запрос к базе данных сервера приложения

Отображение результатов игры друзей на экране с результатами точно так же, как отображение лучших результатов игры, за одним исключением— адрес URL сервера приложения для запроса данных содержит идентификатор игрока. В этом случае сервер приложения знает, что вы хотите получить результаты только тех игроков, которые имеют отношение к данному игроку.

С точки зрения реализации, вы можете просто создать еще один экземпляр класса ScoreDownloaderTask для получения этих результатов и их отображения на вкладке Scores of Friends (Результаты друзей) (рис. 17.4). Когда экран с результатами игры будет использовать оперативные данные, получаемые с сервера приложения, вы можете удалить из проекта тестовые XML-файлы ресурсов и весь связанный с ними код.

Рис.17.4. Вкладка Scores of Friends

(Результаты друзей)

Расширение отношений между игроками

Возможность установления дружественных отношений может существенно повысить интерес пользователей к вашей игре помимо того функционала, который был реализован вами до сих пор. Добавление поддержки круга друзей может показаться очень примитивной социальной возможностью, но вы только представьте, как можно развить социальные функции вашего приложения на базе этой простой отправной точки. Отношения между игроками оставляют разработчикам широкое поле для развития приложений в разнообразных направлениях, включая следующие:

•             Сервер приложения мог бы отправлять приглашение по электронной почте любому другу, который пока отсутствует в базе данных.

•             Игроки не обязательно должны быть привязаны к платформе Android. Можно легко добавить другие платформы (веб-сайт, iPhone, BlackBertv и т. д.). Это значит, что друзья могли бы взаимодействовать с одним и тем же сервером приложения и играть друг с другом на различных платформах.

•             Дружественные отношения можно было бы сделать как односторонними, так и двухсторонними (это значит, что результаты мот отображаться в списке у одного игрока или у каждого из двух игроков соответственно). Можно было бы устанавливать различные доверительные отношения, позволяя игрокам получать доступ к разнообразной информации о других игроках, включая ответы друзей на вопросы и их избранные места в мире.

•             После установления дружественных отношений могут быть активизированы дополнительные функции приложения, включая поединки, обмен сообщениями, уведомления… возможностям нет предела. Используйте ваше воображение.

Полнофункциональная реализация возможности создания круга друзей, описанная в данном часе, может показаться вам незавершенной и это действительно так! Любое приложение, предоставляющее похожие функции по созданию круга друзей, по крайней мере, должно позволять игроку управлять (например, просматривать, удалять) его существующими дружественными отношениями. Тем не менее реализация этих улучшений предоставляется читателю в качестве упражнения.

ИНТЕГРАЦИЯ С СОЦИАЛЬНЫМИ СЕТЯМИ

В последние несколько лет социальные сети обрели неимоверную популярность, позволяя людям находить друг друга, поддерживать связь и делиться информацией (в радости и в горе) о своей жизни. Многие сайты социальных сетей предоставляют сторонним разработчикам интерфейсы API, многие из которых представляют собой веб-сервисы, построенные на базе архитектуры REST (Representational State Transfer). Для социальных сетей, например, сети Facebook, появилось огромное количество приложений.

Android-приложения могут интегрироваться с сайтами социальных сетей в соответствии с планами развития этих сайтов и с использованием интерфейсов API, предоставляемых конкретными сайтами или сервисами. Уровень интеграции может быть как поверхностным, так и полным. Вот несколько примеров интеграции с социальными сетями, которые могут оказаться актуальными в Android-приложении:

•             предоставление пользователю возможности автоматически опубликовать твит на сайте Twitter, когда он победит в игре;

•             разработка приложения, которое позволит пользователю просматривать и обновлять свой персональный блог, ленту на сайте Twitter и статус на сайте Facebook;

•             разработка полнофункционального Twitter-клиента.

В каждом из перечисленных случаев интеграция возможностей сайта Twitter в Android- приложение осуществляется различными способами. Теперь давайте рассмотрим реализацию поддержки для некоторых социальных сетей, популярных в наши дни.

Добавление поддержки сети Facebook

Сеть Facebook — это популярный социальный веб-сервис, где люди могут находить друг друга, обмениваться изображениями и видеоклипами, и общаться. По адресу developers.facebook.com доступен портал для разработчиков, желающих интегрировать функциональность сети Facebook в сторонние приложения. Дополнительную информацию но платформе Facebook Platform for Mobile (Facebook Connect, Facebook SMS и т.д.) можно найти по адресу wiki.developers.facebook.com/index.php/Mobile.

Добавление поддержки сети Twitter

Сеть Twitter — это популярная социальная сеть, где люди обмениваются короткими текстовыми сообщениями, называемыми твитами. Каждый твит может содержать не более, чем 140 символов, что делает сеть Twitter идеальной платформой для мобильных устройств. Сеть Twitter имеет портал для разработчиков, доступный по адресу apiwiki.twitter.com, со справочной информацией по интерфейсу Twitter API.

Работа с платформой OpenSocial

Если вы хотите реализовать поддержку более чем одного сайта социальной сети или охва­тить максимально возможное число конечных пользователей, вам следует взглянуть на интерфейсы API платформы OpenSocial, дополнительная информация по которой доступна по адресу wiki.opensocial.org. В платформе OpenSocial используются об­щепринятые интерфейсы API (вместо интерфейсов API, разработанных для конкретных сайтов), которые позволяют интегрировать в приложения возможности многих популярных социальных приложений и сетей, включая следующие (перечисленные в алфавитном порядке):

•             friendster (по-прежнему популярный сервис в Юго-Восточной Азии);

•             hi5 (популярный сервис в Европе и Центральной и Южной Америке);

•            Hyves (популярный сервис в Нидерландах);

•            Linkedln (социальная сеть для поиска и установления деловых контактов);

•            Mail.ru (популярный сервис в России);

•             mixi (популярный сервис в Японии);

•            MySpace (популярный сервис в Соединенных Штатах и по всему миру);

•            NetLog (популярный сервис в Европе и на Ближнем Востоке);

•             orkut (популярный сервис в Южной Америке и Индии);

•            RenRen (прежнее название — Xiaonei, популярный сервис среди студентов Китая);

•             Yahoo! (популярный сервис в Соединенных Штатах и по всему миру);

•             XING (социальная сеть для поиска и установления деловых контактов, популярная в Европе и Китае).

Ежедневное и ежемесячное количество активных пользователей в каждой ш них социальных сетей исчисляется миллионами.

ИТОГИ

В этом часе вы у знати, как можно использовать социальные возможности для улучшения восприятия мобильного приложения пользователем. Вы рассмотрели небольшой пример, демонстрирующий добавление социальных возможностей в приложение «Been There, Done That!», которые позволяют пользователю указывать своих друзей (используя адреса электронной почты) и просматривать набранные ими очки. Наконец, вы узнали о многих социальных сетях, с которыми можно интегрировать ваше приложение.

ВОПРОСЫ И ОТВЕТЫ

Вопрос: Как выбрать наилучший уникальный идентификатор для проведения различий между пользователями?

Ответ: Несмотря на ряд предложений по реализации сервисов, поддерживающих технологию единого входа, до сих пор нет четкого ответа на данный вопрос. Некоторые из кандидатов на эту роль — уникальные пары «логин/ пароль», адреса электронной почты или номера телефонов. В примере, рассмотренном в этом часе, в качестве уникального идентификатора мы использовали адрес электронной почты игрока и позволяли пользователю указывать пароль. На многих сайтах социальных сетей применяется похо­жий механизм, однако этот подход не лишен недостатков — например, адреса электронной почты могут измениться, пользователи могут иметь более одной учетной записи, и они вынуждены запоминать еще одну комбинацию «логин/пароль». Когда вы интегрируете ваше приложение с вебсайтом одной из социальных сетей, вы должны использовать тот механизм аутентификации и те учетные данные, которые определены интерфейсом API данного сайта.

Вопрос: Какие моменты, связанные с конфиденциальными данными пользователей, я дол­жен учитывать при разработке социальных приложений?

Ответ: Когда дело касается социальных приложений, вы должны всегда предупреждать пользователя о том, как вы собираетесь использовать любую информацию, получаемую от пользователя. Чтобы максимально обезопасить себя, вы должны следовать следующим принципам: не получать, не использовать и не сохранять никакую информацию, которая не требуется вашему приложению, а также всегда предполагать, что любая информация, предоставляемая пользователем, конфиденциальна. Теперь, в соответствии с данными принципами, даже простейшая поддержка круга, которую вы добавили в приложение «Been There, Done That!», подразумевал передачу конфиденциальных данных: ника пользователя, его результаты игры и аватар. (Среди упражнений, представленных в конце этого часа, есть упражнение, предлагающее реализовать функционал для загрузки изображений аватар друзей с сервера.) С технической точки зрения, если вы публикуете данное приложение, вы должны ясно дать понять игроку, что эта информация будет выгружена на сервер приложения и станет доступна другим игрокам

Вопрос: Как определить, могу ли я интегрировать мое приложение с сервисом социальной сети, не описанной в этом часе?

Ответ: Если вы желаете интегрировать ваше приложение с сервисом какой- либо социальной сети или любым другим веб-сервисом (например, с сервисами сайтов Google, Amazon, eBay), простейший способ выяснить, имеет ли сервис интерфейс API для интеграции, — посетить веб-сайт компании. Зачастую на сайте рядом с информацией о поддержке пользователей, контактной информацией и информацией о компании или в разделе часто задаваемых вопросов, связанных с поддержкой пользователей, присутствует ссылка для разработчиков. Большинство компаний требуют, чтобы разработчики приняли условия использования их сервисов, а некоторые компании требуют зарегистрироваться на сайте, чтобы получить специальный API-ключ для использования сервисов.

ПРАКТИКУМ Контрольные вопросы

1.                     Верно ли это? Все Android-приложения могут и должны быть улучшены с использованием социальных возможностей.

2.                     Каким образом приложение «Been There, Done That!» создает друже­ственные отношения?

A.                    Предоставляя игроку возможность поиска друзей в списке на сервере приложения.

B.                    Предоставляя игроку возможность вводить адрес электронной почты своего друга.

C.                    Запуская приложение для работы с контактами и позволяя игроку выбрать желаемый контакт.

D.                    Предоставляя игроку возможность ввести номер телефона своего друга.

3.                     Верно ли это? Инструментарий Android SDK имеет встроенную поддержку сервисов таких социальных сетей, как Facebook, Twitter и MySpace.

Ответы

1.                     Неверно. Добавление социальных возможностей и приложение позволяет улучшить восприятие этого приложения пользователями, однако данное архитектурное решение требует взвешивания и планирования. Некоторые типы приложения получают очевидную пользу от реализации этих возможностей, при этом для других типов приложений подобные возможности могут не иметь смысла. Добавляйте социальные возможности в приложение только тогда, когда в результате их внедрения очевидные преимущества получат как пользователи, так и разработчик.

2.                     B. В приложении «Been There, Done That!» игроки могут добавлять друзей путем указания их адресов электронной почты.

3.                     Неверно. Вы можете использовать сетевые возможности, предоставляемые инструментарием Android SDK, для доступа к интерфейсам API, нредостааняемым сайгами таких социальных сетей, как Facebook, Twitter и MySpace.

 

Литература: Дэрси JI., Android за 24 часа. Программирование приложений под операционную систему Google/ ДэрсиЛ., КондерШ. — М.: Рид Групп, 2011. — 464 с. — (Профессиональные компьютерные книги). ISBN 978-5-4252-0318-2

По теме:

  • Комментарии