【问题标题】:Google map issue even all setting is correct according to google doc根据谷歌文档,谷歌地图问题即使所有设置都是正确的
【发布时间】:2017-12-25 22:05:13
【问题描述】:

我已经按照google map api documentation实现了google map。

活动代码在这里

public class GoogleMapActivity extends AppCompatActivity implements OnMapReadyCallback {
    private GoogleMap map;
    double latitude,longitude;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_map_layout);
        latitude = Double.parseDouble(getIntent().getExtras().getString("lat"));
        longitude =Double.parseDouble(getIntent().getExtras().getString("lng"));
             SupportMapFragment mapFragment =
                (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

    }

    @Override
    public void onMapReady(GoogleMap map) {
        map.setMyLocationEnabled(true);
        CameraPosition cameraPosition = new CameraPosition.Builder().target(
                new LatLng(latitude, longitude)).zoom(12).build();

        map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
        Marker marker = map.addMarker(new MarkerOptions()
                .position(new LatLng(latitude, longitude)));
        map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
    }
}

xml 布局

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:name="com.google.android.gms.maps.SupportMapFragment" />

Manifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
<uses-feature
        android:name="android.hardware.location.gps"
        android:required="false">
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    </uses-feature>
    <supports-screens
        android:largeScreens="true"
        android:normalScreens="true"
        android:smallScreens="true"
        android:xlargeScreens="true" />
    <uses-feature
        android:name="android.hardware.telephony"
        android:required="false"></uses-feature>
    <uses-library
        android:name="com.google.android.maps"
        android:required="false" />
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" >
    </uses-feature>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!-- 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" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.READ_SMS" />

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

    <permission
        android:name="pws.nactus.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

    <uses-permission android:name="pws.nactus.permission.MAPS_RECEIVE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

    <permission
        android:name="pws.nactus.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />

    <uses-permission android:name="android.permission.WAKE_LOCK">

    </uses-permission>
    <uses-permission android:name="pws.nactus.permission.C2D_MESSAGE" />

    <!-- permission for Internet -->
    <uses-permission android:name="android.permission.INTERNET" />


    <!-- Camera features - recommended -->
    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />


    <!-- Permission to vibrate - recommended, allows vibration feedback on scan -->
    <uses-permission android:name="android.permission.VIBRATE" />


    <uses-feature
        android:name="android.hardware.camera.autofocus"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.camera.flash"
        android:required="false" />
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@drawable/app_icon"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:replace="android:icon">

        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="AIzaS*****************uPTJkdnEn7dvdM" />

        <meta-data
           android:name="com.google.android.gms.version"
           android:value="@integer/google_play_services_version" />

            <activity
            android:name=".GoogleMapActivity"
            android:screenOrientation="portrait"
           />

                </application>
</manifest>

我们还为谷歌地图键添加了 sha-1

结果屏幕(地图)

控制台日志

07-20 14:52:29.315 8434-12620/pws.nactus V/FA: Activity paused, time: 786941945
07-20 14:52:29.318 8434-12620/pws.nactus D/FA: Logging event (FE): user_engagement(_e), Bundle[{firebase_event_origin(_o)=auto, engagement_time_msec(_et)=2996, firebase_screen_class(_sc)=TutorProfileActivity, firebase_screen_id(_si)=4288618532452179711}]
07-20 14:52:29.371 8434-8434/pws.nactus V/FA: onActivityCreated
07-20 14:52:29.429 8434-8434/pws.nactus I/Google Maps Android API: Google Play services package version: 11055436
07-20 14:52:29.480 8434-12730/pws.nactus E/Google Maps Android API: Failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors).
07-20 14:52:29.522 8434-12620/pws.nactus V/FA: Activity resumed, time: 786942133
07-20 14:52:29.524 8434-12620/pws.nactus D/FA: Logging event (FE): screen_view(_vs), Bundle[{firebase_event_origin(_o)=auto, firebase_previous_class(_pc)=TutorProfileActivity, firebase_previous_id(_pi)=4288618532452179711, firebase_screen_class(_sc)=GooleMapActivity, firebase_screen_id(_si)=4288618532452179713}]

build.gradle 文件中 Google play 服务版本为 11.0.2

编译“com.google.android.gms:play-services-maps:11.0.2”

似乎代码、开发者控制台设置和清单设置都很完美。但我们无法理解冲突从何而来。 如果有人也遇到此类问题,请帮助我们解决它。 很多 +1 将不胜感激。

此代码在单独的项目中工作,以显示具有相同开发者控制台设置的地图。

【问题讨论】:

  • 您是否添加了单独的 API 密钥文件用于调试和发布?
  • 可能是个愚蠢的问题,但对于com.google.android.geo.API_KEY,你有你的实际密钥而不是占位符字符串“key”,对吧?
  • @Iulian Popescu 我们对两者都使用相同的 api 密钥。
  • @Iulian Popescu 我们正在使用实际密钥代替“密钥”。
  • 您是否在开发者控制台中启用了 google maps v2 API?

标签: java android google-maps google-maps-api-3 google-maps-android-api-2


【解决方案1】:

在下面标记在您的清单文件中

 <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />
<meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="YOUR GOOGLE KEY" />

将您的谷歌地图密钥而不是“密钥”放在清单中,并确保您必须从谷歌开发者控制台启用 api。

【讨论】:

  • 亲爱的@Chirag SolankI,我们使用的是实际密钥而不是“密钥”,请忽略这一点。我把真正的钥匙放在那里。
  • 检查编辑并确保您必须在您的设备和 gradle 中使用最新版本的播放服务。
  • Google play 服务版本为 11.0.2 在 build.gradle 文件编译 "com.google.android.gms:play-services-maps:11.0.2"
  • 如果一切正常,可能是谷歌开发者控制台中缺少的东西,我也有一个建议。你使用了这么多冗余权限,请尝试删除未使用的权限。我对您的解决方案感到非常兴奋。如果您找到解决方案,请分享它可能对某人有帮助。祝你好运
  • 当然,如果找到,我们很乐意分享解决方案,正如我们在问题中提到的那样,所有内容都设置为开发人员控制台和权限,谈论我们在项目中需要的所有内容,除了地图模块之外,我们还有其他模块它。
【解决方案2】:
E/Google Maps Android API: Failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors).

以上错误日志显示这是一个身份验证问题。

如果您已实施 SSL 证书,则在启动地图活动时可能会遇到主机名验证问题,从而限制您的 google map api。

验证主机名时需要允许 google map api。有关更多信息,请阅读以下文档。

https://developer.android.com/training/articles/security-ssl.html#CommonHostnameProbs

【讨论】:

  • 然后将 google.com 验证到 HostnameVerifier 并再次检查
猜你喜欢
  • 2011-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-26
  • 2012-03-15
  • 2014-04-05
  • 2011-12-26
  • 2011-04-26
相关资源
最近更新 更多