- Устройство не сертифицировано Google в Play Маркет и других приложениях на Android — как исправить
- Причины ошибки «Устройство не сертифицировано» на Android
- Как исправить ошибку Устройство не сертифицировано Google
- Дополнительная информация
- Как снять блокировку Google на несертифицированном устройстве
- Как снять блокировку Google на несертифицированном устройстве
- Как правильно идентифицировать Android-устройства
- Зачем нужна идентификация
- Основные способы идентификации
- Использование аппаратных идентификаторов
- Генерация UUID с первым запуском
- Использование идентификаторов, предоставляемых системой
- Создание цифрового отпечатка (fingerprint) устройства
- Какой метод выбрать
Устройство не сертифицировано Google в Play Маркет и других приложениях на Android — как исправить
Указанная выше ошибка «Устройство не сертифицировано Google», чаще всего встречающаяся в Play Маркет не новая, но особенно часто с ней стали сталкиваться владельцы Android телефонов и планшетов начиная с марта 2018 года, поскольку Google что-то поменял в своей политики.
В этой инструкции подробно о том, как исправить ошибку Устройство не сертифицировано Google и продолжить использовать Play Маркет и остальные сервисы Google (Карты, Gmail и другие), а также кратко о причинах ошибки.
Причины ошибки «Устройство не сертифицировано» на Android
Начиная с марта 2018 года Google стал блокировать доступ не сертифицированных устройств (т.е. тех телефонов и планшетов, которые не проходили необходимую сертификацию или не отвечают каким-то требованиям Google) к сервисам Google Play.
С ошибкой можно было столкнуться и раньше на устройствах с кастомными прошивками, но сейчас проблема стала более распространена и не только на неофициальных прошивках, но и на просто китайских аппаратах, а также в эмуляторах Android.
Таким образом Google своеобразно борется с отсутствием сертификации на дешевых Android устройствах (а для прохождения сертификации они должны соответствовать конкретным требованиям Google).
Как исправить ошибку Устройство не сертифицировано Google
Конечные пользователи могут самостоятельно зарегистрировать свой не сертифицированный телефон или планшет (или устройство с кастомной прошивкой) для личного использования на сайте Google, после чего ошибка «Устройство не сертифицировано Google» в Play Маркет, Gmail и других приложениях появляться не будет.
Для этого потребуется выполнить следующие шаги:
- Узнайте Google Service Framework Device ID своего Android устройства. Это можно сделать, например, с помощью разного рода приложений Device ID (есть несколько таких приложений). Скачать приложение с неработающим Play Маркет можно вот такими способами: Как скачать APK с Play Маркет и не только. Важное обновление: на следующий день после написания этой инструкции Google для регистрации стал требовать другой GSF ID, не содержащий букв (а приложений, которые его выдавали бы, я не нашел). Посмотреть его можно с помощью командыили, если на вашем устройстве есть Root-доступ, с помощью менеджера файлов, способного просматривать содержимое баз данных, например, X-Plore File Manager (нужно открыть в приложении базу данных /data/data/com.google.android.gsf/databases/gservices.db на вашем устройстве найти Value для android_id, не содержащее букв, пример на скриншоте ниже). О том, как использовать команды ADB (если нет root-доступа) можно прочесть, например, в статье Установка кастомного рекавери на Android (во второй её части показывается запуск команд adb).
- Зайдите под своей учетной записью Google на сайт https://www.google.com/android/uncertified/ (можно сделать и с телефона и с компьютера) и введите полученный ранее Device ID в поле «Идентификатор Аndroid».
- Нажмите кнопку «Регистрация».
После регистрации приложения Google, в частности Play Маркет, должны работать как и прежде без сообщений о том, что устройство не зарегистрировано (если это не произошло сразу или появились другие ошибки, попробуйте очистить данные приложения, см. инструкцию Не скачиваются приложения Android из Play Маркет).
Статус сертификации Android устройства при желании можно посмотреть следующим образом: запустите Play Маркет, откройте «Настройки» и обратите на последний пункт списка настроек — «Сертификация устройства».
Надеюсь, инструкция помогла решить проблему.
Дополнительная информация
Существует ещё один способ исправления рассматриваемой ошибки, однако он работает для конкретного приложения (Play Маркет, т.е. ошибка исправляется только в нем), требует Root-доступа и потенциально опасен для устройства (выполняйте только на свой страх и риск).
Суть его в замене содержимого системного файла build.prop (находится в system/build.prop, сохраните копию оригинального файла) следующим (замену можно произвести с помощью одного из файловых менеджеров с поддержкой Root-доступа):
- Используйте следующий текст для содержимого файла build.prop
- Очистите кэш и данные приложений Play Маркет и Сервисы Google Play.
- Зайдите в меню рекавери и очистите кэш устройства и ART/Dalvik.
- Перезагрузите телефон или планшет и зайдите в Play Маркет.
Вы можете продолжить получать сообщения о том, что устройство не сертифицировано Google, но приложения из Play Маркет будут скачиваться и обновляться.
Однако, рекомендую именно первый «официальный» способ исправления ошибки на вашем Android устройстве.
Источник
Как снять блокировку Google на несертифицированном устройстве
Компания Google официально объявила о начале блокировки установки и запуска своих фирменных Android приложений на устройствах не имеющих сертификации.
Как сообщает Google:
«Путем сертификации, которую проводит компания Google, производители подтверждают безопасность устройств Android с предустановленными приложениями Google и правильную их работу. Если вы не можете добавить аккаунт Google на устройство Android, скорее всего, его программное обеспечение не прошло тесты на совместимость или производитель не передал результаты тестирования в Google. Это значит, что устройство не сертифицировано и может быть небезопасно».
Теперь устройства, которые не были сертифицированы Google и прошивки которых (заводские или кастомные) были созданы после 16 марта 2018 года будут отклонять попытки входа в учетную запись Google на этапе начальных настроек или установки на них фирменных приложений Google с выдачей соответствующего сообщения:
Как узнать, сертифицирован ли ваш смартфон, планшет или другое Android устройство компанией Google?
Очень просто. Для этого вам нужно сделать следующее:
1. Запустить приложение Play Маркет
2. Открыть его главное меню (боковая шторка)
3. Выбрать здесь раздел «Настройки»
4. Опуститься к самому нижнему пункту с наименованием «Сертификация устройства»
Если в нем вы видите надпись «Не сертифицировано», это означает, что либо производитель вашего устройства не сертифицировал его в Google, либо на нем установлена альтернативная (кастомная) прошивка.
К счастью, одна из самых популярных кастомных прошивок – LineageOS, похоже, не попала в «черный список» и её пользователи, как обычно, смогут пользоваться приложениями Google установленными из набора Gapps, apk файлов или Play Maркет.
Что делать, если вы не можете войти в аккаунт Google и установить приложения Google на несертифицированном устройстве?
Как снять блокировку Google на несертифицированном устройстве
Чтобы снять блокировку связанную с отсутствием сертификации вам нужно проделать следующие действия:
1. Для начала вам нужно узнать идентификатор фреймворка сервисов Google (Google Services Framework ID).
Сделать это можно с помощью приложения Device ID, которое имеется в Google Play Маркет и которое вы можете установить из APK файла скачанного отсюда. (Само собой, при этом Сервисы Google Play должны быть установлены на вашем устройстве)
2. Запустив приложение перепишите номер во втором пункте списка под заголовком Google Services Framework (GSF):
3. Перейдите на сайт Google по этому адресу, где вам будет предложено войти в свой аккаунт
4. На открывшейся странице введите полученный с помощью приложения Device ID код в поле «Идентификатор Android» и нажмите на кнопку «Регистрация»:
Источник
Как правильно идентифицировать Android-устройства
Всем привет! Если вам нужно создать уникальный и стабильный идентификатор Android-устройства для использования внутри приложения, то вы наверняка заметили тот хаос, который присутствует в документации и в ответах на stackoverflow. Давайте рассмотрим, как решить эту задачу в 2020 году. О том, где взять идентификатор, стойкий к переустановкам вашего приложения, и какие могут быть сложности в будущем — в этом кратком обзоре. Поехали!
Зачем нужна идентификация
В последнее время обсуждения конфиденциальности пользовательских данных стремительно набирают популярность. Возможно, это спровоцировано ростом выручки рекламных гигантов. Возможно, под этими обсуждениями скрывается обеспокоенность монополиями, которые идентифицируют пользователей и их устройства. Так, Apple, борясь со слежкой и ограничивая всем разработчикам использование IDFA, в то же самое время нисколько не ограничивает его себе. Что можно сказать точно: процесс идентификации пользователя приложения для разработчиков усложнился.
В задачах, опирающихся на идентификацию, встречаются: аналитика возвратов, персонализация контента и рекламы, предотвращение мошенничества.
Среди последних можно выделить несколько актуальных проблем:
Общие аккаунты в сервисах с платной подпиской или уникальным платным контентом. Только представьте сколько теряют сервисы вроде Netflix или Coursera от того, что пользователи заводят один аккаунт на нескольких человек.
Обе проблемы ведут либо к потере выручки, либо к репутационным потерям. Надежность их решения напрямую зависит от надежности идентификации устройств.
Основные способы идентификации
Использование аппаратных идентификаторов
Устаревший и нежизнеспособный в настоящее время способ. Google хорошо поработала над тем, чтобы закрыть доступ к ним, поскольку они не меняются даже после сброса к заводским настройкам. Среди таких идентификаторов:
В настоящее время они недоступны без явного запроса разрешений. Более того, если приложению нужно ими пользоваться, оно может не попасть в Play Market. Оно должно основным функционалом опираться на эти разрешения, иначе будут трудности с прохождением ревью. Поэтому сейчас эта опция доступна приложениям для работы со звонками или голосовым ассистентам.
Такие идентификаторы не меняются после сброса к заводским настройкам, и здесь кроется неочевидный недостаток: люди могут продавать свои устройства, и в таком случае идентификатор будет указывать на другого человека.
Генерация UUID с первым запуском
Данный способ схож с использованием cookie: создаем файл со сгенерированной строкой, сохраняем его в песочнице нашего приложения (например с помощью SharedPreferences), и используем как идентификатор. Недостаток тот же, что и у cookie — вся песочница удаляется вместе с приложением. Еще она может быть очищена пользователем явно из настроек.
При наличии у приложения разрешений к хранилищу вне песочницы можно сохранить идентификатор где-то на устройстве и постараться поискать его после переустановки. Будет ли в тот момент нужное разрешение у приложения — неизвестно. Этот идентификатор можно использовать как идентификатор установки приложения (app instance ID).
Использование идентификаторов, предоставляемых системой
В документации для разработчиков представлен идентификатор ANDROID_ID. Он уникален для каждой комбинации устройства, пользователя, и ключа, которым подписано приложение. До Android 8.0 идентификатор был общим для всех приложений, после — уникален только в рамках ключа подписи. Этот вариант в целом годится для идентификации пользователей в своих приложениях (которые подписаны вашим сертификатом).
Существует и менее известный способ получить идентификатор общий для всех приложений, независимо от сертификата подписи. При первичной настройке устройства (или после сброса к заводским) сервисы Google генерируют идентификатор. Вы не найдете о нем никакой информации в документации, но тем не менее можете попробовать код ниже, он будет работать (по состоянию на конец 2020 года).
Добавляем строчку в файл манифеста нужного модуля:
И вот так достаем идентификатор:
В коде происходит следующее: мы делаем запрос к данным из определенного ContentProvider-a, что поставляется с сервисами Google. Вполне возможно, что Google закроет к нему доступ простым обновлением сервисов. И это даже не обновление самой операционки, а пакета внутри нее, т.е. доступ закроется с обычным обновлением приложений из Play Market.
Но это не самое плохое. Самый большой недостаток в том, что такие фреймворки, как Xposed, позволяют с помощью расширений в пару кликов подменить как ANDROID_ID, так и GSF_ID. Подменить локально сохраненный идентификатор из предыдущего способа сложнее, поскольку это предполагает как минимум базовое изучение работы приложения.
Приложение Device ID Changer в связке с Xposed позволяет подменять практически любой идентификатор. В бесплатной версии — только ANDROID_ID
Создание цифрового отпечатка (fingerprint) устройства
Идея device-fingerprinting не новая, и активно используется в вебе. У самой популярной библиотеки для создания отпечатка — FingerprintJS — 13 тысяч звезд на GitHub. Она позволяет идентифицировать пользователя без использования cookie.
Рассмотрим идею на примере (цифры взяты приблизительные для иллюстрации).
Возьмем ежедневную аудиторию какого-нибудь Android-приложения. Допустим она составляет 4 миллиона. Сколько среди них устройств марки Samsung? Гораздо меньше, примерно 600 тысяч. А сколько среди устройств Samsung таких, что находятся под управлением Android 9? Уже около 150 тысяч. Выделим среди последних такие, что используют сканер отпечатков пальцев? Это множество устройств еще меньше, ведь у многих планшетов нет сканера отпечатков пальцев, а современные модели опираются на распознавание лица. Получим 25000 устройств. Добавляя больше условий и получая больше информации, можно добиться множеств малых размеров. В идеальном случае — с единственным элементом внутри, что и позволит идентифицировать пользователя. Чем больше пользователей можно различить, тем выше энтропия этой информации.
Среди основных источников информации в Android, доступных без пользовательских разрешений, можно выделить аппаратное обеспечение, прошивку, некоторые настройки устройства, установленные приложения и другие.
Обычно всю добытую информацию хешируют, получая цифровой отпечаток. Его и можно использовать в качестве идентификатора.
Из достоинств метода — его независимость от приложения (в отличие от ANDROID_ID), поскольку при одинаковых показаниях с источников отпечатки будут одинаковыми. Отсюда же вытекает первый недостаток — разные устройства с некоторой вероятностью могут иметь одинаковый отпечаток.
Еще одна особенность отпечатка — не все источники информации стабильны. Например, установленные приложения дадут много энтропии. Возьмите устройство друга, и проверьте, одинаков ли у вас набор приложений. Скорее всего — нет, к тому же приложения могут устанавливаться и удаляться почти каждый день.
Таким образом, метод будет работать при правильном соотношении стабильности и уникальности источников энтропии.
Какой метод выбрать
Итак, мы рассмотрели доступные способы идентификации. Какой же выбрать? Как и в большинстве инженерных задач, единственного правильного решения не существует. Все зависит от ваших требований к идентификатору и от требований к безопасности приложения.
Разумный вариант — использовать сторонние решения с открытыми исходниками. В этом случае за изменениями в политике конфиденциальности будет следить сообщество, вовремя поставляя нужные изменения. За столько лет существования проблемы до сих пор нет популярной библиотеки для ее решения, как это есть для веба. Но среди того, что можно найти на android-arsenal, можно выделить две, обе с открытым исходным кодом.
Android-device-identification — библиотека для получения идентификатора. Судя по коду класса, ответственного за идентификацию, используются аппаратные идентификаторы, ANDROID_ID, и цифровой отпечаток полей из класса Build. Увы, проект уже 2 года как не поддерживается, и в настоящий момент скорее неактуален. Но, возможно, у него еще будет развитие.
Fingerprint-android — совсем новая библиотека. Предоставляет 2 метода: getDeviceId и getFingerprint. Первый опирается на GSF_ID и ANDROID_ID, а второй отдает отпечаток, основанный на информации с аппаратного обеспечения, прошивки и некоторых стабильных настроек устройства. Какая точность у метода getFingerprint — пока неясно. Несмотря на это библиотека начинает набирать популярность. Она проста в интеграции, написана на Kotlin, и не несет за собой никаких зависимостей.
В случае, когда импортирование сторонних зависимостей нежелательно, подойдет вариант с использованием ANDROID_ID и GSF_ID. Но стоит следить за изменениями в обновлениях Android, чтобы быть готовым к моменту, когда доступ к ним будет ограничен.
Если у вас есть вопросы или дополнения — делитесь ими в комментариях. А на этом все, спасибо за внимание!
Источник