Опубликованное приложение в Play Store не может обмениваться данными с Google Maps API и Facebook API.

Я создал подписанный APK с помощью Android Studio и добавил в консоль разработчика Google и консоль Facebook свой отпечаток SHA1 и относительные ключи API в своем приложении. Все работает хорошо, если я загружаю свой подписанный apk через USB, после установки API карт и facebook API работают хорошо. Если я загружаю тот же apk в Play Store, когда я пытаюсь войти в систему через Facebook, он говорит: «Неверный хэш ключа. Хеш ключа blablabla не совпадает ни с одним из сохраненных ..». Поэтому, если я войду без Facebook, я даже не смогу получить свои карты Google; это наводит меня на мысль, что apk, загруженный в магазин игр, меняет его отпечаток пальца или что-то в этом роде. Я проверил все материалы на Android Developers и Stackoverflow, но не могу заставить его работать, потому что странно то, что этот подписанный apk-релиз работает хорошо, пока я не загружу его в Play Store.


person exrezzo    schedule 21.06.2017    source источник
comment
Для Facebook вам нужен хэш ключа разработчика и хэш ключа выпуска. Взгляните на эту ссылку: developers.facebook.com/docs /андроид/   -  person Ruben Aalders    schedule 21.06.2017
comment
посмотрите мой ответ для карты Google. Вам нужно изменить SHA-1, сгенерированный Google Play, пожалуйста, найдите новый SHA-1 в своей игровой консоли и загрузите его в API карты Google, и он работает как шарм.   -  person Andy Developer    schedule 21.06.2017
comment
Вы используете Firebase?   -  person Gopal    schedule 21.06.2017


Ответы (6)


Вдохновленный @Andy Developer, я смог отобразить карту после того, как мое приложение было загружено в Google Play. Это были шаги:

  1. Загрузите свое приложение в Google Play (подписанный APK-файл)
  2. После отправки и утверждения приложения выберите его в консоли Google Play.
  3. Перейдите в раздел Инструменты разработки -> Управление версиями -> Подписание приложений.

Подписание приложений в Google Play Console

  1. Скопируйте первый сертификат SHA-1, выданный Google Play после загрузки приложения.
  2. Перейдите в Google Console и выберите свой проект.
  3. Выберите свой API-ключ, ограничьте свой ключ и вставьте SHA-1 после имени пакета.

Вставьте SHA-1 в консоль Google

  1. Нажмите Сохранить, подождите пару минут. и ваше приложение должно показывать Карты Google.
person ymerdrengene    schedule 11.08.2017

Вот ответ, почему вы не видите Карту Google.

Недавно я загрузил APK в магазин Google Play и столкнулся с той же проблемой после проверки консоли Play. Я нашел решение этой проблемы.

У них нет проблем с вашим ключом, но проблема с вашим SHA-1. Вы подписали свой APK с помощью SHA-1, это нормально, а затем загрузили APK, это тоже нормально.

Но согласно новому обновлению для Play Console, когда вы подписываете свой APK с помощью SHA-1 и загружаете APK, он подписан только вами, но согласно новому обновлению он также подписывается Google Play для большей безопасности. Посмотрите здесь часть раздела Google Play:

С помощью подписи приложения Google Play: вы подписываете свое приложение своим ключом загрузки. Затем Google проверяет и удаляет подпись ключа загрузки. Наконец, Google повторно подписывает приложение с помощью исходного ключа подписи приложения, который вы предоставили, и доставляет ваше приложение пользователю.

Вы можете найти документацию здесь.

Теперь ответ на ваш вопрос. После успешной загрузки APK вы можете видеть, что в разделе с двумя SHA-1 1-й SHA-1 создан Google самостоятельно, а 2-й SHA-1 это ваше.

Поэтому просто скопируйте Google SHA-1 и вставьте его в свою консоль, где вы сгенерируете ключ Google Map API.

person Andy Developer    schedule 21.06.2017
comment
Спасибо чувак ! Я ломал голову 3 дня, пытаясь понять это. Несмотря на то, что было множество ответов с просьбой изменить ключ sha1, это было четким, ясным и точным. Спасибо за вашу помощь. - person user669444; 12.07.2017
comment
@AndyDeveloper Спасибо, чувак ... ты действительно спас меня. Я буквально удалил свой проект из Firebase и Google Console, воссоздал его и снова настроил, но это не имеет никакого значения. Нагревается до вашего ответа. - person Purvik Rana; 03.09.2017
comment
@AndyDeveloper, это мне очень помогает, спасибо. - person Abhishek Pandya; 05.09.2017
comment
Должен сказать, ты спас мне жизнь :D - person Hardik Patel; 31.10.2017
comment
Можете ли вы указать мне, где я могу найти этот Google SHA-1? Это в консоли Google? - person Sandra; 26.01.2018
comment
ты мой герой :) - person Appyx; 21.02.2018

