2

我正在使用 HMS Maps,为此我遵循他们的文档。
对于此查询,我尝试了此链接。我也添加了 SHA-256 密钥和 agconnect-services.json 文件。
我所做的步骤是:

app gradle 中的依赖项:implementation 'com.huawei.hms:maps:6.0.0.301'
在 app gradle 中:apply plugin: 'com.huawei.agconnect'
我的根 gradle 是:

buildscript {
    repositories {
        maven { url 'http://developer.huawei.com/repo/' }
        google()
        jcenter()
        mavenCentral()

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:4.0.1'
        classpath 'com.google.gms:google-services:4.3.3'
        classpath 'com.huawei.agconnect:agcp:1.2.1.301'
        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        maven {url 'http://developer.huawei.com/repo/'}
        google()
        jcenter()
        mavenCentral()
        maven {
            url 'https://jitpack.io'
        }

        maven {
            url "https://github.com/QuickBlox/quickblox-android-sdk-releases/raw/master/"
        }

    }
}

我在 AppGallery 连接处添加了 SHA-256 密钥。
从 AppGallery 连接启用 MapApi。
在我的项目中下载并添加了“agconnect-services.json”文件。

在解决了一些与线程相关的问题后,我能够产生 logcat 错误,并且说“非法指纹”。
我知道,这与 AppGallery 的一些集成问题有关,但我无法理解我所缺少的,我正在遵循所有步骤。
**Logcat 是:**
2021-08-31 10:35:22.520 30490-30773/com.moody.poster E/HmsMapKit_AuthenticateClient_1074: Exception occur
    com.huawei.hms.maps.foundation.client.d: *1*0*2*:*I*L*G*L*F*N*E*P*I*T
        at com.huawei.hms.maps.foundation.client.d$d.c(:89)
        at com.huawei.hms.maps.foundation.client.c.d(:22556)
        at com.huawei.hms.maps.foundation.client.c.c(:88)
        at com.huawei.hms.maps.maproute.client.auth.e.d(:76)
        at com.huawei.hms.maps.maproute.client.auth.e.a(Unknown Source:0)
        at com.huawei.hms.maps.maproute.client.auth.b.a(Unknown Source:4)
        at com.huawei.hms.maps.foundation.client.c$a.e(:492)
        at com.huawei.hms.maps.maproute.client.auth.e.c(:1074)
        at com.huawei.hms.maps.maproute.cache.c$b.e(:298)
        at com.huawei.hms.maps.maproute.cache.c$b.call(:291)
        at eU.a(:42)
        at em.d(:12025)
        at fc$b.run(:96)
        at eq$c.run(:571)
        at fj.run(:66)
        at fj.call(:57)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:929)
2021-08-31 10:35:22.528 30490-30773/com.moody.poster E/HmsMapKit_ErrorTraceLogPusher_509: cache error trace log : ErrorTraceLogDTO{ scenario = ACCESS_SERVICE_ERROR', message='010002 : ILLEGAL_FINGERPRINT'}
    com.huawei.hms.maps.foundation.client.d: *1*0*2*:*I*L*G*L*F*N*E*P*I*T
        at com.huawei.hms.maps.foundation.client.d$d.c(:89)
        at com.huawei.hms.maps.foundation.client.c.d(:22556)
        at com.huawei.hms.maps.foundation.client.c.c(:88)
        at com.huawei.hms.maps.maproute.client.auth.e.d(:76)
        at com.huawei.hms.maps.maproute.client.auth.e.a(Unknown Source:0)
        at com.huawei.hms.maps.maproute.client.auth.b.a(Unknown Source:4)
        at com.huawei.hms.maps.foundation.client.c$a.e(:492)
        at com.huawei.hms.maps.maproute.client.auth.e.c(:1074)
        at com.huawei.hms.maps.maproute.cache.c$b.e(:298)
        at com.huawei.hms.maps.maproute.cache.c$b.call(:291)
        at eU.a(:42)
        at em.d(:12025)
        at fc$b.run(:96)
        at eq$c.run(:571)
        at fj.run(:66)
        at fj.call(:57)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:929)
2021-08-31 10:35:22.536 30490-30773/com.moody.poster E/HmsMapKit_AuthenticateCache_333: other err occur,errorCode : .010002 : ILLEGAL_FINGERPRINT
2021-08-31 10:35:22.775 30490-30490/com.moody.poster E/HmsMapKit_AccessTraceLogPusher_16: analyticsInstance is null
2021-08-31 10:35:22.778 30490-30490/com.moody.poster E/HmsMapKit_UserEventLogPusher_16: analyticsInstance is null


4

3 回答 3

1

