Не удалось загрузить карту. Ошибка связи с серверами Google. Вероятно, это проблема аутентификации

Я ищу все дни, и я не могу найти ответ...

все готово, но гугл карта по-прежнему не показывает фрагмент с вкладкой

Я проверяю, что уже включаю google map android v2 и правильный API_KEY

Я понятия не имею, что произошло!

изображение

Основная активность.java:

public class MainActivity extends FragmentActivity implements
        ActionBar.TabListener {

    SectionsPagerAdapter mSectionsPagerAdapter;

    ViewPager mViewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        String titles[] = { this.getString(R.string.title_around),
                this.getString(R.string.title_map),
                this.getString(R.string.title_favorite),
                this.getString(R.string.title_achievement), };

        final ActionBar actionBar = getActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        mSectionsPagerAdapter = new SectionsPagerAdapter(
                getSupportFragmentManager());

        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(mSectionsPagerAdapter);
        mViewPager
                .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
                    @Override
                    public void onPageSelected(int position) {
                        actionBar.setSelectedNavigationItem(position);
                    }
                });

        for (int i = 0; i < titles.length; i++) {
            actionBar.addTab(actionBar.newTab().setText(titles[i])
                    .setTabListener(this));
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction fragmentTransaction) {
        mViewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabUnselected(ActionBar.Tab tab,
            FragmentTransaction fragmentTransaction) {
    }

    @Override
    public void onTabReselected(ActionBar.Tab tab,
            FragmentTransaction fragmentTransaction) {
    }

    public class SectionsPagerAdapter extends FragmentPagerAdapter {

        public SectionsPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            // TODO 在這邊決定哪個位置要給什麼 View(Fragment)
            Fragment fragment = null;
            // TODO 建議先在之前就初始化好 4 個 Fragment
            switch (position) {
            case 0:
                fragment = new AroundFragment();
                break;
            case 1:
                fragment = new MapsFragment();
                break;
            case 2:
                fragment = new FavoriteFragment();
                break;
            case 3:
                fragment = new AchievementFragment();
                break;
            default:
                break;
            }

            return fragment;
        }

        @Override
        public int getCount() {
            return 4;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            // TODO 在這邊決定每一個 View 的 title
            switch (position) {
            case 0:
                return getString(R.string.title_around);
            case 1:
                return getString(R.string.title_map);
            case 2:
                return getString(R.string.title_favorite);
            case 3:
                return getString(R.string.title_achievement);
            }
            return null;
        }
    }

}

MapsFragment.java:

public class MapsFragment extends Fragment{
    static final LatLng NKUT = new LatLng(23.979548, 120.696745);
    private GoogleMap map;
    SupportMapFragment mMapFragment;
    public MapsFragment() {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.map_fragment,container, false);

        map = ((SupportMapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();

         mMapFragment = SupportMapFragment.newInstance();
         FragmentTransaction fragmentTransaction =
                 getFragmentManager().beginTransaction();
         fragmentTransaction.add(R.id.map,mMapFragment);
         fragmentTransaction.commit();

        return rootView;

    }
}

Map_fragment.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <fragment
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.SupportMapFragment" />

</RelativeLayout> 

Манифест.xml:

<!-- Google Map -->
<permission
        android:name="com.jertt.yummymap.permission.MAPS_RECEIVE"
        android:protectionLevel="signature"/>
<uses-permission android:name="com.jertt.yummymap.permission.MAPS_RECEIVE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<!-- The following two permissions are not required to use
     Google Maps Android API v2, but are recommended. -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

<!-- end -->
    <!-- Google Map API Key -->

    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="key" />

