Google 地图问题即使根据 google 文档所有设置都是正确的

Google map issue even all setting is correct according to google doc

我已经根据google map api documentation实现了google映射。

Activity代码在这里

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>

我们还为 google 映射键添加了 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}]

Google播放服务版本在build.gradle文件

中为11.0.2

编译"com.google.android.gms:play-services-maps:11.0.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" />

将您的 google 映射键而不是 'Key' 放入清单中,并且 确保您必须需要从 Google 开发者控制台启用 api .

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 证书,那么当点击地图 activity 启动时,主机名验证可能会限制您的 google 地图 api。

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

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