Работа с соцсетями (lecture 19 – social)
TRANSCRIPT
![Page 1: Работа с соцсетями (Lecture 19 – social)](https://reader038.vdocuments.pub/reader038/viewer/2022100802/5881d3c81a28ab331a8b5dbf/html5/thumbnails/1.jpg)
Работа с cоцсетямиAndroid
![Page 2: Работа с соцсетями (Lecture 19 – social)](https://reader038.vdocuments.pub/reader038/viewer/2022100802/5881d3c81a28ab331a8b5dbf/html5/thumbnails/2.jpg)
Работа с соцсетями
Почти у всех крупных соцсетей есть сладкая пара:
Авторизация через OAuthЗапросы через REST API или RPC-style API
Дополнительно
Может быть свой SDK, но зачастую (например - у Facebook) это обертка поверх того же APIМожет быть сторонний SDK (пример - Twitter4j)
![Page 3: Работа с соцсетями (Lecture 19 – social)](https://reader038.vdocuments.pub/reader038/viewer/2022100802/5881d3c81a28ab331a8b5dbf/html5/thumbnails/3.jpg)
OAuth
OAuth - протокол для авторизованного доступа к стороннему API. OAuth позволяетприложению получить ограниченный API-доступ к данным стороннего сервиса, если
пользователь даетд обро.
Постановка проблемы:
Пользователи боятся вводить логины и пароли от своих любимых фейсбуков внутри"левых" приложений.Если же они предоставляют доступ в рамках исходного сервиса - доверие гораздо выше.Можно ограничить права доступа и ограничения.
![Page 4: Работа с соцсетями (Lecture 19 – social)](https://reader038.vdocuments.pub/reader038/viewer/2022100802/5881d3c81a28ab331a8b5dbf/html5/thumbnails/4.jpg)
Схема работы с OAuth
Отсылаем браузер на страницу аутентификации сервиса, указывая URL для возврата.Пользователь видит родную фейсбучную страничку и не боясь вводит логин/парольЕсли все ОК, у пользователя заправшивается разрешение на выдачу прав доступа дляприложенияЕсли все ОК, браузер перенаправляет пользователя обратно на URL сервисаОбрабатываем редирект, в параметре редирект-запроса к нам приходит "код доступа"С кодом доступа и "секретом" отправляем запрос на получение токена (ACCESS_TOKEN)Отправляем прикладные запросы используя ACCESS_TOKEN
![Page 5: Работа с соцсетями (Lecture 19 – social)](https://reader038.vdocuments.pub/reader038/viewer/2022100802/5881d3c81a28ab331a8b5dbf/html5/thumbnails/5.jpg)
Наглядная схема
Flickr Twitter
![Page 6: Работа с соцсетями (Lecture 19 – social)](https://reader038.vdocuments.pub/reader038/viewer/2022100802/5881d3c81a28ab331a8b5dbf/html5/thumbnails/6.jpg)
OAuth 2.0
Лучше поддержка не-браузерных приложенийНе нужна криптография на клиентеТокены теперь живут не долго + механизм для их обновления
Все это достигается благодаря работе по HTTPS.
![Page 7: Работа с соцсетями (Lecture 19 – social)](https://reader038.vdocuments.pub/reader038/viewer/2022100802/5881d3c81a28ab331a8b5dbf/html5/thumbnails/7.jpg)
OAuth 2.0 - авторизация
Появились разные сценарии для полученяи авторизации
авторизация для приложений, имеющих серверную частьавторизация для полностью клиентских приложенийавторизация по логину и паролювосстановление предыдущей авторизации
![Page 8: Работа с соцсетями (Lecture 19 – social)](https://reader038.vdocuments.pub/reader038/viewer/2022100802/5881d3c81a28ab331a8b5dbf/html5/thumbnails/8.jpg)
Клиент + Сервер
![Page 9: Работа с соцсетями (Lecture 19 – social)](https://reader038.vdocuments.pub/reader038/viewer/2022100802/5881d3c81a28ab331a8b5dbf/html5/thumbnails/9.jpg)
Только клиент
![Page 10: Работа с соцсетями (Lecture 19 – social)](https://reader038.vdocuments.pub/reader038/viewer/2022100802/5881d3c81a28ab331a8b5dbf/html5/thumbnails/10.jpg)
Другие способы
Авторизация по логину/паролю и восстановление предыдущей авторизации - это простыеPOST-запросы:
Логин/пароль
url?params...&username=%s&password=%s в ответ: json {access_token: "SuperTokenNoveoGroup"}
Refresh token
url?params...&refresh_token=SuperTokenNoveoGroup в ответ: json {access_token: "NewNoveoGroupToken1111AZAZAZA"}
![Page 11: Работа с соцсетями (Lecture 19 – social)](https://reader038.vdocuments.pub/reader038/viewer/2022100802/5881d3c81a28ab331a8b5dbf/html5/thumbnails/11.jpg)
Сложно?
Популярные сети предоставляют SDK
![Page 12: Работа с соцсетями (Lecture 19 – social)](https://reader038.vdocuments.pub/reader038/viewer/2022100802/5881d3c81a28ab331a8b5dbf/html5/thumbnails/12.jpg)
com.twitter.sdk.android 1 //Где-то в Application 2 TwitterAuthConfig authConfig = new TwitterAuthConfig(KEY, SECRET); 3 Fabric.with(/*Context*/, new Twitter(authConfig), /*Kits...*/); 4 5 //Где-то в Fragments/Activity 6 private twitterAuthClient = new TwitterAuthClient(); 7 8 public void onLoginClick() { 9 twitterAuthClient.authorize( 10 getMainActivity(), 11 new Callback<TwitterSession>() { 12 void success(Result<TwitterSession> session) {} 13 void failure(TwitterException exception) {} 14 }); 15 } 16 17 18 public void onActivityResult(int requestCode, int resultCode, Intent data) { 19 super.onActivityResult(requestCode, resultCode, data); 20 twitterAuthClient.onActivityResult(requestCode, resultCode, data); 21 }
![Page 13: Работа с соцсетями (Lecture 19 – social)](https://reader038.vdocuments.pub/reader038/viewer/2022100802/5881d3c81a28ab331a8b5dbf/html5/thumbnails/13.jpg)
com.facebook.android 1 FacebookSdk.sdkInitialize(this); //Где-то в Application 2 3 //В Activity/Fragment 4 public void onCreate() { 5 facebookCallbackMngr = CallbackManager.Factory.create(); 6 LoginManager.getInstance().registerCallback(facebookCallbackMngr, 7 new FacebookCallback<LoginResult>() { 8 public void onSuccess(LoginResult loginResult) {} 9 public void onCancel() {} 10 public void onError(FacebookException e) {} 11 }); 12 } 13 14 public void onLoginClick() { 15 LoginManager.getInstance().logInWithReadPermissions(this, 16 Arrays.asList("public_profile", "email", /*Другие разрешения*/)); 17 } 18 19 public void onActivityResult(int requestCode, int resultCode, Intent data) { 20 super.onActivityResult(requestCode, resultCode, data); 21 facebookCallbackMngr.onActivityResult(requestCode, resultCode, data); 22 }
![Page 14: Работа с соцсетями (Lecture 19 – social)](https://reader038.vdocuments.pub/reader038/viewer/2022100802/5881d3c81a28ab331a8b5dbf/html5/thumbnails/14.jpg)
Что дальше
CRUD, REST, RPC
![Page 15: Работа с соцсетями (Lecture 19 – social)](https://reader038.vdocuments.pub/reader038/viewer/2022100802/5881d3c81a28ab331a8b5dbf/html5/thumbnails/15.jpg)
REST
REpresentational State Transfer Используются методы HTTP-запросов
Create - POSTRead - GETUpdate - PUTDelete - DELETE
Пример использования:
GET /user/info — прочитать информациюPUT /user/info — обновить информациюGET /item/comments — получить комментарииGET /item/comments/14 — получить 14ый комментарийPOST /item/comments — добавить комментарийDELETE /item/comments — очистить комментарииDELETE /item/comments/14 — удалить 14ый комментарий
![Page 16: Работа с соцсетями (Lecture 19 – social)](https://reader038.vdocuments.pub/reader038/viewer/2022100802/5881d3c81a28ab331a8b5dbf/html5/thumbnails/16.jpg)
RPC
Remote Procedure Calling
Если появляется знак "?" в URL - это уже не RESTОчень похоже на простой вызов процедур:
Название функции — это просто соответствующий URLАргументы задаются через Query-параметры
Пример использования: https://api.vk.com/method/messages.send?
uid=6639244& message=Preved&
title=Medved& access_token=NoveoGroupToken
![Page 17: Работа с соцсетями (Lecture 19 – social)](https://reader038.vdocuments.pub/reader038/viewer/2022100802/5881d3c81a28ab331a8b5dbf/html5/thumbnails/17.jpg)
Полезные ссылки
OAuthOAuth понятным языкомOAuth 2.0Rest API TutorialLogin with TwitterLogin with Facebook