    <!-- end -->

Решение:

Я нашел решение!!!

Если вы используете закрытое хранилище ключей для применения API_KEY. Вы не можете загрузить и установить приложение с помощью eclipse.

Вам необходимо самостоятельно загрузить файл .apk на свое устройство и установить его!

Спасибо Tarsem и srikanth gr помогают!!


person JackWu    schedule 16.07.2013    source источник
comment
Вы добавили google play lib в свой проект????   -  person Srikanth Roopa    schedule 16.07.2013
comment
да, смотрите, я добавил imgur.com/tH5dzZc   -  person JackWu    schedule 16.07.2013
comment
Я нашел решение!!! Если вы используете закрытое хранилище ключей для применения API_KEY. Вы не можете загрузить и установить приложение с помощью eclipse. Вам необходимо самостоятельно загрузить файл .apk на свое устройство и установить его! Спасибо Tarsem и srikanth gr помогают!!   -  person JackWu    schedule 16.07.2013
comment
Какой пакет вы использовали в Google API, чтобы связать с ним ключ? У меня есть приложение с полноэкранным режимом работы, но моя версия с вкладками не работает. Я знаю, что мой ключ действителен из полноэкранной версии. Есть идеи?   -  person Marty Griffin    schedule 01.08.2013
comment
stackoverflow.com/a/22653551/1318946   -  person Pratik Butani    schedule 26.03.2014


Ответы (25)


похоже, у вас проблема с вашим API_KEY, который получен из Google API Access, поэтому проверьте свой API_KEY, отпечатки пальцев сертификата и имя пакета

также используйте это внутри <manifest>

<uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" >
    </uses-feature>

а также проверьте: <meta-data .... > должен быть внутри тега <application>


ПС.

1. Также попробуйте добавить следующее разрешение

<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>

2. After changing API key из AndroidManifest.xml Обязательно Clear Application Data

Чтобы очистить данные приложения:

Или Перейдите к Settings>Application Manager>Select Your Application > Click on Clear Data

Или Must Uninstall The Application до installing it ! Примечание Не делайте этого Re-install, если вы не Completely Uninstall the Application для того, чтобы clear its Data completely

person Tarsem Singh    schedule 16.07.2013
comment
О боже! Я нашел проблему!! - person JackWu; 16.07.2013
comment
Если вы используете закрытое хранилище ключей для применения API_KEY. Вы не можете загрузить и установить приложение с помощью eclipse. Вам нужно загрузить файл .apk и установить его самостоятельно! Спасибо Tarsem и srikanth gr помогают!! - person JackWu; 16.07.2013
comment
Ключевой частью для меня было то, что данные приложения должны быть очищены, если ключ API изменится. Спасибо! - person Ian Newson; 11.11.2013
comment
Для меня это было очень полезно, но лучше всего было очистить данные приложения с помощью: Перейдите в «Настройки»> «Диспетчер приложений»> «Выберите свое приложение»> Нажмите «Очистить данные». - person xarly; 13.12.2013
comment
Я пришел сюда с тем же вопросом. Проблема заключалась в том, что я изменил имя пакета своего приложения, но не отразил изменения в настройках ключа API в Google API Console. Аргх, раздражающая штука :) - person Drew; 03.10.2014

Столько времени потратил, слишком много похожих вопросов.

Я попытался добавить собственное разрешение, разрешение WIFI_STATE, но настоящая проблема была в данных приложения.

После того, как вы изменили ключ API в манифесте, вы ОБЯЗАТЕЛЬНО «очистите данные» своего приложения (или полностью переустановите его).

Это помогает мне, и я надеюсь, что этот пост поможет кому-то.

person Oleksii K.    schedule 30.07.2013

Моя проблема была решена добавлением разрешения в манифест:

<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
person G. Kh.    schedule 08.08.2013
comment
Невероятно, насколько нечетко пытаются понять, как некоторые компоненты работают в Android. Это кажется волшебством! Спасибо чувак за решение, оно мне очень помогло. - person the_dark_destructor; 04.12.2013
comment
Обратите внимание, что это разрешение больше не требуется с мая 2014 года. - person Anthony; 01.09.2014

У меня такая же проблема, и моя проблема заключалась в том, что я не активировал службу в консоли:

  1. Перейдите в консоль: https://code.google.com/apis/console/.
  2. Перейдите в раздел услуги.
  3. Включить Google Maps Android API v2
  4. Выполните все шаги в документации
person moskis    schedule 23.08.2013

Если у вас возникли проблемы с авторизацией, проверьте в Logcat имя вашего пакета. Если вы используете Android Studio, проверьте файл build.gradle. Когда файл содержит applicationIdSuffix '.dev'. Вы должны добавить .dev к имени вашего пакета.

э.и. имя пакета:

com.company.main

В консоли API напишите

...9S.ME.DA.FE;com.company.main.dev

person Serafins    schedule 12.09.2014
comment
Спасибо - не совсем проблема, но у меня был другой вариант сборки фиктивного сервиса, который привел к другому имени пакета. - person Tom; 23.09.2014
comment
Я тебя люблю! 3 дня искал решение и вы меня спасли! Спасибо, это решило мою проблему :) - person Valerio; 20.11.2014

