Урок 14. Регистрация Twitter приложения, добавление авторизации, используя twitter-библиотеку
Регистрация Twitter приложения
Для того, чтобы использовать twitter api необходимо зарегистрировать приложение. Для этого надо перейти по ссылке, войти в аккаунт (создать, если нет) и нажать кнопку Create New App. Далее необходимо заполнить поля нашего приложения.
Поля name, description придумаем сами, они нигде не будут видны, кроме как в вашей учётной записи в твиттере.
В качестве Website можем указать любой несуществующий, но, если у вас есть сайт, то можете указать ваш.
Параметр Callback URL нужен для веб-приложений, поэтому вместо него можем также ввести любой сайт.
После этого ставим галочку, что согласны с условиями пользования и нажимаем кнопку Create your Twitter application. Видим информацию о нашем приложении. Если понадобится, то можно изменить поля в любое время.
Далее нажимаем на вкладку Keys and Access Tokens. Увидим следующую форму:
Чёрным прямоугольником закрашена информация о нашем аккаунте в целях безопасности. Также надо было поступить и с полями Consumer Key (API Key) и Consumer Secret (API Secret), но мы их просто сгенерируем заново, чтобы использовать эти данные в уроке. Не показывайте никому эти поля, это небезопасно.
Скопирум поля Consumer Key (API Key) и Consumer Secret (API Secret). Они однозначно идентифицируют наше приложение и будут учитываться при его авторизации.
Поле Access Level должно иметь значение Read and write. Это говорит о том, что мы сможем как считывать информацию о пользователе, так и добавлять новую.
Добавление twitter-kit библиотеки в наше приложение
Для начала добавим twitter-kit библиотеку в наш проект. Конечно, можно полностью обойтись без неё, но процесс авторизации – довольно сложная и неинтересная задача, которую создатели библиотеки значительно нам упростили. Поэтому мы подключаем эту библиотеку только для авторизации.
Нам надо добавить следующую строку в наш файл build.gradle(Module:app).
Давайте сразу же добавим два новых ресурса в наш файл strings.xml. Это и будут те значения Consumer Key (API Key) и Consumer Secret (API Secret), которые мы получили, когда регестрировали приложение. Они должны выглядить следующим образом. strings.xml
1
2
3
4
5
<resources><!-- Остальные ресурсы не изменились --><stringname="com.twitter.sdk.android.CONSUMER_KEY">yHP7WOGyapkv7hlAsjO6zOURt</string><stringname="com.twitter.sdk.android.CONSUMER_SECRET">YZHL3AP029AO2ycdb0kTJ9Iz8Lb0v4cFsfKZRKdQaD2Cnckgtj</string></resources>
Вам вместо этих значений надо ввести те, которые вы получили при регистрации приложения. Библиотека twitter-kit автоматически получит эти значения, т.к. мы используем name ресурса, который указан в документации библиотеки.
Отлично, теперь мы подключили библиотеку. Для начала нам надо создать класс Application для того, чтобы могли проинициализировать библиотеку Twitter. Создадим файл TwitterApp в нашем главном пакете colibri.dev.com.colibritweet. Выглядит он следующим образом.
Всё, что нам надо сделать – проинициализировать библиотеку вызовом Twitter.initialize(this).
Также нам надо указать, что мы используем свой Application. Для этого надо в файле AndroidManifest добавить атрибут android:name=".TwitterApp" у блока application. Наш файл выглядит так после этого изменения:
Наш экран состоит из одной кнопки, которая будет выполнять всю логику авторизации. Изначально мы хотели сделать два EditText и Button, но Twitter не предоставляет логины и пароли пользователей сторонним сервисам. Они используют протокол OAuth для безопасной авторизации. Подробнее про протокол здесь.
Здесь мы просто добавили переменную типа TwitterLoginButton, которая будет выполнять за нас всю работу по авторизации приложения. Также мы добавили слушателя событий new Callback<TwitterSession>, у которого есть два метода:
success – вызывается при успешной авторизации пользователя
failure – вызывается при возникновении ошибки во время авторизации.
Также мы переопределили метод onActivityResult (если вам ещё не известно, для чего используется данный метод, то ознакомьтесь с данным уроком) и вызвали mTwitterLoginButton.onActivityResult. Это необходимо для того, чтобы результат авторизации передать из нашей Activity в объект mTwitterLoginButton.
Запустим приложение:
После того, как нажмём кнопку Log in with Twitter, мы переходим на страницу авторизации пользователя, которая можем выглядеть по-разному. Если у вас есть мобильное приложение Twitter, то откроется мобильное приложение. Если нет, то браузер. У нас выглядит так:
Отлично, мы закончили с логикой авторизации. Давайте только после успешной авторизации сделаем переход на экран UserInfoActivity. При этом будем передавать idпользователя. Это нам понадобится для запроса данных о пользователе в следующем уроке. Давайте вынесем эту логику в отдельный метод navigateToUserInfo. Также давайте создадим константу USER_ID, чтобы мы могли ссылаться на неё внутри UserInfoActivity при получении данных.
Давайте убедимся, что мы получили наши данные на экране UserInfoActivity.class. Для этого получим данные используя метод getIntent() и выведем id пользователя, используя (Toast).
Добавим код в метод onCreate в классе UserInfoActivity.
UserInfoActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
publicclassUserInfoActivityextends AppCompatActivity {
@Override
protectedvoidonCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);
setContentView(R.layout.user_info_layout);// остальной код выше не изменилсяlong userId = getIntent().getLongExtra(AuthActivity.USER_ID,-1);
Toast.makeText(this,"UserId = "+ userId, Toast.LENGTH_SHORT).show();}// остальной код не изменился}
Ещё один момент. Помните, как мы делали навигацию на экране SearchUsersActivity:
SearchUsersActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
publicclassSearchUsersActivityextends AppCompatActivity {// остальной код выше не изменилсяprivatevoidinitRecyclerView(){
UsersAdapter.OnUserClickListener onUserClickListener =new UsersAdapter.OnUserClickListener(){
@Override
publicvoidonUserClick(User user){
Intent intent =new Intent(SearchUsersActivity.this, UserInfoActivity.class);
intent.putExtra("userId", user.getId());
startActivity(intent);}};
usersAdapter =new UsersAdapter(onUserClickListener);
usersRecyclerView.setAdapter(usersAdapter);}}
Правилом большого пальца является использование констант вместо явного использования строки "userId". Давайте заменим использование на константу AuthActivity.USER_ID.
SearchUsersActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
publicclassSearchUsersActivityextends AppCompatActivity {// остальной код выше не изменилсяprivatevoidinitRecyclerView(){
UsersAdapter.OnUserClickListener onUserClickListener =new UsersAdapter.OnUserClickListener(){
@Override
publicvoidonUserClick(User user){
Intent intent =new Intent(SearchUsersActivity.this, UserInfoActivity.class);
intent.putExtra(AuthActivity.USER_ID, user.getId());
startActivity(intent);}};
usersAdapter =new UsersAdapter(onUserClickListener);
usersRecyclerView.setAdapter(usersAdapter);}}
Результат:
Всё, с логикой авторизации мы завершили работу. Поздравляю! Впереди осталось совсем немного. Перед завершением урока давайте удалим строку, где мы показываем Toast, чтобы это не мешало нам во время дальнейшей работы.
Подведём итоги:
Для создания приложения Twitter приложения нам в первую очередь необходимо зарегистрировать его на сайте.
Для работы с Twitter api необходимо пройти авторизацию. Для простоты можно использовать библиотеку twitter-kit
Сайт использует cookie-файлы для того, чтобы вам было удобнее им пользоваться. Для
продолжения работы с сайтом, вам необходимо принять использование cookie-файлов.
Регистрация Twitter приложения
Для того, чтобы использовать
twitter api
необходимо зарегистрировать приложение. Для этого надо перейти по ссылке, войти в аккаунт (создать, если нет) и нажать кнопкуCreate New App
. Далее необходимо заполнить поля нашего приложения.name
,description
придумаем сами, они нигде не будут видны, кроме как в вашей учётной записи в твиттере.Website
можем указать любой несуществующий, но, если у вас есть сайт, то можете указать ваш.Callback URL
нужен для веб-приложений, поэтому вместо него можем также ввести любой сайт.После этого ставим галочку, что согласны с условиями пользования и нажимаем кнопку
Create your Twitter application
. Видим информацию о нашем приложении. Если понадобится, то можно изменить поля в любое время.Далее нажимаем на вкладку
Keys and Access Tokens
. Увидим следующую форму:Чёрным прямоугольником закрашена информация о нашем аккаунте в целях безопасности. Также надо было поступить и с полями
Consumer Key (API Key)
иConsumer Secret (API Secret)
, но мы их просто сгенерируем заново, чтобы использовать эти данные в уроке. Не показывайте никому эти поля, это небезопасно.Скопирум поля
Consumer Key (API Key)
иConsumer Secret (API Secret)
. Они однозначно идентифицируют наше приложение и будут учитываться при его авторизации.Поле
Access Level
должно иметь значениеRead and write
. Это говорит о том, что мы сможем как считывать информацию о пользователе, так и добавлять новую.Добавление twitter-kit библиотеки в наше приложение
Для начала добавим
twitter-kit
библиотеку в наш проект. Конечно, можно полностью обойтись без неё, но процесс авторизации – довольно сложная и неинтересная задача, которую создатели библиотеки значительно нам упростили. Поэтому мы подключаем эту библиотеку только для авторизации.Нам надо добавить следующую строку в наш файл
build.gradle(Module:app)
.implementation 'com.twitter.sdk.android:twitter-core:3.1.1'
Давайте сразу же добавим два новых ресурса в наш файл
strings.xml
. Это и будут те значенияConsumer Key (API Key)
иConsumer Secret (API Secret)
, которые мы получили, когда регестрировали приложение. Они должны выглядить следующим образом. strings.xmlВам вместо этих значений надо ввести те, которые вы получили при регистрации приложения. Библиотека
twitter-kit
автоматически получит эти значения, т.к. мы используемname
ресурса, который указан в документации библиотеки.Отлично, теперь мы подключили библиотеку. Для начала нам надо создать класс
Application
для того, чтобы могли проинициализировать библиотекуTwitter
. Создадим файлTwitterApp
в нашем главном пакетеcolibri.dev.com.colibritweet
. Выглядит он следующим образом.TwitterApp.java
Всё, что нам надо сделать – проинициализировать библиотеку вызовом
Twitter.initialize(this)
.Также нам надо указать, что мы используем свой
Application
. Для этого надо в файлеAndroidManifest
добавить атрибутandroid:name=".TwitterApp"
у блокаapplication
. Наш файл выглядит так после этого изменения:AndroidManifest.xml
Отлично, теперь давайте добавим логику авторизации приложения.
Добавим в пакет
activity
новый файлAuthActivity
.Также добавим нашу новую
Activity
в манифест и сделаем её стартовой.AndroidManifest.xml
Видим, что теперь стартовой
Activity
являетсяAuthActivity
. На это указывает значениеandroid.intent.category.LAUNCHER
в блокеintent-filter
.Теперь давайте добавим
layout
для нашей активити. Создадим файлactivity_auth.xml
activity_auth.xml
Наш экран состоит из одной кнопки, которая будет выполнять всю логику авторизации. Изначально мы хотели сделать два
EditText
иButton
, ноTwitter
не предоставляет логины и пароли пользователей сторонним сервисам. Они используют протоколOAuth
для безопасной авторизации. Подробнее про протокол здесь.Наш файл
AuthActivity
выглядит так:AuthActivity.java
Здесь мы просто добавили переменную типа
TwitterLoginButton
, которая будет выполнять за нас всю работу по авторизации приложения. Также мы добавили слушателя событийnew Callback<TwitterSession>
, у которого есть два метода:success
– вызывается при успешной авторизации пользователяfailure
– вызывается при возникновении ошибки во время авторизации.Также мы переопределили метод
onActivityResult
(если вам ещё не известно, для чего используется данный метод, то ознакомьтесь с данным уроком) и вызвалиmTwitterLoginButton.onActivityResult
. Это необходимо для того, чтобы результат авторизации передать из нашейActivity
в объектmTwitterLoginButton
.Запустим приложение:
После того, как нажмём кнопку
Log in with Twitter
, мы переходим на страницу авторизации пользователя, которая можем выглядеть по-разному. Если у вас есть мобильное приложениеTwitter
, то откроется мобильное приложение. Если нет, то браузер. У нас выглядит так:Отлично, мы закончили с логикой авторизации. Давайте только после успешной авторизации сделаем переход на экран
UserInfoActivity
. При этом будем передаватьid
пользователя. Это нам понадобится для запроса данных о пользователе в следующем уроке. Давайте вынесем эту логику в отдельный методnavigateToUserInfo
. Также давайте создадим константуUSER_ID
, чтобы мы могли ссылаться на неё внутриUserInfoActivity
при получении данных.AuthActivity.java
Этот метод мы будем вызывать внутри
success
обработчикаmTwitterLoginButton
. Полный код выглядит так:AuthActivity.java
Давайте убедимся, что мы получили наши данные на экране
UserInfoActivity.class
. Для этого получим данные используя методgetIntent()
и выведемid
пользователя, используя (Toast
).Добавим код в метод
onCreate
в классеUserInfoActivity
.UserInfoActivity.java
Ещё один момент. Помните, как мы делали навигацию на экране
SearchUsersActivity
:SearchUsersActivity.java
Правилом большого пальца является использование констант вместо явного использования строки
"userId"
. Давайте заменим использование на константуAuthActivity.USER_ID
.SearchUsersActivity.java
Результат:
Всё, с логикой авторизации мы завершили работу. Поздравляю! Впереди осталось совсем немного. Перед завершением урока давайте удалим строку, где мы показываем
Toast
, чтобы это не мешало нам во время дальнейшей работы.Подведём итоги:
Twitter
приложения нам в первую очередь необходимо зарегистрировать его на сайте.Twitter api
необходимо пройти авторизацию. Для простоты можно использовать библиотекуtwitter-kit