我在实现 HMS Map 时遇到过类似的问题。在我的情况下,我将地图放在片段上并使用活动文档。为了修复它,我必须使用 SupportMapFragment,之后一切正常。

于 2021-08-27T15:09:30.810 回答
1

更新

在您的以下日志中:

2021-08-31 10:35:22.528 30490-30773/com.moody.poster E/HmsMapKit_ErrorTraceLogPusher_509:缓存错误跟踪日志:ErrorTraceLogDTO{场景 = ACCESS_SERVICE_ERROR',消息 ='010002:ILLEGAL_FINGERPRINT'}

正如文档所述,可能的原因如下:

  • 您的项目中的应用 ID 与 AppGallery Connect 中的不同。

  • 未配置签名证书指纹。您需要生成签名证书指纹并在 AppGallery Connect 中进行配置。

  • 您的应用的AppGallery Connect配置文件未配置。您需要按照添加您的应用的AppGallery Connect配置文件中的说明进行配置。

  • API 密钥未使用encode 进行转码。

你也可以关注这个文档:生成签名证书指纹,看看是否有问题。


以下Map kit codelab供您参考。你可以按照这个来看看它是否有效。

1.在AndroidManifest.xml文件中与应用程序块同级的块中声明相关权限。

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

2.将MapView添加到布局文件中。文件路径为\mapdemo\app\src\main\res\layout\activity_main.xml.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 
    
    <com.huawei.hms.maps.MapView  
       xmlns:map="http://schemas.android.com/apk/res-auto" 
        android:id="@+id/mapView" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        map:cameraTargetLat="51" 
        map:cameraTargetLng="10" 
        map:cameraZoom="8.5" 
        map:mapType="normal" 
        map:uiCompass="true" 
        map:uiZoomControls="true" /> 
</LinearLayout>

3.在activity文件中添加调用MapView的配置。文件路径为\mapdemo\app\src\main\java\com\wz\android\mapdemo\MainActivity.java.

package com.wz.android.mapdemo; 
 
import androidx.appcompat.app.AppCompatActivity; 
 
import android.os.Bundle; 
import android.util.Log; 
 
import com.huawei.hms.maps.HuaweiMap; 
import com.huawei.hms.maps.MapView; 
import com.huawei.hms.maps.OnMapReadyCallback; 
 
/** 
* Map activity entrance class. 
*/ 
public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { 
 
    private static final String TAG = "MapViewDemoActivity"; 
    // Huawei map. 
    private HuaweiMap hMap; 
 
    private MapView mMapView; 
 
    private static final String MAPVIEW_BUNDLE_KEY = "MapViewBundleKey"; 
 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
        // Obtain a MapView instance. 
        mMapView = findViewById(R.id.mapView); 
        Bundle mapViewBundle = null; 
        if (savedInstanceState != null) { 
            mapViewBundle = savedInstanceState.getBundle(MAPVIEW_BUNDLE_KEY); 
        } 
 
        // Please replace Your API key with the API key in  
        // agconnect-services.json. 
        MapsInitializer.setApiKey("Your API key"); 
        mMapView.onCreate(mapViewBundle); 
        // Obtain a map instance. 
        mMapView.getMapAsync(this); 
    } 
 
    @Override 
    public void onMapReady(HuaweiMap map) { 
        // Obtain a map instance from callback. 
        Log.d(TAG, "onMapReady: "); 
        hMap = map; 
    } 
}

4.添加MapView的生命周期方法。文件路径为\mapdemo\app\src\main\java\com\wz\android\mapdemo\MainActivity.java.

@Override 
protected void onStart() { 
    super.onStart(); 
    mMapView.onStart(); 
} 
 
@Override 
protected void onStop() { 
    super.onStop(); 
    mMapView.onStop(); 
} 
 
@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    mMapView.onDestroy(); 
} 
 
@Override 
protected void onPause() { 
    mMapView.onPause(); 
    super.onPause(); 
} 
 
@Override 
protected void onResume() { 
    super.onResume(); 
    mMapView.onResume(); 
}

5.验证是否已分配所需的权限。文件路径为\mapdemo\app\src\main\java\com\wz\android\mapdemo\MainActivity.java.

private static boolean hasPermissions(Context context, String... permissions) { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && permissions != null) { 
        for (String permission : permissions) { 
            if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) { 
                return false; 
            } 
        } 
    } 
    return true; 
}
于 2021-08-31T01:37:13.663 回答
0

我不确定为什么会这样,我与华为开发人员讨论过这个问题,我在一个片段中这样做,但是当我在一个活动中尝试这个时,它工作得很好。现在我在一个单独的活动中做这件事。(我使用 HMS 工具包的内置方法创建了该活动。)

于 2021-09-28T12:44:34.537 回答