Возможности OkHttp о которых вы не знали

  Рет қаралды 18,399

Android Broadcast. Все об Андроид разработке

Android Broadcast. Все об Андроид разработке

Күн бұрын

Пікірлер: 87
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
🔗 Avito.Tech avito.tech/ 💰 Поддержать проект на Boosty bit.ly/3sratqQ или Patreon patreon.com/android_broadcast 🔗 Telegram канал "Android Broadcast" ttttt.me/android_broadcast 🔗 Мерч от Android Broadcast androidbroadcaststore.by/
@SergeyJasfex
@SergeyJasfex 3 жыл бұрын
Кирилл, крутой формат, мне очень понравился. Реально экономит время и позволяет быстро ознакомиться с возможностями технологии
@sergeykharuk5614
@sergeykharuk5614 3 жыл бұрын
authenticator() использую для refreshToken-а. Т.е. если interceptor добавляет в хедер реквеста Bearer token (который имеет время жизни), то лямбда, переданная в authenticator(), вызовется в ответ на 401 Unauthorized в любом сделанном нами запросе (т.е. когда наш токен устарел). И таким образом, непосредственно в лямбде, которая передается в метод authenticator(), можно прописать реквест на апдейт токена)
@andriyshatynskyy5214
@andriyshatynskyy5214 3 жыл бұрын
в моем приложении на бэкенде аутентификация(access и refresh token) реализована через JWT(делал не я), возможно ли использовать Okhttp Interceptor что делать рефреша токена?
@BelokonRoman
@BelokonRoman 3 жыл бұрын
@@andriyshatynskyy5214 возможно. Но только не interceptor, а authenticator. Стандартный подход: Interceptor для добавления accessToken-а в хэдэр запроса, authenticator для обновления accessToken-а с помощью refreshToken-a когда первый протух(бэк должен вернуть 401 в этом случае)
@andriyshatynskyy5214
@andriyshatynskyy5214 3 жыл бұрын
@@BelokonRoman спасибо
@aidardauylbay8116
@aidardauylbay8116 3 жыл бұрын
Тоже самое, но самый явный недостаток Authenticator в том, что при параллельных запросах, все неавторизованные запросы вызывают его, и нужно вручную их синхронизировать
@RussianTeaMachine
@RussianTeaMachine 3 жыл бұрын
В обычном interceptor будет тоже самое, тоже нужно использовать синхронизацию. Я не стал использовать authenticator т.к. при использовании стандартных логов okhttp логи рефреша токена не отображаются.
@ultraon83
@ultraon83 3 жыл бұрын
Если backend не поддерживает Cache-Control, мы все ещё можем сделать активацию http cache на стороне клиента используя interceptor (возможно network interceptor, точно не помню) OkHttp. В interceptor мы модифицируемых response добавляя нужные headers как бы от сервера. Это быстрое решение, чтобы снизить нагрузку на backend.
@Nomad7541
@Nomad7541 3 жыл бұрын
Очень интересный формат, ждём про другие инструменты!
@матжонфаттоев-щ5ш
@матжонфаттоев-щ5ш 3 жыл бұрын
Было бы интересно про OAUTH2
@АлександрГапанович-ы6т
@АлександрГапанович-ы6т 3 жыл бұрын
Кирилл, спасибо большое, как раз вопрос попался такой на собесе месяца полтора назад, все никак руки не доходили разобраться)
@tyt66612
@tyt66612 2 жыл бұрын
Что именно спросили?)
@user-sankarsana
@user-sankarsana 3 жыл бұрын
Крутяк! Кирилл, спасибо за труды.
@ultraon83
@ultraon83 3 жыл бұрын
Привет. Для работы с Cache-Control header через Retrofit, можно добавить доп параметр в метод API, с аннотацией Header, и подкладывать туда значение динамически.
@qIKraytonIp
@qIKraytonIp 3 жыл бұрын
Видос очень полезный, хотелось бе видеть больше всяких советов и best practices по retrofit.
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
По retrofit мало чего рассказывать. Простая и эффективная библиотека, без усложнений и лишнего API
@androidkotlin-6234
@androidkotlin-6234 9 ай бұрын
не знал про Network inspector. Спасибо за просвещение!
@shrekinator8000
@shrekinator8000 3 жыл бұрын
Формат отличный. Почти 10К подписчиков. Много это или нет - не знаю. Но думаю, что если все 10К - разработчики, то вполне неплохо!
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Тоже задумываюсь этим вопросом. Даже непонятно какой объем этой аудитории
@ВиталийПерятин-с2ц
@ВиталийПерятин-с2ц 3 жыл бұрын
Формат - топ! Спасибо за видео)
@it-vk8ik
@it-vk8ik 2 жыл бұрын
Спасибо, очень полезно.
@bolnoi8
@bolnoi8 3 жыл бұрын
Спасибо, очень полезно. В тему отслеживания запросов - стоило рассказать про чакер.
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Тулинг к теме видео особо не хотел подмешивать, а рассказать отдельно
@thunderdoge
@thunderdoge 3 жыл бұрын
Спасибо за видео!
@mikhailtarasov7403
@mikhailtarasov7403 2 жыл бұрын
Очень крутое и понятное видео , спасибо !
@turlir
@turlir 3 жыл бұрын
Я использую Authenticator для работы с корпоративным OpenId. Использование Authenticator не освобождает от использования Interceptor. Через Authenticator удобно обновлять токен доступа, а через Interceptor добавлять его в заголовки запроса централизованно. На каждый уровень аутентификации добавляю Interceptor.
@nazirjonm6560
@nazirjonm6560 3 жыл бұрын
Очень круто! Сделайте пожалуйста видео по paging3 component с добавление и удаление данные в позиции)
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Видео про Paging 3 есть на канале kzbin.info/www/bejne/b6u5noyMebmWe68.
@romankryvolapov
@romankryvolapov 3 жыл бұрын
Очень интересный видос, некоторого не знал
@hievery9678
@hievery9678 3 жыл бұрын
Крутой видос, познавательный, спасибо) Ещё для отслеживания сетевых запросов можно использовать прокси. Например Charles или бесплатный burpsuite. Нетворк менеджер не всегда подключен к приложению. А прокси, если правильно настроить, перехватывает трафик всегда. И если вдруг вылетел какой-то непонятный баг, то с прокси можно просто посмотреть, не бэк ли это непонятно что кинул. + в прокси, (по крайней мере Charles) есть возможности подмены, как запросов, так и ответов. А такие фичи, как перезаписывание ответа сервера из выбранного файла делают разработку/тестирование новых/измененных ручек ооочень удобным. Ctrl+s после изменения файлика в любимом редакторе и вуаля, приложению приходит новый ответ. Приложение не надо ни пересобирать, ни перезапускать. Правда такую точную инфу, как сколько сейчас конекшенов и как между ними распределились запросы прокси конечно не скажет, но в большинстве случаев это и не надо.
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Charles - это прокси и больше подходит для тестирования, а вот сетевой инспектор предоставляет больше информации для отладки и понимания, где происходит проблема с вызовами. Инструменты не взаимозаменяемые
@hievery9678
@hievery9678 3 жыл бұрын
@@AndroidBroadcast Если надо поинспектить приложение, то полностью согласен. Но если использовать его чисто как просматривалку запросов/ответов, то они вполне взаимозаменяемые. Я именно такой юзкейс и имел ввиду. Мне показалось, что будет полезно упомянуть прокси. Вдруг для кого-то новенького это будет лучшей альтернативой, про которую он не знал.
@kirillsushilnikov9614
@kirillsushilnikov9614 2 жыл бұрын
Network Inspector - хорошая штука, но было бы ещё хорошо, если бы он показывал ещё попытки отправки запроса на сервер (когда получаешь UnknownServerException - сервер лег или интернет плохой)
@radpem
@radpem 3 жыл бұрын
Классное видео, вот в таком формате топ
@BelokonRoman
@BelokonRoman 3 жыл бұрын
10:05 - тут даже больше поможет value class чем именнованные параметры. Потому что именованные параметры - это добровольное дело на вызывающей стороне, а если token обернуть в какой нибудь value class AccessToken(private val token: String),то на вызывающей стороне уже полюбому придется передавать нужный объект. Но при этом в скомпилированном коде будет просто строка
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Только с ним должен уметь работать сериализатор
@BelokonRoman
@BelokonRoman 3 жыл бұрын
@@AndroidBroadcast в том то и прелесть value class-ов, что ничего дополнительно не надо, т.к. он в конечном счете бедут заменен на примитив, который не требует дополнительных сериализаторов\десереализаторов.
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Не во всех случаях. Как раз-то в интерфейсе они могут остаться обычным классом. Посмотрите спецификацию их, там много случаев когда остаётся класс обёртка
@BelokonRoman
@BelokonRoman 3 жыл бұрын
@@AndroidBroadcast Я знаю. Но голая обертка над не null-овым аргументом всегда будет упрощена до примитива и при этом дает compile time гарантию, что туда не передадут ничего другого. В этом случае есть только выгоды и я не вижу никаких недостатков. А если вы уже начинаете наварачивать что то дополнительное в этоу обертку - то тогда надо уже переходить к обычному классу. Ну и если параметр может быть null - то тоже теряется вся прелесть этого value class-а. Это всего лишь вопрос правильного применения инструментов.
@DonkeyKong68
@DonkeyKong68 3 жыл бұрын
Конкретно в этом случае должно хватить и typealias
@arsenthompson
@arsenthompson 3 жыл бұрын
Спаассииибо
@pasha09090
@pasha09090 3 жыл бұрын
Спасибо
@mamyna_bysinka
@mamyna_bysinka 3 жыл бұрын
Стоить заметить что кешировпние доступно только для GET запросов, также стоит заметить что без хедеров кеша никакой кеш не будет доступный.
@bekaryssailaukul1006
@bekaryssailaukul1006 3 жыл бұрын
Полезное видео, можно видео про как делать Refresh token ?
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Универсальное нет, только если взять что у вас все сделано по зачёту OAuth 2.0, что я не встречал (
@LazyTram911
@LazyTram911 3 жыл бұрын
Круто и как всегда вовремя) Друзья, а если в примере с апи-кеем он бы менялся со временем, то что делать тогда?
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Надо просто сделать другую реализацию, где можно поменять ключ. Это не так сложно. Проблема в том что часть запросов может уйти со старым ключом
@kirillsushilnikov9614
@kirillsushilnikov9614 2 жыл бұрын
Спасибо за видос. Немного для меня не ясно с chain. Если я добавлю несколько интерсепторов (в одном, скажем добавлю user-agent, в другом упомянутый apikey), то будет ли запрос отправлен на сервер несколько раз, обрастая параметрами?
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Обработчик перехватывает запрос который происходит в OkHttp и изменяет его или просто отслеживает. Т.е. это не создаёт дополнительный запрос к оригинальному и количество перехватчиком может быть сколь угодным
@kirillsushilnikov9614
@kirillsushilnikov9614 2 жыл бұрын
@@AndroidBroadcast спасибо большое!
@hievery9678
@hievery9678 3 жыл бұрын
А если прокси и нетворк менеджер не подходят, то можно посмотреть в сторону hyperion. Его можно так интегрировать, что помимо его основных функций, будет перехватываться весь трафик и выводиться в приложении в специальное меню. Однако смотреть трафик с девайса - не самое удобное занятие, поэтому я бы это оставил как запасной вариант.
@itgik
@itgik 3 жыл бұрын
Спасибо за видео. А как добавить tab Network inspector? У меня его нет. Благодарю.
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Он появился в Android Studio Bumble в том виде в котором я показал. До этого он был в секции "Profilers"
@Mazaxict11
@Mazaxict11 3 жыл бұрын
Как правильно выбрать резмер кэша?
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Общего правила нет и зависит от многих факторов: что вы туда будете класть, как много данных будет, как долго вы ожидаете его хранение в кэше, сколько место у вас у телефоне и пр.
@malchikovma
@malchikovma 3 жыл бұрын
В каких случаях может понадобиться использовать какие-то библиотеки кроме retrofit? Например, тот же OkHttp в чистом виде или Volley?
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Например, когда нужно делать тонкую настройку Http запроса в runtime. Retrofit позволяет эффективно работать с REST, т.е. есть четкий набор вызовов.
@ИванКурак-п3е
@ИванКурак-п3е 3 жыл бұрын
А будут видео как создавалось приложение для devtools?
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Да, в ноябре буду кодить в прямом эфире
@AndreyDerkach8
@AndreyDerkach8 3 жыл бұрын
в своих пет проектах использую ktor 😎
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Насколько помню на JVM он работает поверх OkHttp ?
@danik030699
@danik030699 3 жыл бұрын
Круто! А что если делать интеграцию после введения и до кода. В текущем варианте сильно сбивает с мысли/настроя.
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Хорошое предложение
@WoffkaG94
@WoffkaG94 3 жыл бұрын
Можно сделать обёртку для okhttp (работает при чистом okhttp, при retrofit+okhttp и в кмм ktor+okhttp engine/ktor+Ios engine). Возвращает или Single/suspend, если надо что-то одно (кэш или апи), или Observable/Flow, если надо оба или одно, но в каком-то определённом порядке (с флагом откуда данные пришли).
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
А зачем?
@WoffkaG94
@WoffkaG94 3 жыл бұрын
​@@AndroidBroadcast чтобы сразу показать контент, а не пустой экран (если у нас есть кэш и он не просрочился), и поверх него догрузить уже новый (если он есть). Конечно можно сделать всё нативно через рум, но тогда надо хендлить когда кэш просрочился, как-то хендлить размер кэша, как-то мержить квери для нескольких таблиц, если на одном экране несколько запросов и у них разные данные и другие заботы. Но если поиск или другие квери по БД не нужны, то зачем? С обёрткой код менять практически не надо будет, а так же сохраняется возможность комбайнить несколько запросов (если экран сложный и состоит из N запросов), флэтмапить их (при этом если хоть в одном запросе в цепочке "кэш" будет ошибка кэша, то вся цепочка проигнорится и будет грузить только апишная) или комбайнить кэш + не кэш (условно один поддерживает кэш, а второй нет, но мы хотим первый показать сразу и догружать, а второй просто догружать) без какой-либо мудрёной логики. Ретрофит по дефолту вернёт кэш, только если ошибка с интернетом (и при чём никак не скажет о том, что данные из кэша, а не из апи)
@kirillsushilnikov9614
@kirillsushilnikov9614 3 жыл бұрын
Network Inspector очень похож на раздел Network профайлера. Это одно и то же или они все же различаются?
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Да, просто в последней студии произошло перемещение раздела
@kirillsushilnikov9614
@kirillsushilnikov9614 3 жыл бұрын
@@AndroidBroadcast А, вот в чем дело. Спасибо за ответ и за видео.
@kirillsushilnikov9614
@kirillsushilnikov9614 3 жыл бұрын
По поводу размера кеша. Неужели сам Android на уровне ОС не ограничивает это?
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Есть стандартный контролируемый кэш, но никто не мешает вне его содержание дать папку и туда что-то складывать
@kirillsushilnikov9614
@kirillsushilnikov9614 3 жыл бұрын
@@AndroidBroadcast Да... Google прислушивается к пользователям, старается снизить уровень энергопотребления, работает над безопасностью и прочим. Но не может помешать разработчику завалить всю память в устройстве как раз навреное по этой причине, потому что функицонирование программы может нарушиться.
@user-not_defined
@user-not_defined 3 жыл бұрын
Видео немного на 2:23 обрезалось
@anddev6505
@anddev6505 3 жыл бұрын
Формат отличный, от содержания ожидал большей глубины
@MrJackBn
@MrJackBn 3 жыл бұрын
Апикей он же токен, верно?
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Это разные вещи, но работа с ними примерно одинаково осуществляется
@aratj
@aratj 3 жыл бұрын
можно сказать так , мы так же токены через интерцептеры для всех запросов выткаем
@ivanchepelkin6347
@ivanchepelkin6347 3 жыл бұрын
Про кэш: я правильно понял, что нужно создавать специальную директорию на андройде и тогда там это все хранить? как тогда можно сделать эту директорию безопасной, чтоб никто не имел доступа к вашему кэшу?
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Нужно создавать эту директорию на internal storage. Можно использовать Context.cacheDir
@kamilchulakov
@kamilchulakov 3 жыл бұрын
Про жизненный цикл ничего не знал :|
@Vlad_Gromov_1992
@Vlad_Gromov_1992 3 жыл бұрын
Sps
@Chernov1984
@Chernov1984 3 жыл бұрын
+
Android Parcelable или Serializable? Павел Борзиков @AvitoTech
24:01
Android Broadcast. Все об Андроид разработке
Рет қаралды 17 М.
Советы по уведомлениям в Android
25:15
Android Broadcast. Все об Андроид разработке
Рет қаралды 10 М.
ТВОИ РОДИТЕЛИ И ЧЕЛОВЕК ПАУК 😂#shorts
00:59
BATEK_OFFICIAL
Рет қаралды 7 МЛН
99.9% IMPOSSIBLE
00:24
STORROR
Рет қаралды 16 МЛН
Farmer narrowly escapes tiger attack
00:20
CTV News
Рет қаралды 13 МЛН
Организация модулей. Типы Inject. Способы доставки зависимостей
25:18
Android Broadcast. Все об Андроид разработке
Рет қаралды 41 М.
Gradle уже не тот! Мнение билд инженера
1:44:20
Android Broadcast. Все об Андроид разработке
Рет қаралды 2,2 М.
Header, Token в Retrofit2  | Android Studio (Kotlin)
16:45
Чичваркин о крахе российского рубля
19:48
В гостях у Гордона
Рет қаралды 60 М.
Merged Android Manifest [RU]
11:03
Android Broadcast. Все об Андроид разработке
Рет қаралды 10 М.
Собеседование Middle Android разработчика
2:01:02
Android Broadcast. Все об Андроид разработке
Рет қаралды 22 М.
Binder - как устроена работа с несколькими процессами в Android
56:44
Android Broadcast. Все об Андроид разработке
Рет қаралды 29 М.
Простой HTTP сервер. #1
24:22
letsCode
Рет қаралды 28 М.
ТВОИ РОДИТЕЛИ И ЧЕЛОВЕК ПАУК 😂#shorts
00:59
BATEK_OFFICIAL
Рет қаралды 7 МЛН