華為地圖丘喻,你好脯宿!

初次見面

在國內,說到集成地圖服務泉粉,大多用的是高德和百度地圖提供的相關接口连霉。自從華為開始做地圖服務以后(目前華為地圖服務還不支持中國大陸區(qū)域,但愿不久的將來華為地圖能夠融入我們日常生活的方方面面吧~)嗡靡,迅速就有一大批開發(fā)者參與進來跺撼,其開放平臺也提供了地圖服務相關的接口和文檔,那么今天就和華為地圖來一次美麗的邂逅吧??

首先讨彼,我們先來打開【華為開發(fā)者平臺-地圖服務】的部分歉井,可以看到下面內容:

業(yè)務簡介
地圖服務(Map Kit)給開發(fā)者提供一套地圖開發(fā)調用的SDK,地圖數據覆蓋超過200個國家和地區(qū)哈误,支持數十種語言哩至,方便開發(fā)者輕松地在應用中集成地圖相關的功能,全方位提升用戶體驗蜜自。

從支持的國家和地區(qū)的數量來看菩貌,華為一開始的目標就是針對全球提供服務的,直接對標谷歌地圖重荠,這很華為<住!!

再來看版本更新說明仇参,最近一次的更新在2020年9月18日媳危,距離今天也是剛剛發(fā)布不久,版本號是5.0.2.300冈敛,不知不覺已經更新到5.x版本了,厲害了鸣皂!

附上官方GitHub地址:HMS-Core/hms-mapkit-demo-java

集成準備

不同的地圖服務抓谴,它的集成方式肯定是不完全一樣的,那么我們先按照官網的文檔來進行集成工作寞缝。ok癌压,先來看一下開發(fā)準備相關的內容吧。

從文檔我們可以看到荆陆,一共分為四個部分滩届,分別為:

  • 配置AppGallery Connect
  • 集成HMS Core SDK
  • 配置混淆腳本
  • 添加權限
1. 配置AppGallery Connect
  • 注冊成為開發(fā)者
    首先,要使用華為地圖服務的能力被啼,必須注冊成為開發(fā)者并完成實名認證帜消,這一步我之前就已經做好了,所以此過程就不贅述了浓体,注冊過程都大同小異很簡單泡挺,注冊網址:華為開發(fā)者聯(lián)盟網站

  • 創(chuàng)建應用
    登錄成功以后開始創(chuàng)建應用(先創(chuàng)建項目,再在項目下面創(chuàng)建應用)命浴,這里我包名注冊為:com.test.hellohuaweimaps娄猫,截圖如下:

創(chuàng)建成功以后,信息如下:

接著生闲,我們點擊agconnect-services.json的下載按鈕媳溺,下載一個json文件,控油備用碍讯⌒危可以先來看下這個文件內容是什么,其實就是我們剛才創(chuàng)建項目的一些信息捉兴,appid和包名這些之類的屯阀,打開如下:

{
    "client":{
        "cp_id":"260086000054571879",
        "product_id":"736430079244623765",
        "client_id":"444159260570420352",
        "client_secret":"E02F4B50235CFD06F5B1A629B9A4E1FF6E51C5D9712FE9203A4FC3F26DC8CDF1",
        "app_id":"102999311",
        "package_name":"com.test.hellohuaweimaps",
        "api_key":"CgB6e3x9LlZu7CzGeBgFTFlfnN3HEIEkSZSYEudrrDlhlqfQNlQbPOhsy3W/BZbkXpxZDyqqMkdyrtC36iYZ2I31"
    },
    "configuration_version":"1.0"
}
  • 配置簽名證書指紋
    那么,為什么要配置這個簽名證書呢轴术,原因很簡單难衰,我們來看官網的描述是這樣的:

簽名證書指紋用于在通過華為HMS Core SDK調用HMS Core(APK)時,校驗應用的真實性逗栽。開發(fā)者在使用HMS Core(APK)前必須將簽名證書指紋配置到AppGallery Connect盖袭,在配置前需要根據簽名證書在本地生成簽名證書指紋。

原因就是為了做一個合法檢驗了,為了過濾掉一些未簽名的不法應用鳄虱。OK弟塞,那我們先來生成簽名證書指紋,你需要準備一個簽名文件(keystore或者jks類型的文件)拙已,和配置好環(huán)境了的JDK决记,然后很簡單一個命令就搞定了:
命令:keytool -list -v -keystore <簽名文件路徑>

