Вчера чат-бот с искусственным интеллектом ChatGPT написал за меня Android приложение! Это очень примитивное приложение, но оно компилируется, запускается и работает. Но как он это сделал? С первой попытки или пришлось долго сидеть и мучить его?
Кратко про ChatGPT
В ноябре 2022 года компания OpenAI запустила новый чат-бот с искусственным интеллектом ChatGPT, который уже успел наделать немало шума. Пока главные мировые СМИ рассуждают, заменит ли чат-бот с AI людей (The Guardian, New York Times), ChatGPT уже пишет качественные эссе и сценарии ситкомов. Ну и наверное все, кто заходит на StackOverflow, уже успели увидеть баннер о том, что ответы от ChatGPT запрещены на платформе.
Я решил узнать, сможет ли ChatGPT написать простое Андроид приложение. Я знаю, что есть модель OpenAI Codex и проект Copilot, которые заточены именно на помощь разработчикам писать код. Но мне интересно, сможет ли именно чат-бот ChatGPT, написать приложение, в режиме реального общения в чате.
КАК УСКОРИТЬ ТЕЛЕФОН ЗА 1 МИНУТУ # САМЫЙ ПРОСТОЙ СПОСОБ УСКОРИТЬ ANDROID ТЕЛЕФОН
Придумываем задание для ChatGPT
Я выбрал такое задание: сделать приложение, которое выводит на экран 50 популярных акций фондового рынка и их цены.
И я решил придерживаться таких условий:
- Лично я не пишу ни строчки кода;
- Все что я делаю, это копи-паст того, что мне скажет чат-бот;
- Я выполняю различные настройки по указанию чат-бота (пройти Wizard в Android Studio, получить API ключ в сервисе и т.д.);
- Если появляются любые ошибки или баги, я спрашиваю у чат-бота и исправляю так, как он ответит.
Чего я хочу добиться:
- Код должен компилироваться;
- Приложение должно запускаться;
- В идеале, приложение должно отобразить на экране 50 популрных акций и их цены.
Как думаете, получится? Небольшой спойлер, вот что получилось.
Всё ли сделал бот на 100%? Пришлось ли мне написать самому код? Давайте посмотрим!
Формат
Проект на GitHub, это то самое Android приложение, которое написал ChatGPT.
Весь разговор с ChatGPT у меня занял 78 вопросов и ответов. По ссылке вы можете прочитать полный разговор со всеми ответами и примерами кода, который дал ChatGPT. В статье я буду сокращать, рассказывать про наиболее интересные, важные и удивительные на мой взгляд моменты. Ответы я буду приводить не всегда полные, потому что зачастую они были объемные.
Настройка, первые шаги.
Итак, я задал свой первый вопрос:
Q: I want to write an Android app that shows me 50 stock prices as a list from Yahoo API. How can I do it?
В своём первом вопросе я сразу сказал про Yahoo API, потому что это единственное API по акциям, о котором я что-либо слышал. В итоге так получилось даже интересней, потому что получить API ключ из ответа бота у меня не вышло, и позже я попросил другой API сервис. Но первый ответ меня уже удивил:
СРОЧНО ОТКЛЮЧИ ЭТИ НАСТРОЙКИ НА СВОЁМ ТЕЛЕФОНЕ! КАК СЛИВАЮТ ИНФОРМАЦИЮ ИЗ СМАРТФОНА?
A: To retrieve stock prices from Yahoo API and display them in an Android app, you will need to perform the following steps:
— Obtain an API key from Yahoo Finance API. You can sign up [. ]
— Set up an Android development environment. You will need to install [. ]
— Create a new Android project in Android Studio. This will give you [. ]
— Add the necessary dependencies to your app. You will need to add the following dependencies to your app’s build.gradle file:
implementation ‘com.squareup.retrofit2:retrofit:2.9.0’ implementation ‘com.squareup.retrofit2:converter-gson:2.9.0’
— Create a Java interface for the Yahoo Finance API. This interface will define [. ]
— Use Retrofit to make HTTP requests to [. ]
— Parse the response from the API and display [. ]
[. ]
В первом же ответе ChatGPT расписал все шаги, которые нужно сделать. Часть шагов были очень общие, а некоторые очень конкретные, как например добавить в зависимость Retrofit.
После того, как у меня не вышло получить API ключ в Yahoo по ссылке, которую он дал, я спросил:
Q: What public and free API I can use to get stocks price?
Одним из предложенных вариантов был Alpha Vantage, его я и выбрал. ChatGPT дал мне ссылку, где получить API ключ и по этой ссылке я получил ключ.
Дальше я старался всегда идти последовательно. Если бот давал мне список шагов, то я задавал вопросы по каждому шагу. В первом ответе были шаги про создание пустого проекта и Java Interface для API, эти вопросы я и задал.
Q: How can I create a new Android project in Android Studio with a basic structure?
A: [. ]Q: How should I start to build an android app to get stock prices from alphavantage and show it in the app?
A: [. ]Q: How to create a Java interface for the Alpha Vantage API?
A: [. ]
Java и Kotlin
На последний вопрос он рассказал, как создать Java interface и дал 3 куска кода:
Retrofit retrofit = new Retrofit.Builder() .baseUrl(AlphaVantageAPI.BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build(); AlphaVantageAPI alphaVantageAPI = retrofit.create(AlphaVantageAPI.class);
Я человек современный и знаю, что есть Kotlin, поэтому спросил:
Q: Can you repeat the same in Kotlin?
A: Certainly. Here is an example of how you can create a Kotlin interface for the Alpha Vantage API to retrieve stock prices: […]
На моё удивление бот повторил все 3 куска кода на Kotlin. Возможно, для знатоков AI это обычное дело, но я был впечатлен на этом моменте.
Я добросовестно скопипастил всё, что чат-бот мне написал. И вижу, что есть неизвестные классы.
Здесь и во всех будущих подобных ситуациях я прямо спрашивал:
Q: Can you show me StockResponse class?
A: Here is an example of a StockResponse class that you can use to parse the response from the Alpha Vantage API:
This StockResponse class has a single field called stock, which is a Stock object that contains the stock price and other information about the stock. [. ]
Класс Stock он тоже привел.
Когда бот просто скидывал мне кусок кода (например, создание Retrofit’а), то я спрашивал, а куда мне его положить:
Q: Where should I put the code with creating retrofit and calling getStockPrices?
В ответ обычно получал распечатку кода MainActivity, где бот заботливо кладет весь код в onCreate методе. Ну ок, ничего страшного, у нас цель — сделать работающее приложение!
Иногда бот давал код опять на Java, и приходилось его просить:
Q: Can you show me the same code in Kotlin?
И он отлично переводил всё тоже самое на Kotlin. В этом моменте меня начало поражать, как бот хранит в себе контекст. Он помнит, что за приложение мы пишем, какие там были классы ранее (StockResponse, Stock), какое API мы выбрали, как что называется и т.д.
Фиксим ошибочки
Но не всегда код был такой “идеальный”. Иногда бот давал код, где есть обращение к приватным методам или дублирование полей. По каждой проблеме я задавал вопрос и получал фикс, например:
Q: Why do I have an error «Cannot access ‘stock’: it is private in ‘StockResponse'»?
A: The error «Cannot access ‘stock’: it is private in ‘StockResponse'» means that you are trying to access a private field of the StockResponse class from outside of the class, [. ]
To fix this error, you will need to make the stock field visible to other classes by removing the private keyword [. ]
Here is an example of how you can modify the StockResponse class to make the stock field visible to other classes:
class StockResponse
Иногда приходилось переспрашивать и немного менять формулировку, но обычно это обходилось одним уточнением.
Далее я пошел спрашивать у бота про остальные ошибки компиляции: неизвестные ресурсы, неизвестные вьюхи и т.д.
Q: Ok. But what is «R.id.text_view»? I got error: «Unresolved reference: text_view». Can you fix it?
A: [. ]Q: I already have a TextView in my activity_main.xml generated by default. Should I replace it?
A: [. ]Q: Can you show me show my activity_main.xml should look like?
A: [. ]Q: But I still get error «Unresolved reference: text_view» in my MainActivity at «textView = findViewById(R.id.text_view)» line. Can you fix it?
A: [. ]
На данном этапе я на все вопросы получал отличные ответы, которые просто копипастил в проект.
Компилируется
Поправив все ошибки, я дошел до момента, когда проект начал успешно собираться. Делаем первый запуск и получаем:
java.lang.SecurityException: Permission denied (missing INTERNET permission?)
Решаем проблемы с помощью бота:
Q: When I try to launch the app It crashes and I see the error «java.lang.SecurityException: Permission denied (missing INTERNET permission?)». How to fix it?
После этого обязательно получаем NPE, тоже решаем с помощью бота вопросом:
Q: I have crash with error «java.lang.NullPointerException» on line «val price = stock. price». How can I fix it?
Бот предлагает решить проблему через if-чик.
if (stock != null) < val price = stock.price . >else < // Handle the case where the stock field is null textView.text = «Error: stock field is null» >
Не крашится
Ура! Приложение запускается и не крашится! Есть первый скриншот.
Видим ошибку про null и начинаем разбираться. Проблема в API модельках. На решение этих проблем ушло много вопросов, штук 10. Не буду здесь их все приводить, можете почитать в полной версии разговора. Но здесь я почувствовал, что боту сложно. Хотелось уже вмешаться и исправить одну строчку, чтобы всё заработало.
Но я решил добиться этого с помощью бота и сам подсказал ему, что он противоречит сам себе, и надо написать правильную SerializedName аннотацию у поля.
Q: But you contradict yourself. If JSON response is «Global Quote», and the name of the field in the StockResponse class is stock then we need to use SerializedName annotation.
A: I apologize for the confusion. You are correct that the SerializedName annotation is needed in this case to correctly map the «Global Quote» field in the JSON response to the stock field in the StockResponse class.
Here is the corrected code for the StockResponse class:
Эта подсказка сработала на отлично. Мне очень понравилось, что бот признал, что он был не прав, написал новую версию кода и даже извинился в конце. С одной стороны можно посчитать, что я немного считил, и бот не справился. С другой стороны, если рассматривать бота, как собеседника, коллегу (ведь именно такую роль хочет играть ChatGPT), то всё выглядит приемлемо: твой коллега немного запутался, ты ему подсказал и он всё решил.
После того, как мы поправили все ошибки с API модельками, наше приложение получает и отображает цену акций Apple.
Масштабирование
Я хвалил ChatGPT, что он круто запоминает контекст. Но здесь он забыл, что я изначально просил вывести список из 50 акций, а не одну. Что ж, поехали дальше масштабировать наше приложение.
Q: Now the app shows only one stock — Apple. I want to show the 50 most popular stocks. Can you show me how to do it?
A: To show a list of the 50 most popular stocks in your Android app, you will need to modify your code in several places. Here is an outline of the steps you can follow:
— Modify the Alpha Vantage API endpoint [. ].
— Modify the StockResponse and Stock classes[. ].
— Modify the getStockPrices() method to use the new API endpoint [. ].
— Modify the layout of the app [. ] Instead of using a single TextView element [. ] you will need to use [. ] RecyclerView or ListView, to display a list of stocks. You will also need to create a custom adapter to bind the data from the Stock objects to the layout elements in the list.
Бот перечислил все шаги, которые нужно сделать, включая обновление API классов, использование RecyclerView и создания адаптера для него. Не будем вдаваться в детали. С этой задачей мы тоже спрашились за последующие 10-15 простых вопросов.
Следующим камнем преткновения стала ошибка неверного API метода. Чат-бот предложил использовать метод TOP_100, чтобы получить акции. Такого метода в API не существует, может быть существовал ранее. Но бот не говорил, что это может быть причиной, пока я ему не показал JSON ответ API:
Q: I got response from alphavantage API: «»Error Message»: «This API function (TOP_100) does not exist.»»
A: It appears that the TOP_100 function is not a valid function in the Alpha Vantage API. This may be the cause of the error you are seeing.
To retrieve the top 100 stocks from the Alpha Vantage API, you will need to use a different function. Here are a few options you could consider: [. ]
В итоге мы с ботом решили запросить акции просто перебором:
Q: I need to get 50 popular stock prices from alphavantage API. How can I do it?
val stockSymbols = listOf(«AAPL», «MSFT», «GOOG», «FB», «AMZN», «JNJ», «XOM», «V», «PG», «JPM»)
Kotlin synthetics
Затем я наткнулся на любопытную историю. В одном из предыдущих ответов бот дал мне такой код:
import kotlinx.android.synthetic.main.stock_item.view.text_view . override fun onBindViewHolder(holder: StockViewHolder, position: Int) < val stock = stocks[position] holder.view.text_view.text = «$- $» >
И я столкнулся с проблемой дубликата классов.
Q: Now I got an error «Execution failed for task ‘:app:checkDebugDuplicateClasses’. A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable Duplicate class kotlinx.android.extensions.CacheImplementation found in modules kotlin-android-extensions-1.3.61 (org.jetbrains.kotlin:kotlin-android-extensions:1.3.61) [. ]». How can I fix it?
A: It looks like you have a conflict between different versions of the kotlin-android-extensions library in your project [. ]
Бот много раз предлагал перепроверить версии разных зависимостей, но ничего не помогало.
Даже с подсказками:
Q: No. It didn’t help. Maybe it is connected to “org.jetbrains.kotlin.android“ plugin?
Мне кажется, что дело в том, что в описании ChatGPT есть такое ограничение: Limited knowledge of world and events after 2021. Возможно, этот баг связан с тем, что более новых данных в модели еще нет, и баги связанные с актуализированием версий могут быть пока проблемой.
В итоге я просто попросил сделать как-то подругому:
Q: It did not help. I guess the problem with «kotlin-android-extensions». Can we use another approach?
A: If you are experiencing issues with the kotlin-android-extensions plugin, you can try using a different approach to access views in your layout XML file from your Kotlin code.
One alternative approach is to use the findViewById method to access views in your layout XML file. Here is an example of how you might do this: [. ]
О, findViewById — мне подходит!
Классика NetworkOnMainThreadException
Все баги пофикшены, запускаем, и получаем долгожданный NetworkOnMainThreadException . Идем в чат фиксить:
Q: Now I have an error «android.os.NetworkOnMainThreadException» in line «val stockResponse = alphaVantageAPI.getStockPrices(symbol = symbol).execute().body()». How can I fix it?
A: The error «android.os.NetworkOnMainThreadException» indicates that you are trying to perform a network operation [. ]
To fix this error, you need to perform the network operation on a background thread. In Android, you can use an AsyncTask or a Thread to run code on a background thread.
ChatGPT предлагает использовать AsyncTask или Thread. AsyncTask! Видимо, точно модель не обучена новым данным. Я выбрал Thread.
Несколько вопросов про дизайн не особо помогли.
Q: Can you do fancy design for this app?
A: [. ]Q: Can you give me example of a fancy theme for this app?
A: [. ]Q: Can you show theme.xml file?
A: [. ]Q: Can you show me how to do nice looking paddings and margins for this app?
A: [. ]
Разве, что паддинги добавил.
В итоге получаем вот такое приложение:
Мы получили список из 50-ти популярных акций фондового рынка и их цену. На скриншоте видно, что один из элементов “null — null”. Это Facebook. ChatGPT запросил данные по тикеру “FB”, но API такого не нашло, потому что теперь оно META.
Выводы
Я считаю, что можно уверенно говорить, что ChatGPT написал Андроид приложение! Оно компилируется, запускается и даже работает. Если вы ждали чуда, написание кода без ошибок, разделение на слои, архитектуру и прочее по списку — увы, пока еще AI не на таком уровне. Бот пихает всё в MainActivity, норовит писать на Java, предлагает использовать AsyncTask и далее по списку. Но за это я на него не в обиде.
Думаю, что дело не за горами.
Давайте проверим, выполнили ли мы все условия:
- Лично я не пишу ни строчки кода — ☑️
- Все что я делаю, это копи-паст того, что мне скажет чат-бот — ☑️;
- Я выполняю различные настройки по указанию чат-бота — ☑️;
- Если появляются любые ошибки или баги, я спрашиваю у чат-бота и исправляю так, как он ответит — ☑️, но с поправкой, что 2 раза я сам сильно подсказал боту. Поэтому здесь может быть половинчатая галочка.
Лично я был приятно поражен и удивлен результатом. Бот рассказал, как написать приложение, дал все нужные куски кода, помнит про контекст в течение разговора, реагирует за ответные замечания и вообще очень вежливый.
Подписывайтесь на канал Dodo Mobile, там мы коротко рассказываем о том, как разрабатываем мобильные приложения для нашей сети ресторанов быстрого питания.
Источник: habr.com
Что такое Роблокс, как скачать на Андроид и можно ли в нее играть детям
20:26 28-12-2022
DimonVideo
Одной из самых популярных игр на Андроиде прямо сейчас является Roblox. Причем ничего особенного в этом приложении нет: ни сногсшибательной графики, ни какого-то захватывающего сюжета. В Роблокс все завязано на общении, и, видимо, это послужило главной причиной ее популярности. В какой-то мере можно даже назвать ее социальной сетью с элементами игры.
На текущий момент у Roblox уже больше 500 миллионов загрузок только из Google Play и 26 миллионов отзывов. Не каждая игра может похвастаться такими показателями. Игра по графике чем-то отдаленно напоминает Майнкрафт. ПОДПИШИСЬ НА НАШ ДЗЕН, ЧТОБЫ ЧИТАТЬ КРУТЫЕ СТАТЬИ Поэтому подобное явление однозначно стоит испытать на себе.
Выясняем, что из себя представляет Roblox, как установить ее на Андроид-смартфоны и устройства Huawei, где нет Google Play, и разбираемся, как создать аккаунт внутри игры, если вы собираетесь играть в России. Что такое Роблокс Все немного угловатое, а управление не самое удобное.
Roblox — онлайн-игра, которая представляет из себя большое количество так называемых плейсов, отличающиеся друг от друга тем, что в них происходит. Например, в плейсе “Воровство пиратов” игроки делятся на четыре команды по цвету корабля, и побеждает та команда, которая полностью разрушит корабль конкурирующей команды. И таких активностей в игре огромное количество.
А в плейсе Adopt Me можно взять питомца и ухаживать за ним все время. В Tower Of Hell есть полоса препятствий, которую необходимо преодолеть. Вот так выглядят разные игровые плейсы. Если же хочется просто бродить и убивать время, то для вас есть, например, плейс Happy Land.
Суть в нем очень простая: исследуете город, красиво одеваетесь и просто тусуетесь и общаетесь с другими игроками. Вам просто необходимо создать свой персонаж и найти занятие себе по интересам. Причем для персонажа существует целый магазин различного реквизита. Здесь вы сможете найти костюмы, прически, внешний вид персонажей, анимации и даже эмоции.
Все это можно как скачать бесплатно так и купить за внутриигровую валюту, которая приобретается за реальные деньги. . ТАМ ТЫ СМОЖЕШЬ ПООБЩАТЬСЯ С ДРУГИМИ ЧИТАТЕЛЯМИ И ДАЖЕ НАШИМИ АВТОРАМИ Плейсы в игре могут создавать даже рядовые пользователи. Необходимо только освоить язык программирования Lua и начинайте творить то, что хочется именно вам.
Не рассчитывайте на какую-то обалденную графику. Здесь все завязано на том, чтобы как можно больше игроков могло установить Roblox на свое устройство. А так как возможности у всех отличаются, то и сама игра не особо требовательна. Подойдет на любое устройство. Даже самое недорогое.
Главное, чтобы был хороший интернет, ведь игра сетевая. У многих возникает вопрос, можно ли играть в Роблокс детям? В целом можно, но как и у любой другой игры есть плейсы, в которые заходить не стоит. Поэтому перед установкой приложения объясните своему ребенку какие плейсы подойдут для него.
Правда, в большинстве случаев понять, какой плейс действительно подходит детям, а какой нет, довольно трудно. Поэтому лучше попробуйте игру сами. Тогда донести эту информацию будет намного легче. Как играть в Роблокс Давайте посмотрим? как играть в Роблокс? на примере одного из самых популярных плейса Adopt Me: Находите в поиске Adopt Me и нажимаете кнопку «play».
В некоторых плейсах есть свое обучение. Проходите небольшое обучение по настройке внешнего вида персонажа и жилья.
Здесь пошагово объясняют, что надо делать.
Переходите в питомник и получаете там питомца и начинаете за ним ухаживать и совершать прочие необходимые действия. Погулять по локациям можно и здесь. При этом вам не просто придется тыкать на экран, а еще и перемещаться и выполнять задания, которые появляются у вас на дисплее.
В каждом плейсе происходят свои активности и выполняются свои задания. Скачать Роблокс бесплатно Теперь давайте разберемся, как установить Roblox на Андроид. Самый простой способ — это, конечно же, воспользоваться магазином приложений Google Play. Игра доступна даже для России и загрузить ее вы можете по этой ссылке без каких-либо проблем.
Но некоторые пользователи по известным только им причинам не хотят скачивать программы из Гуглового магазина. Тогда вы можете воспользоваться обычной установкой APK. На примере смартфона Xiaomi покажу, как это делается: Установка из неизвестных источников может в дальнейшем вам еще пригодиться.
Откройте настройки на вашем смартфоне и перейдите в раздел “Приложения”. Выберите пункт “Все приложения” и найдите браузер, через который вы планируете скачать установочный файл. В моем случае это Google Chrome. Пролистайте вниз и выберите “Установка из неизвестных источников”. Активируйте переключатель, чтобы система могла устанавливать загруженные через браузер приложения.
Откройте Google Chrome или тот браузер, которым вы пользуетесь и которому давали разрешение на установку, и перейдите по этой ссылке на APKPure. Скачайте установочный apk-файл. Нажмите на три точки в правом верхнем углу и разверните “Скачанные файлы”. Коснитесь загруженного файла и дождитесь, пока система установит игру.
Скачать Roblox из Google Play Скачать Roblox из APKPure ПОДПИШИСЬ НА ТЕЛЕГРАМ-КАНАЛ СУНДУК АЛИБАБЫ После этого в меню приложений у вас появится соответствующий ярлык, и можете спокойно начинать играть. Роблокс на Хуавей Если же у вас смартфон Huawei без сервисов Google и с магазином приложений AppGallery, то для вас все еще проще: На Huawei можно загрузить APK сразу со стороннего сайта прямо из App Gallery.
Откройте AppGallery и введите в поиске Roblox. Можете открыть самый первый результат в виде PWA и не устанавливать на свой смартфон клиент игры в принципе. А можете пролистать до результатов поиска Petal Search и загрузить установочный APK оттуда. AppGallery самостоятельно установит скачанный файл, и вам не придется раздавать никакие дополнительные разрешения.
Huawei как следует позаботилась о своих пользователях, поэтому установить Roblox на их смартфоны тоже не составляет никакого труда. Роблокс без установки Но можно использовать Роблокс и без установки отдельного клиента на любой смартфон: Роблокс можно использовать и как PWA. Перейдите на сайт Roblox.com.
Нажмите в самом низу страницы Continue in browser. Войдите под своим аккаунтом или создайте новый и начинайте играть прямо в браузере. Для удобства можно даже добавить ярлык на главный экран, просто нажав на три точки в правом верхнем углу. И тогда не придется каждый раз переходить на сайт. Достаточно будет просто нажать на иконку на рабочем столе.
Роблокс — создать аккаунт Но сразу после установки просто так начать играть не получится. Необходимо создать аккаунт. Даже с учетом того, что игра доступна в российском Google Play, у меня не получилось без VPN создать аккаунт. В какой-то момент даже показалось, что Роблокс не работает в России. Если у вас еще на смартфоне нет ни одного VPN клиента, скачайте из Google Play AdGuard VPN, и включите его.
Для регистрации в Роблокс необходимо сделать следующее: Для регистрации необходимо заполнить минимум полей. Включите VPN на вашем смартфоне. Запустите игру и нажмите кнопку “Регистрация”. Заполните все необходимые поля и создайте аккаунт. На этапе создания аккаунта вам и понадобится VPN.
Без него подключение к серверам не проходит. Решите задание с картами каждый раз выбирая одинаковые. Как только все успешно загрузится, вы можете переходить к выбору игровых комнат и настройке персонажа. Выключите VPN и играйте без него. В дальнейшем он вам не понадобится.
Игра будет запускаться без всяких проблем. ПОДПИШИСЬ НА НАШ ПУЛЬС. БУДЕШЬ УЗНАВАТЬ ВСЕ НОВОЕ САМЫМ ПЕРВЫМ Эти простые настройки позволят вам с головой погрузиться в одну из самых популярных игр для Андроид-смартфонов в мире. К большому сожалению, здесь тоже не обошлось без VPN, но возможно, что это просто глюк на моем устройстве, и вам повезет больше.
Если же Роблокс не заходит в аккаунт, то советую повторить вход в приложении со включенным VPN. Почти всегда это решает проблему.
Источник новости: androidinsider.ru
Источник: dimonvideo.ru