Сделав все, что люди говорили, чтобы проверить мой манифест, добавить разрешения, создать новый ключ с помощью sha1 в eclipse и т. д., и это все еще не работает, я просто сделал:

adb uninstall com.example.hellomap

а затем снова запустить затмение. Похоже, устройство не получало абсолютно новых данных. Надеюсь это поможет.

person ibpetr    schedule 12.09.2013
comment
Спасибо за ваше крошечное, но мощное решение. ха-ха! У меня была такая же проблема, и я решил ее таким же образом. - person cmcromance; 13.09.2013
comment
Ой! Добавлю немного информации. Эта проблема возникла на Gingerbread, но не на ICS, JB. - person cmcromance; 13.09.2013

Я смог использовать ключ отладки и загрузить из eclipse. Мне не хватало следующего разрешения в моем AndroidManifest.xml

uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"
person Dave    schedule 26.10.2013

Изучив множество кейсов и успешно запустив карты, важно помнить о следующих вещах:

  • Используйте Android API 17, эмулятор стенда и проект
  • Ссылка на сервисы Google
  • Используйте поддержку Android, если это необходимо
  • Используйте следующий порядок в библиотеках: src, gen, google apis, поддержка Android, зависимости и частные библиотеки.
  • Используйте правильный ключ API
  • Удалите данные, переустановите приложение.
person pablodemora    schedule 30.07.2013

Я настроил множество сервисов, включая Google Maps API v2 (не Google Maps Android API v2), которые конфликтовали. После удаления нежелательного сервиса и генерации нового ключа, в том числе в манифесте, чистой установки, на устройстве появилась карта.

person Kulai    schedule 23.08.2013
comment
Мне не пришлось генерировать новые ключи. По крайней мере, не в режиме отладки/тестирования. ммв - person fishjd; 05.09.2013

Я исправил проблему, предоставив разрешение в манифесте

<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
person Pramod J George    schedule 13.12.2013

Я столкнулся с той же проблемой в Android Studio. Карты Google не будут отображаться при подключении к отладчику Android.

Я исправил это, добавив отпечаток SHA1 для хранилища ключей отладки, расположенного в ~/.android/debug.keystore. Я думаю, что это хранилище ключей создается по умолчанию (хотя и не уверен).

Следующая команда в Терминале работала, чтобы получить отпечаток SHA1:

keytool -list -v -keystore ~/.android/debug.keystore 

Когда он запрашивает пароль, ничего не вводите, просто нажмите Enter. (в моем случае сработало)

Добавьте этот отпечаток пальца в свой ключ API для приложений Android в консоли разработчика.

Ваше здоровье!

person Abdullah Umer    schedule 24.11.2014

В моем случае сработало то, что мне пришлось установить его через командную строку:

adb установить /path/to/app/MyApp.apk

person mt0s    schedule 23.08.2013

Все, что вам нужно сделать, это: использовать ключ отладки в вашем коде; удалить приложение; установите новое приложение с ключом отладки.

person Umberto    schedule 20.09.2013

В случае, если ничего (вышеупомянутое) не работает, есть большая вероятность, что вы используете неправильный файл debug.keystore для создания отпечатка пальца. Если на вашем компьютере есть несколько файлов debug.keystore, убедитесь, что вы используете правильный файл debug.keystore для создания отпечатка SHA1.

person Kaps    schedule 08.10.2013

Многие из них помогли мне, но главная проблема заключалась в том, что у меня не было правильной подписи. Я использую Xamarin и, следовательно, он не встроен в IDE, поэтому, когда я сгенерирую ключ с помощью keytool, он никогда не попадет в приложение. Мне пришлось добавить следующее в мой файл .csproj:

<PropertyGroup>
   <AndroidKeyStore>True</AndroidKeyStore>
   <AndroidSigningKeyStore>maps.keystore</AndroidSigningKeyStore>
   <AndroidSigningStorePass>android</AndroidSigningStorePass>
   <AndroidSigningKeyAlias>androiddebugkey</AndroidSigningKeyAlias>
   <AndroidSigningKeyPass>android</AndroidSigningKeyPass>
</PropertyGroup>
person user3591639    schedule 01.05.2014

