1. 程式人生 > >關於h5 webapp 離線打包定位地圖的各種坑,爬的好辛苦

關於h5 webapp 離線打包定位地圖的各種坑,爬的好辛苦

最近開發一個webapp 由於安全需要,採用離線打包,在使用hbuilder開發的時候,用到定位功能和地圖功能,在使用真機測試的時候 ,一切都是正常的,也去申請了百度地圖的key,


當然也可以自己設定自己的簽名:檢視簽名sha1採用下面的方式:

由於在h5中我們可以採用很多種方式實現地圖和定位功能,hbuilder中已經集成了百度地圖,但是也可以根據選擇使用高德地圖,只要申請對應的key 就可以了;


1、在應用中,雖然可以使用內建的地圖maps。

var ptObj =new plus.maps.Map( id );

在使用上方的方式做地圖的時候,id是你頁面中顯示地圖的地方的容器的id名,

ps:這種方式可以方便的實現地圖,但是這種方式有很多弊端,比如當你要自定義點選地圖上的標的點彈出的氣泡樣式的時候,這種方式就不是那麼好實現了,而且,在顯示方面,採用的是新開一個webview,如果是單獨一個頁面顯示地圖問題倒不是很大,但是如果只是想區域性的顯示,這個時候介面的樣式就不那聽使喚了,而且在.hide()  .show()之後,會出現多個地圖層重疊的現象,地圖的事件將失效,雙指放大縮小無法使用的問題,可能是我本來是做後端開發的,對這些不是很瞭解,我做的時候是沒有解決的,所以我換了另外的方式。

2、因為是使用h5做的app,所以對js肯定是支援的,所以,我後面選擇使用js的方式實現地圖功能;

js方式的使用很簡單,只需要在頁面的開始匯入相關的js:

<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的金鑰"></script>

用自己在百度開發者平臺申請的key;這裡就不需要在配置sdk,但是如果要使用定位功能,由於我們使用的是sdk方式的定位,所以有定位功能的時候,需要配置百度地圖sdk相關的東西。

附上js相關的示例demo:

打包的時候,我採用的離線打包,所以需要事先匯入相關的離線打包的sdk

上面的教程不是唯一的,網上有很多的離線打包的教程可以自己根據情況選擇。

這離線打包中,重要的一點,我遇到得一個問題:android studio 離線打包的時候,由於使用了百度地圖的定位,所以我們需要配置百度地圖sdk,所以匯入了.aar的整合檔案之後(以前是分開的現在基本的jar是整合在.aar的檔案的),需要匯入百度地圖的sdk:


除了匯入這些檔案之後,還需要匯入關鍵的.so檔案(前面我直接放在libs中,但是一直提示找不到,配置了之後還是找不到,網上找了一個方法,就是在src中的main中新建一個jniLibs檔案,然後放入.so的檔案,由於裝置的不同,所以我把所有的.so檔案都放進來了,這裡注意一定要同一個版本的sdk下的.so)


這裡會預設的找相應的檔案搜尋.so


這裡的配置是.aar匯入之後的配置。

同時我們還需要在AndroidManifest.xml中新增相應的百度的service和data:

<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="%key%"></meta-data>
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"></service>

在使用百度地圖的時候,最後一步就是在


這個檔案中新增百度地圖的相關內容:



至此,離線打包使用百度地圖到此為止,切記,在測試的時候的簽名和包名,一定要和自己的百度地圖的key相對應,檢視key的方式在上面已經提過,此處不再贅述,如果還有相關的問題,可以聯絡我一起討論交流。前端後端的問題我們都可以進行討論學習,共同進步。

var ptObj =new plus.maps.Map( id );