无法加载地图。 联系Google服务器时出错。 这可能是一个身份validation问题

我search整天,我找不到答案…

一切准备就绪,但谷歌地图仍然不能显示在选项卡上的片段

我检查我已经打开谷歌地图android v2和正确的API_KEY

我不知道发生了什么事!

IMG

MainActivity.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 build議先在之前就初始化好 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> 

的Manifest.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 --> 

解:

我find了解决scheme!

如果您使用私钥存储来应用API_KEY。 你不能用eclipse上传和安装应用程序。

您需要自行上传.apk文件到您的设备并安装它!

谢谢Tarsem和srikanth gr帮助!

听起来您的API_KEY是从Google API Access获取的 ,因此您的API_KEY证书指纹软件包名称

也可以在<manifest>使用这个

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

并validation: <meta-data .... >应该在<application>标签内


PS。

1.也可以尝试添加以下权限

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

2.AndroidManifest.xml After changing API key必须 Clear Application Data

清除应用程序数据:

转到Settings>Application Manager>Select Your Application > Click on Clear Data

或者installing it !之前Must Uninstall The Application installing it ! 注意除非Completely Uninstall the Application才能clear its Data completely否则不要Re-install

我花了这么多时间,有太多类似的问题。

我试图添加自己的权限,WIFI_STATE权限,但真正的问题是在应用程序数据。

在清单中更改API密钥后, 必须 “清除”应用程序的数据(或者完全重新安装)。

这有助于我,我希望这篇文章能帮助别人。

我的问题是通过添加清单的权限解决的:

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

我有同样的问题,我的问题是,我没有在控制台中激活服务:

  1. 转到控制台: https : //code.google.com/apis/console/
  2. 转到服务部分
  3. 启用Google Maps Android API v2
  4. 按照documentacion中的所有步骤操作

如果您对auth有问题,请在Logcat中检查您的软件包名称。 如果您使用Android Studio,请检查您的build.gradle 。 当文件包含applicationIdSuffix '.dev' 。 您应该将.dev添加到您的包名称。

ei包名是:

com.company.main

在API控制台写入

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

做了所有人都说的喜欢检查我的清单,添加权限,在eclipse中使用sha1制作一个新的密钥等,它仍然不工作,我只是做了:

 adb uninstall com.example.hellomap 

然后再次运行eclipse。 这似乎是设备没有得到全新的数据。 希望这可以帮助。

我能够使用debugging密钥,并从日食加载。 我在AndroidManifest.xml错过了以下权限

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

在审查了很多案例并成功运行地图之后,这些事情很重要:

  • 使用android api 17,模拟器和项目
  • 引用google服务
  • 如果需要使用android支持
  • 在库中使用以下顺序:src,gen,google apis,android支持,依赖项和私有库
  • 使用正确的API密钥
  • 清除数据,重新安装应用程序。

我configuration了许多服务,包括Google Maps API v2(而不是Google Maps Android API v2),这些服务存在冲突。 删除不需要的服务并生成一个新的密钥,包括在清单中,干净的安装,地图出现在设备上。

我通过在清单中给予许可来解决这个问题

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

我在Android Studio中面临同样的问题。 当连接到androiddebugging器时,Google地图不会显示出来。

我通过添加位于~/.android/debug.keystoredebugging密钥库的SHA1指纹来修复它。 我认为这个密钥库是默认生成的(不知道如何)。

terminal中的以下命令用于获取SHA1指纹:

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

当它要求input密码时,不要input任何东西,只需按回车即可。 (在我的情况下工作)

在开发人员控制台中将此指纹添加到Android应用程序的API密钥。

干杯!

在我的情况是什么工作,我不得不通过命令行安装它:

adb安装/path/to/app/MyApp.apk

你所要做的就是:在代码中使用debugging密钥; 卸载应用程序; 使用debugging密钥安装新的应用程序。

如果没有(上述)工作,很可能是您使用了错误的debug.keystore文件来生成指纹。 如果您的计算机上有多个debug.keystore文件,请确保使用正确的debug.keystore来生成SHA1指纹。

其中很多帮助我,但主要问题是我没有正确的签署。 我使用Xamarin,因此它不是内置在IDE中,所以当我使用keytool生成密钥时,它永远不会进入应用程序。 我不得不在我的.csproj文件中添加以下内容:

 <PropertyGroup> <AndroidKeyStore>True</AndroidKeyStore> <AndroidSigningKeyStore>maps.keystore</AndroidSigningKeyStore> <AndroidSigningStorePass>android</AndroidSigningStorePass> <AndroidSigningKeyAlias>androiddebugkey</AndroidSigningKeyAlias> <AndroidSigningKeyPass>android</AndroidSigningKeyPass> </PropertyGroup> 

我错误的是当我刚刚将发布configuration添加到Google Developers Console时,我正在运行debuggingconfiguration。 所以,我遵循这些步骤:

  1. 使用以下命令获取debugging密钥库的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文件中。

在IntelliJ ..如果你确定你的SHA1键是正确的, API key不会丢失,

PermissionManifest任何设置都是正确的。

也许你必须右键点击你的Google-Play-Services-lib并重新编译

我已经做了所有的事情,这对我来说是诀窍。

我迄今为止最奇怪的错误是从debug.keystore获取SHA1代码。

我虽然没有密码,但密码是Android

不知道它是否有助于任何人,但它帮助了我。 加上使用完整的包名称,你可以在java源代码文件中find它。 例如,有我的: com.example.erikas.mapsdemo (看起来像:package com.example.erikas.mapsdemo;)

所以,当你试图获得一个API密钥,使用这样的input:

 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

debugging时,我需要为~/.android/debug.keystore添加一个额外的API密钥

这个密钥库是自动为你设置的,密码是“android”?

我面临同样的问题,有解决这个问题,我试图从不同的谷歌帐户使用相同的包名称创builddebuggingAPI密钥。 清除错误的步骤:1.在不同的Google帐户中删除具有相同包名的不需要的api密钥。 2.请在单一帐户中维护Api密钥生成来解决此问题。 谢谢。 尝试这个。

我被困在这个问题上一个星期左右。 所以我开始使用真实的设备。 但有一天,我试着将Custondebugging密钥库(Eclipse,Window – > Preferences – > Android – > Build – > Cusom debug keystore)设置为默认值。 而且都成为工作。 当然,首先我在谷歌控制台上有一个关键。

希望这会有所帮助!

我面临同样的问题。 我尝试了几个解决scheme – 没有为我工作。 我的工作是生成一个新的API密钥,并清除我的设备上的Google play服务的数据

检查清单:1.在Android Manifest中检查READ_GSERVICES的权限

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

  1. 如果您在清单中做了一些更改,请清除应用程序数据。

  2. 检查.android文件夹中的debug.keystore。

    我的问题已经解决了,只需要通过debug.keystorereplace位于.android文件夹的debug.keystore。

我也遇到同样的问题,而使用Android Studio

我已经提到所有的解决scheme,但仍然没有工作。

问题是我在初始项目设置后changed我的package name 。 更改包名称反映在Manifest ,但在build.gradle文件中,旧包名称在那里。

一旦我在build.gradle中changed package name ,Map就开始工作了。

希望它可以帮助别人。

我有同样的问题。 我检查了日志,有人说“服务器validation失败”。 所以,我查了一下www.console.developers.google.com,发现包名是不正确的。 (这个软件包的名字是自动写的)我写得很对,一切正常。