🔗 Avito.Tech avito.tech/ 💰 Поддержать проект на Boosty bit.ly/3sratqQ или Patreon patreon.com/android_broadcast 🔗 Telegram канал "Android Broadcast" ttttt.me/android_broadcast 🔗 Мерч от Android Broadcast androidbroadcaststore.by/
@SergeyJasfex3 жыл бұрын
Кирилл, крутой формат, мне очень понравился. Реально экономит время и позволяет быстро ознакомиться с возможностями технологии
@sergeykharuk56143 жыл бұрын
authenticator() использую для refreshToken-а. Т.е. если interceptor добавляет в хедер реквеста Bearer token (который имеет время жизни), то лямбда, переданная в authenticator(), вызовется в ответ на 401 Unauthorized в любом сделанном нами запросе (т.е. когда наш токен устарел). И таким образом, непосредственно в лямбде, которая передается в метод authenticator(), можно прописать реквест на апдейт токена)
@andriyshatynskyy52143 жыл бұрын
в моем приложении на бэкенде аутентификация(access и refresh token) реализована через JWT(делал не я), возможно ли использовать Okhttp Interceptor что делать рефреша токена?
@BelokonRoman3 жыл бұрын
@@andriyshatynskyy5214 возможно. Но только не interceptor, а authenticator. Стандартный подход: Interceptor для добавления accessToken-а в хэдэр запроса, authenticator для обновления accessToken-а с помощью refreshToken-a когда первый протух(бэк должен вернуть 401 в этом случае)
@andriyshatynskyy52143 жыл бұрын
@@BelokonRoman спасибо
@aidardauylbay81163 жыл бұрын
Тоже самое, но самый явный недостаток Authenticator в том, что при параллельных запросах, все неавторизованные запросы вызывают его, и нужно вручную их синхронизировать
@RussianTeaMachine3 жыл бұрын
В обычном interceptor будет тоже самое, тоже нужно использовать синхронизацию. Я не стал использовать authenticator т.к. при использовании стандартных логов okhttp логи рефреша токена не отображаются.
@ultraon833 жыл бұрын
Если backend не поддерживает Cache-Control, мы все ещё можем сделать активацию http cache на стороне клиента используя interceptor (возможно network interceptor, точно не помню) OkHttp. В interceptor мы модифицируемых response добавляя нужные headers как бы от сервера. Это быстрое решение, чтобы снизить нагрузку на backend.
@Nomad75413 жыл бұрын
Очень интересный формат, ждём про другие инструменты!
@матжонфаттоев-щ5ш3 жыл бұрын
Было бы интересно про OAUTH2
@АлександрГапанович-ы6т3 жыл бұрын
Кирилл, спасибо большое, как раз вопрос попался такой на собесе месяца полтора назад, все никак руки не доходили разобраться)
@tyt666122 жыл бұрын
Что именно спросили?)
@user-sankarsana3 жыл бұрын
Крутяк! Кирилл, спасибо за труды.
@ultraon833 жыл бұрын
Привет. Для работы с Cache-Control header через Retrofit, можно добавить доп параметр в метод API, с аннотацией Header, и подкладывать туда значение динамически.
@qIKraytonIp3 жыл бұрын
Видос очень полезный, хотелось бе видеть больше всяких советов и best practices по retrofit.
@AndroidBroadcast3 жыл бұрын
По retrofit мало чего рассказывать. Простая и эффективная библиотека, без усложнений и лишнего API
@androidkotlin-62349 ай бұрын
не знал про Network inspector. Спасибо за просвещение!
@shrekinator80003 жыл бұрын
Формат отличный. Почти 10К подписчиков. Много это или нет - не знаю. Но думаю, что если все 10К - разработчики, то вполне неплохо!
@AndroidBroadcast3 жыл бұрын
Тоже задумываюсь этим вопросом. Даже непонятно какой объем этой аудитории
@ВиталийПерятин-с2ц3 жыл бұрын
Формат - топ! Спасибо за видео)
@it-vk8ik2 жыл бұрын
Спасибо, очень полезно.
@bolnoi83 жыл бұрын
Спасибо, очень полезно. В тему отслеживания запросов - стоило рассказать про чакер.
@AndroidBroadcast3 жыл бұрын
Тулинг к теме видео особо не хотел подмешивать, а рассказать отдельно
@thunderdoge3 жыл бұрын
Спасибо за видео!
@mikhailtarasov74032 жыл бұрын
Очень крутое и понятное видео , спасибо !
@turlir3 жыл бұрын
Я использую Authenticator для работы с корпоративным OpenId. Использование Authenticator не освобождает от использования Interceptor. Через Authenticator удобно обновлять токен доступа, а через Interceptor добавлять его в заголовки запроса централизованно. На каждый уровень аутентификации добавляю Interceptor.
@nazirjonm65603 жыл бұрын
Очень круто! Сделайте пожалуйста видео по paging3 component с добавление и удаление данные в позиции)
@AndroidBroadcast3 жыл бұрын
Видео про Paging 3 есть на канале kzbin.info/www/bejne/b6u5noyMebmWe68.
@romankryvolapov3 жыл бұрын
Очень интересный видос, некоторого не знал
@hievery96783 жыл бұрын
Крутой видос, познавательный, спасибо) Ещё для отслеживания сетевых запросов можно использовать прокси. Например Charles или бесплатный burpsuite. Нетворк менеджер не всегда подключен к приложению. А прокси, если правильно настроить, перехватывает трафик всегда. И если вдруг вылетел какой-то непонятный баг, то с прокси можно просто посмотреть, не бэк ли это непонятно что кинул. + в прокси, (по крайней мере Charles) есть возможности подмены, как запросов, так и ответов. А такие фичи, как перезаписывание ответа сервера из выбранного файла делают разработку/тестирование новых/измененных ручек ооочень удобным. Ctrl+s после изменения файлика в любимом редакторе и вуаля, приложению приходит новый ответ. Приложение не надо ни пересобирать, ни перезапускать. Правда такую точную инфу, как сколько сейчас конекшенов и как между ними распределились запросы прокси конечно не скажет, но в большинстве случаев это и не надо.
@AndroidBroadcast3 жыл бұрын
Charles - это прокси и больше подходит для тестирования, а вот сетевой инспектор предоставляет больше информации для отладки и понимания, где происходит проблема с вызовами. Инструменты не взаимозаменяемые
@hievery96783 жыл бұрын
@@AndroidBroadcast Если надо поинспектить приложение, то полностью согласен. Но если использовать его чисто как просматривалку запросов/ответов, то они вполне взаимозаменяемые. Я именно такой юзкейс и имел ввиду. Мне показалось, что будет полезно упомянуть прокси. Вдруг для кого-то новенького это будет лучшей альтернативой, про которую он не знал.
@kirillsushilnikov96142 жыл бұрын
Network Inspector - хорошая штука, но было бы ещё хорошо, если бы он показывал ещё попытки отправки запроса на сервер (когда получаешь UnknownServerException - сервер лег или интернет плохой)
@radpem3 жыл бұрын
Классное видео, вот в таком формате топ
@BelokonRoman3 жыл бұрын
10:05 - тут даже больше поможет value class чем именнованные параметры. Потому что именованные параметры - это добровольное дело на вызывающей стороне, а если token обернуть в какой нибудь value class AccessToken(private val token: String),то на вызывающей стороне уже полюбому придется передавать нужный объект. Но при этом в скомпилированном коде будет просто строка
@AndroidBroadcast3 жыл бұрын
Только с ним должен уметь работать сериализатор
@BelokonRoman3 жыл бұрын
@@AndroidBroadcast в том то и прелесть value class-ов, что ничего дополнительно не надо, т.к. он в конечном счете бедут заменен на примитив, который не требует дополнительных сериализаторов\десереализаторов.
@AndroidBroadcast3 жыл бұрын
Не во всех случаях. Как раз-то в интерфейсе они могут остаться обычным классом. Посмотрите спецификацию их, там много случаев когда остаётся класс обёртка
@BelokonRoman3 жыл бұрын
@@AndroidBroadcast Я знаю. Но голая обертка над не null-овым аргументом всегда будет упрощена до примитива и при этом дает compile time гарантию, что туда не передадут ничего другого. В этом случае есть только выгоды и я не вижу никаких недостатков. А если вы уже начинаете наварачивать что то дополнительное в этоу обертку - то тогда надо уже переходить к обычному классу. Ну и если параметр может быть null - то тоже теряется вся прелесть этого value class-а. Это всего лишь вопрос правильного применения инструментов.
@DonkeyKong683 жыл бұрын
Конкретно в этом случае должно хватить и typealias
@arsenthompson3 жыл бұрын
Спаассииибо
@pasha090903 жыл бұрын
Спасибо
@mamyna_bysinka3 жыл бұрын
Стоить заметить что кешировпние доступно только для GET запросов, также стоит заметить что без хедеров кеша никакой кеш не будет доступный.
@bekaryssailaukul10063 жыл бұрын
Полезное видео, можно видео про как делать Refresh token ?
@AndroidBroadcast3 жыл бұрын
Универсальное нет, только если взять что у вас все сделано по зачёту OAuth 2.0, что я не встречал (
@LazyTram9113 жыл бұрын
Круто и как всегда вовремя) Друзья, а если в примере с апи-кеем он бы менялся со временем, то что делать тогда?
@AndroidBroadcast3 жыл бұрын
Надо просто сделать другую реализацию, где можно поменять ключ. Это не так сложно. Проблема в том что часть запросов может уйти со старым ключом
@kirillsushilnikov96142 жыл бұрын
Спасибо за видос. Немного для меня не ясно с chain. Если я добавлю несколько интерсепторов (в одном, скажем добавлю user-agent, в другом упомянутый apikey), то будет ли запрос отправлен на сервер несколько раз, обрастая параметрами?
@AndroidBroadcast2 жыл бұрын
Обработчик перехватывает запрос который происходит в OkHttp и изменяет его или просто отслеживает. Т.е. это не создаёт дополнительный запрос к оригинальному и количество перехватчиком может быть сколь угодным
@kirillsushilnikov96142 жыл бұрын
@@AndroidBroadcast спасибо большое!
@hievery96783 жыл бұрын
А если прокси и нетворк менеджер не подходят, то можно посмотреть в сторону hyperion. Его можно так интегрировать, что помимо его основных функций, будет перехватываться весь трафик и выводиться в приложении в специальное меню. Однако смотреть трафик с девайса - не самое удобное занятие, поэтому я бы это оставил как запасной вариант.
@itgik3 жыл бұрын
Спасибо за видео. А как добавить tab Network inspector? У меня его нет. Благодарю.
@AndroidBroadcast3 жыл бұрын
Он появился в Android Studio Bumble в том виде в котором я показал. До этого он был в секции "Profilers"
@Mazaxict113 жыл бұрын
Как правильно выбрать резмер кэша?
@AndroidBroadcast3 жыл бұрын
Общего правила нет и зависит от многих факторов: что вы туда будете класть, как много данных будет, как долго вы ожидаете его хранение в кэше, сколько место у вас у телефоне и пр.
@malchikovma3 жыл бұрын
В каких случаях может понадобиться использовать какие-то библиотеки кроме retrofit? Например, тот же OkHttp в чистом виде или Volley?
@AndroidBroadcast3 жыл бұрын
Например, когда нужно делать тонкую настройку Http запроса в runtime. Retrofit позволяет эффективно работать с REST, т.е. есть четкий набор вызовов.
@ИванКурак-п3е3 жыл бұрын
А будут видео как создавалось приложение для devtools?
@AndroidBroadcast3 жыл бұрын
Да, в ноябре буду кодить в прямом эфире
@AndreyDerkach83 жыл бұрын
в своих пет проектах использую ktor 😎
@AndroidBroadcast3 жыл бұрын
Насколько помню на JVM он работает поверх OkHttp ?
@danik0306993 жыл бұрын
Круто! А что если делать интеграцию после введения и до кода. В текущем варианте сильно сбивает с мысли/настроя.
@AndroidBroadcast3 жыл бұрын
Хорошое предложение
@WoffkaG943 жыл бұрын
Можно сделать обёртку для okhttp (работает при чистом okhttp, при retrofit+okhttp и в кмм ktor+okhttp engine/ktor+Ios engine). Возвращает или Single/suspend, если надо что-то одно (кэш или апи), или Observable/Flow, если надо оба или одно, но в каком-то определённом порядке (с флагом откуда данные пришли).
@AndroidBroadcast3 жыл бұрын
А зачем?
@WoffkaG943 жыл бұрын
@@AndroidBroadcast чтобы сразу показать контент, а не пустой экран (если у нас есть кэш и он не просрочился), и поверх него догрузить уже новый (если он есть). Конечно можно сделать всё нативно через рум, но тогда надо хендлить когда кэш просрочился, как-то хендлить размер кэша, как-то мержить квери для нескольких таблиц, если на одном экране несколько запросов и у них разные данные и другие заботы. Но если поиск или другие квери по БД не нужны, то зачем? С обёрткой код менять практически не надо будет, а так же сохраняется возможность комбайнить несколько запросов (если экран сложный и состоит из N запросов), флэтмапить их (при этом если хоть в одном запросе в цепочке "кэш" будет ошибка кэша, то вся цепочка проигнорится и будет грузить только апишная) или комбайнить кэш + не кэш (условно один поддерживает кэш, а второй нет, но мы хотим первый показать сразу и догружать, а второй просто догружать) без какой-либо мудрёной логики. Ретрофит по дефолту вернёт кэш, только если ошибка с интернетом (и при чём никак не скажет о том, что данные из кэша, а не из апи)
@kirillsushilnikov96143 жыл бұрын
Network Inspector очень похож на раздел Network профайлера. Это одно и то же или они все же различаются?
@AndroidBroadcast3 жыл бұрын
Да, просто в последней студии произошло перемещение раздела
@kirillsushilnikov96143 жыл бұрын
@@AndroidBroadcast А, вот в чем дело. Спасибо за ответ и за видео.
@kirillsushilnikov96143 жыл бұрын
По поводу размера кеша. Неужели сам Android на уровне ОС не ограничивает это?
@AndroidBroadcast3 жыл бұрын
Есть стандартный контролируемый кэш, но никто не мешает вне его содержание дать папку и туда что-то складывать
@kirillsushilnikov96143 жыл бұрын
@@AndroidBroadcast Да... Google прислушивается к пользователям, старается снизить уровень энергопотребления, работает над безопасностью и прочим. Но не может помешать разработчику завалить всю память в устройстве как раз навреное по этой причине, потому что функицонирование программы может нарушиться.
@user-not_defined3 жыл бұрын
Видео немного на 2:23 обрезалось
@anddev65053 жыл бұрын
Формат отличный, от содержания ожидал большей глубины
@MrJackBn3 жыл бұрын
Апикей он же токен, верно?
@AndroidBroadcast3 жыл бұрын
Это разные вещи, но работа с ними примерно одинаково осуществляется
@aratj3 жыл бұрын
можно сказать так , мы так же токены через интерцептеры для всех запросов выткаем
@ivanchepelkin63473 жыл бұрын
Про кэш: я правильно понял, что нужно создавать специальную директорию на андройде и тогда там это все хранить? как тогда можно сделать эту директорию безопасной, чтоб никто не имел доступа к вашему кэшу?
@AndroidBroadcast3 жыл бұрын
Нужно создавать эту директорию на internal storage. Можно использовать Context.cacheDir