zhuyongdeMacBook-Pro:~ zhuyong$ keytool -list -v -keystore /Users/zhuyong/Desktop/keystore/hwmapdemo.jks
輸入密鑰庫口令:  
密鑰庫類型: jks
密鑰庫提供方: SUN

您的密鑰庫包含 1 個條目

別名: bravejoy
創(chuàng)建日期: 2020-9-4
條目類型: PrivateKeyEntry
證書鏈長度: 1
證書[1]:
所有者: CN=bravejoy
發(fā)布者: CN=bravejoy
序列號: 6c406261
有效期為 Fri Sep 04 20:03:09 CST 2020 至 Tue Aug 29 20:03:09 CST 2045
證書指紋:
     MD5:  F6:0E:41:C0:01:44:E5:C8:4E:D3:C7:4F:EE:A8:81:17
     SHA1: EB:82:61:B1:84:07:C4:F7:CD:A0:56:31:9E:6B:74:A1:17:0E:52:94
     SHA256: 76:20:FD:9A:18:DA:AB:B9:51:D7:9B:B8:00:4F:B9:3D:59:CD:86:24:4F:13:A3:70:16:3E:D7:7C:04:3C:D7:1A
簽名算法名稱: SHA256withRSA
主體公共密鑰算法: 2048 位 RSA 密鑰
版本: 3

復制其中的SHA256數據,然后粘貼到對應位置即可倍踪,我這里生成配置如下:

2. 集成HMS Core SDK
  • 打開Android Studio系宫,新建項目
    ps:注意包名要和上面一致,我這里為:com.test.hellohuaweimaps
    新建項目以后建车,把剛才下載的json文件放至如下位置:
  • 配置AGC插件和SDK的Maven倉庫地址
    打開項目根目錄build.gradle文件扩借,配置如下:
buildscript {
    
    repositories {
        google()
        jcenter()
        
        //agconnect插件maven倉地址,必須配置
        maven {url 'https://developer.huawei.com/repo/'}
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.1'

        ////agconnect插件
        classpath 'com.huawei.agconnect:agcp:1.3.1.300'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        
        //maven倉地址缤至,下載地圖sdk
        maven {url 'https://developer.huawei.com/repo/'}
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

  • 依賴地圖SDK
    打開app目錄下的build.gradle文件潮罪,配置如下:
apply plugin: 'com.android.application'
apply plugin: 'com.huawei.agconnect'//agc相關插件

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"

    defaultConfig {
        applicationId "com.test.hellohuaweimaps"
        minSdkVersion 19
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

    //華為地圖SDK
    implementation 'com.huawei.hms:maps:5.0.2.300'
}

  • 執(zhí)行sync,同步成功
3. 配置混淆腳本
-ignorewarnings
-keepattributes *Annotation*
-keepattributes Exceptions
-keepattributes InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable
-keep class com.hianalytics.android.**{*;}
-keep class com.huawei.updatesdk.**{*;}
-keep class com.huawei.hms.**{*;}
4. 添加權限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="com.huawei.appmarket.service.commondata.permission.GET_COMMON_DATA"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

初次握手

到這里其實我們已經做了很多工作了领斥,那么從現(xiàn)在開始我們就要開始真正地使用地圖API了嫉到。

  • 使用MapView控件
    打開activity_main文件,引用MapView控件如下:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.huawei.hms.maps.MapView
        android:id="@+id/mapView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
  • 在Activity中聲明并使用
public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {
    
    private MapView mMapView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mMapView = findViewById(R.id.mapView);
        Bundle mapViewBundle = null;
        if (savedInstanceState != null) {
            mapViewBundle = savedInstanceState.getBundle("MapViewBundleKey");
        }
        mMapView.onCreate(mapViewBundle);
        mMapView.getMapAsync(this);
    }

    /**
     * 當地圖準備完成以后月洛,會回調次方法
     *
     * @param huaweiMap 地圖對象
     */
    @Override
    public void onMapReady(HuaweiMap huaweiMap) {

    }

    @Override
    protected void onStart() {
        super.onStart();
        mMapView.onStart();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mMapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mMapView.onPause();
    }

    @Override
    protected void onStop() {
        super.onStop();
        mMapView.onStop();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mMapView.onDestroy();
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        mMapView.onLowMemory();
    }
}

  • 運行項目
    然后看到的效果是這樣的屯碴,只有一些網格狀的東西,根本看不到地圖膊存,腦瓜子嗡嗡的:

想一下导而,我們剛才在官網配置的簽名證書指紋貌似還沒有派上用場,問題肯定是出在這里了隔崎,來看一下有沒有報錯的日志信息今艺,從日志里我們可以看到下面這樣一句error日志,告訴我們證書指紋無效爵卒,因為我們并沒有對apk進行簽名虚缎。

HmsMapKit_AuthenticateClient_319: responseBody is returnCode: 010002; 
resultInfo : the certificate fingerprint is invalid.

先不配置簽名,我們先來用簽名文件打包一個apk試一下钓株,然后手動安裝運行:

果不其然实牡,地圖出來了哦!V岷稀创坞!

備注:使用華為地圖服務需要在手機提前安裝HmsCore【華為移動服務】。

好吧受葛,既然已經確定了原因所在题涨,那我們就在gradle里配置一下apk簽名吧偎谁,打開app目下的build.gradle文件,在android{}內增加如下配置:

signingConfigs {
    release {
        //將簽名文件放至app根目錄下纲堵,和 agconnect-services.json在同一個目錄下
        storeFile file("hwmapdemo.jks")
        storePassword "123456"
        keyAlias "bravejoy"
        keyPassword "123456"
        v2SigningEnabled true
    }
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.release
    }
    debug {
        //此配置是為了debug模式下也能夠對apk進行簽名巡雨,方便運行調試。
        signingConfig signingConfigs.release
    }
}