Ошибка для меня заключалась в том, что я запускал конфигурацию отладки, когда только что добавил конфигурацию выпуска в консоль разработчиков Google. Итак, я выполнил следующие шаги:

  1. Получите sha1 для вашего хранилища ключей отладки, используя:

    keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android

  2. Перейдите на страницу https://console.developers.google.com и добавьте пакет sha1+.

  3. Добавьте свой API_KEY в файл AndroidManifest.xml.

person Israel Varea    schedule 13.08.2014

В IntelliJ... если вы уверены, что ваш ключ SHA1 правильный, API key не отсутствует,

Permission и любая настройка в Manifest верна.

Возможно, вам нужно щелкнуть правой кнопкой мыши на своей библиотеке Google-Play-Services-lib и снова скомпилировать ее.

Я сделал все, и это помогает мне.

person Jongz Puangput    schedule 20.08.2014

Моя самая странная ошибка, которую я сделал до сих пор, заключалась в получении кода SHA1 из debug.keystore.

Хотя у него нет пароля, но пароль был android

Не уверен, что это кому-нибудь поможет, но мне помогло. Кроме того, используйте полное имя пакета, вы можете найти его в файле исходного кода Java. Например, мой: com.example.erikas.mapsdemo ( выглядит так: package com.example.erikas.mapsdemo; )

Поэтому, когда вы пытаетесь получить ключ API, используйте ввод следующим образом:

XX:XX:XX:XX:XX:17:C9:22:BB:BD:7C:87:12:83:2D:XX:XX:XX:XX:XX;com.example.erikas.mapsdemo

Так что моей собственной ошибкой был неправильный код SHA1 и неправильный пакет. Но к счастью - разобрался после 2-х дней головной боли! :D

person Erikas    schedule 09.09.2014

При отладке мне нужно было добавить дополнительный ключ API для ~/.android/debug.keystore

Это хранилище ключей настраивается автоматически для вас, а пароль «android»?

person user3455805    schedule 03.10.2014

Я столкнулся с той же проблемой, у меня есть решение для этого, я попытался создать отладочный ключ API из другой учетной записи Google с тем же именем пакета. Шаг, чтобы устранить ошибку: 1. Удалите ненужный ключ API с тем же именем пакета в другой учетной записи Google. 2. Пожалуйста, поддерживайте генерацию ключа API в одной учетной записи для решения этой проблемы. Спасибо. Попробуй это.

person MohanRaj S    schedule 24.10.2014

Я застрял на этом вопросе около недели. Поэтому я начал использовать настоящее устройство. Но однажды я пытаюсь установить хранилище ключей отладки Custon (Eclipse, Window -> Preferences -> Android -> Build -> хранилище ключей отладки Cusom) таким же, как и по умолчанию. И все стали работать. Конечно, сначала у меня есть ключ на гугл-консоли.

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

person patriot10    schedule 05.12.2014

Я столкнулся с той же проблемой. Я пробовал несколько решений - ни одно не сработало для меня. Мне помогло создание нового ключа API и ОЧИСТКА ДАННЫХ службы Google Play на моем устройстве.

person QuenelleMan    schedule 30.04.2015

Контрольный список: 1. Проверьте наличие разрешения в манифесте Android для READ_GSERVICES.

‹ использует разрешение android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>

  1. Очистите данные приложения, если вы внесли какие-то изменения в манифест.

  2. Проверьте debug.keystore в папке .android.

    Моя проблема была решена путем замены debug.keystore, расположенного в папке .android, на debug.keystore вашего приложения.

person user3804372    schedule 05.05.2015
comment
Уже есть очень принятый ответ, который охватывает то, что вы сказали. - person namezero; 05.05.2015

Я также столкнулся с той же проблемой при использовании Android Studio.

Я сослался на все решения, но все равно это не сработало.

Проблема заключалась в том, что у меня есть changed мой package name после первоначальной настройки проекта. Изменение имени пакета отразилось в Manifest, но в файле build.gradle осталось старое имя пакета.

Как только у меня есть changed package name в build.gradle, карта начинает работать.

Надеюсь, это поможет кому-то.

person akshay    schedule 15.05.2015

У меня такая же проблема. Я проверил журналы, и там было сказано: «Аутентификация не удалась на сервере». Итак, я проверил www.console.developers.google.com и обнаружил, что имя пакета неверно. (Это имя пакета было написано автоматически) Я написал это правильно, и все работает хорошо.

person Misho Zhghenti    schedule 03.01.2016