Я, наконец, решил, проблема, вероятно, заключалась в том, что файл google_maps_api.xml, предоставленный API, не был загружен в выпуске, поэтому i

я сделал так:

buildTypes {
    debug {
        manifestPlaceholders = [mapsKey: "AIzaSyB8o9KzQ5YN8U8AFS************"]
    }
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        manifestPlaceholders = [mapsKey: "AIzaSyApLacqgkdIR7uEpcf*****************"]
    }
}

а затем в моем AndroidManifest

<meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="${mapsKey}" />

Ссылка: https://stackoverflow.com/a/33917692/3235560

затем я зарегистрировал 2 разных ключа, каждый с правильным отпечатком sha1, один отладочный, а другой предоставленный консолью Google Play (не сертификат загрузки, а другой, сгенерированный Google).

Очень-очень большое спасибо Zuhad и Andy Developer за вдохновение.

person exrezzo    schedule 21.06.2017

Типы сборки отладки и выпуска вашего приложения подписываются двумя разными ключами.

Вам необходимо зарегистрировать оба ключа в Google Maps и Facebook, чтобы они разрешили доступ к своим сервисам.

person Robert Estivill    schedule 21.06.2017
comment
Это то, что я сделал. Я также загрузил из консоли игрового магазина сертификат развертывания и выполнил следующую команду cat deployment_cert.der |openssl sha1 -binary | openssl base64, и она дала мне ключ API для входа в Facebook, который теперь работает, но я не могу заставить работать Карты. В файл под /app/src/release/res/values/google_maps_api.xml я добавил ключ, предоставленный из консоли Карт, в котором я также зарегистрировал отпечаток sha1 из моего собственного сертификата (сгенерированный из студии Android) и отпечаток sha1 из консоль play store, но она не работает - person exrezzo; 21.06.2017
comment
Использует ли ваша сборка отладки другой идентификатор приложения/пакета, чем сборка выпуска? В зависимости от этого вам может потребоваться добавить еще одну запись в конфигурацию ключа API карт Google. - person Robert Estivill; 21.06.2017
comment
Я генерирую ключ отладки API, он работает. Когда я интегрирую подписанный ключ API для публикации, он не работает, пожалуйста, помогите мне. После создания подписанного apk и еще раз сгенерируйте подписанный ключ API карт Google с подписанным файлом хранилища ключей и псевдонимом. - person Harsha; 26.02.2018

Да, очевидно, что карта не будет загружаться в подписанном APK.

Решение:

Когда вы генерируете ключ API в консоли Google API, вам необходимо ограничить ключ с помощью ключа SHA.

Но после создания подписанного APk вам нужно взять ключ SHA режима выпуска и добавить в консоль API для API< img src="https://i.stack.imgur.com/dhFb9.png" alt="введите здесь описание изображения">

Я прикрепил изображение, посмотрите

Надеюсь, поможет.

person Zuhad    schedule 21.06.2017
comment
дело в том что ключи апи для отладки и релиза разные, по факту я прописал в файле градла buildTypes { debug { manifestPlaceholders = [google_map_key: "AIzaSyB8o9KzQ5YN8U8AFSxbTJLheFiubF****"] } release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' manifestPlaceholders = [google_map_key: "AIzaSyApLacqgkdIR7uEpcf7EDuGvsQlgh*****"] signingConfig signingConfigs.config } - person exrezzo; 21.06.2017
comment
даже если я добавлю, как вы сказали, для каждого ключа как отладку sha1, так и выпуск sha1, это не сработает - person exrezzo; 21.06.2017
comment
Лучше создайте новый ключ API и попробуйте реализовать. Я надеюсь, что только ключ API - это решение. - person Zuhad; 21.06.2017

Чтобы Facebook сгенерировал хэш-ключ, используйте следующий код:

try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "YOUR PACKAGE NAME",
                PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (PackageManager.NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }

Как только вы получите хэш-код, вставьте его в консоль разработчика Facebook и двигайтесь вперед.

Надеюсь, поможет:)

person Zuhad    schedule 21.06.2017