執(zhí)行Sync席函,然后卸載手機app铐望,再次直接點擊運行,地圖成功顯示茂附。

初次互動

既然地圖都已經出來了正蛙,那就再小小地互動一下吧。

  • 移動相機視角
    移動到北京的位置(經緯度:39.909736,116.397400)
  • 添加一個marker何之,并增加點擊事件
    在onMapReady回調方法中添加以下代碼:
/**
 * 當地圖準備完成以后,會回調次方法
 *
 * @param huaweiMap 地圖對象
 */
@Override
public void onMapReady(HuaweiMap huaweiMap) {
    //構造一個經緯度坐標對象
    LatLng latLng = new LatLng(39.909736, 116.397400);
    //移動相機到指定位置
    huaweiMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 3));
    //在地圖上添加Marker
    huaweiMap.addMarker(new MarkerOptions()
            .position(latLng)
            .icon(BitmapDescriptorFactory.defaultMarker())
            .title("I'm Beijing")
            .snippet("I'm Beijing"));
    //添加Marker點擊事件監(jiān)聽器
    huaweiMap.setOnMarkerClickListener(new HuaweiMap.OnMarkerClickListener() {
        @Override
        public boolean onMarkerClick(Marker marker) {
            Toast.makeText(MainActivity.this, "This is Beijing", Toast.LENGTH_SHORT).show();
            return false;
        }
    });
}

好了咽筋,到這里就算是跟華為地圖真的認識了溶推,以后愿她會認識更多的開發(fā)者,也希望她會越來越好奸攻,成為世界第一K馕!!睹耐!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末辐赞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子硝训,更是在濱河造成了極大的恐慌响委,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窖梁,死亡現(xiàn)場離奇詭異赘风,居然都是意外死亡,警方通過查閱死者的電腦和手機纵刘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門邀窃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人假哎,你說我怎么就攤上這事瞬捕。” “怎么了舵抹?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵肪虎,是天一觀的道長。 經常有香客問我惧蛹,道長笋轨,這世上最難降的妖魔是什么秆剪? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮爵政,結果婚禮上仅讽,老公的妹妹穿的比我還像新娘。我一直安慰自己钾挟,他們只是感情好洁灵,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著掺出,像睡著了一般徽千。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上汤锨,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天双抽,我揣著相機與錄音,去河邊找鬼闲礼。 笑死牍汹,一個胖子當著我的面吹牛,可吹牛的內容都是我干的柬泽。 我是一名探鬼主播慎菲,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼锨并!你這毒婦竟也來了露该?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤第煮,失蹤者是張志新(化名)和其女友劉穎解幼,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體包警,經...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡书幕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了揽趾。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片台汇。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖篱瞎,靈堂內的尸體忽然破棺而出苟呐,到底是詐尸還是另有隱情,我是刑警寧澤俐筋,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布牵素,位于F島的核電站,受9級特大地震影響澄者,放射性物質發(fā)生泄漏笆呆。R本人自食惡果不足惜请琳,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赠幕。 院中可真熱鬧俄精,春花似錦、人聲如沸榕堰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逆屡。三九已至圾旨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間魏蔗,已是汗流浹背砍的。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留莺治,地道東北人廓鞠。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像产雹,于是被迫代替她去往敵國和親诫惭。 傳聞我的和親對象是個殘疾皇子翁锡,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353