基於Ionic+Cordova+Bmob的開源項目實戰

來源:互聯網
上載者:User

標籤:

概述

        之前在Ionic+Cordova開發環境搭建一文中講述了Ionic+Cordova的跨平台移動開發架構。其中Cordova可以將開發的Web App打包發布到不同手機平台下,並且提供了豐富的外掛程式來使用手機硬體功能,如Camera、GPS等。但是Cordova只是一個殼,並沒有提供前端的開發架構和UI庫,Ionic很好的彌補了這一點。Ionic提供了豐富的UI控制項和基於AngularJS的MVC開發架構。之後又在使用Bmob為你的行動裝置 App提供資料服務一文中講述了如何使用Bmob雲端服務平台來為開發的行動裝置 App提供資料服務,免去服務端開發的痛苦,使你專註於行動裝置 App的開發。

         現在打算將這三者結合起來,實現一個位置分享的App,供自己練手也方便大家互相學習。

一、需求分析

“位置分享”App正如其名稱所述那樣,是一款可以分享自己地理位置的應用。“位置分享”App的功能需求大致如下:

         1、可以擷取自己的當前位置,並在地圖中展示出來;

         2、可以將自己的位置資訊發送到雲端資料庫儲存;

         3、可以導航到目標使用者的所在位置;註:目標使用者必須是註冊過的使用者,而且對方發送過自己的位置資訊到雲端。這兩點很重要,一是直接導航到任何一個使用者是不可能的,除非你是FBI(呵呵)。二是如果想導航到註冊的任何一個使用者,除非app定時自動發送位置資訊到雲端,這點實現起來比較複雜,而且與我們的主題Ionic+Cordova+Bmob無關,因此就不搞這麼複雜。

         4、可以查看某使用者的曆史足跡,並在地圖中標出;註:前提是對方發送過自己的位置資訊到雲端資料庫。

         5、基本的註冊、登入、登出和個人資訊查看功能。

          因此,系統總體功能結構圖如下所示:


系統比較簡單,使用案例圖就不分層了,直接上詳細的系統使用案例圖,如所示:


二、系統設計1、後端資料服務提供

            正如前面所述,系統後端採用了Bmob雲端服務平台來提供資料。主要有_Uer、positon、positionHistory三張表,表結構如下:

_User表:

_User表是系統內建的表,唯一鍵是電話號碼,我們使用電話號碼作為登入帳號。使用電話號碼作為帳號,是考慮到要導航到目標使用者,只需要輸入對方電話號碼即可。_User表需要自己再根據業務添加一些欄位如:expired(是否到期)、expiredtime(到期時間)。


position表:

使用者當前位置表,存放著每個使用者當前的位置資訊。objectId是系統自行建立的,類似於序號。唯一鍵是電話號碼,也就是說這張表只儲存使用者的當前位置資訊。曆史位置資訊放在positionHistory表中。


positionHistory表:

使用者曆史位置表,存放著使用者每次發送到雲端的位置資訊。主鍵是objectId,為系統自行建立。


從表結構的設計可以看到,業務資料十分簡單,主要是使用者表和位置表。其中位置表分為當前位置表和曆史位置表,這麼劃分是為了圖方便,導航時就查詢position表,查詢曆史足跡是就查詢positionHistory表。

 2、位置資料擷取、展示以及導航

        位置資訊擷取很方便,Cordova有geolocation外掛程式可供我們使用,它使用GPS或者移動網路對使用者進行定位,然後返回經緯度座標。

        對於將經緯度座標通過地圖展示則通過百度LBS雲平台的URI API來實現。請求的地址如下:

http://api.map.baidu.com/geocoder?參數設定

具體的參數設定請查看百度URI API介面說明中的逆向位址解析一項。

         曆史足跡的展示需要在地圖上標註多個點,由於百度URI API只能標註一個點,因此轉向了高德地圖 URI API。請求的地址如下:

http://api.map.baidu.com/geocoder?參數設定
具體參數設定請查看高德地圖URI API 介面說明中的多位置點介面一項。

        導航功能也是通過百度 URI API來實現的,它可以調用百度網頁地圖,然後展示路徑規劃和啟用導航。請求的地址如下:

http://m.amap.com/?mk=參數設定
具體的參數設定請查看百度URI API介面說明中的 公交、駕車、步行導航一項。

3、使用者認證和管理

       這裡的使用者認證十分簡單。使用者輸入帳號密碼後,系統在雲端查詢使用者,如果查詢不到,則提示使用者不存在。否則再次匹配密碼,密碼匹配不成功,則提示使用者名稱或密碼錯誤。否則在用戶端設定變數isLogin=true。表示使用者已經登入。使用者認證既沒有設定cookie、逾時登出、也沒有修改密碼等模組,做的十分簡陋。因為安全是一個比較大的話題,要做好必須下功夫。大家可以自行完善。

4、前端移動開發

      通過Bmob在雲端為我們提供資料服務,通過百度LBS為我們的位置展示、導航提供支援人員。接下來我們就可以專註於移動端的開發了。

4.1  項目結構

       首先通過Ionic或者cordova建立一個空的工程LocationShare,把geolocation外掛程式安裝好。然後通過Ionic Creator建立資源套件工程,不需要做介面開發,直接匯出後用它替換掉LocationShare工程根目錄下的www目錄。之後在Bmob官網上下載JS SDK,把它放入lib目錄中。最後通過WebStorm開啟www目錄就可以進行項目的開發了。項目結構如所示:


CSS:   項目用到的CSS檔案都放在這個目錄中。

  img:  項目用到的圖片都放在這個目錄。

     js:  存放js檔案,包括app.js、控制器、服務、過濾器等等。

    lib:   庫檔案,主要是bmob庫,ionic兩個庫。其中bmob需要手動添加,ionic是通過creator建立資源套件工程時,自動添加進來的。

template:所有的視圖都放在該檔案夾下。

index.html:首頁,所有的js檔案,庫引用都在這裡進行引用。

4.2 js檔案引用及庫的初始化

      js檔案引用都放在了index.html頁面中的head,除了自動添加的引用之外,我們還需要手動加入bmob庫的引用,如下所示:

<!-- bmob script (javacript SDK) --><script src="lib/bmob/bmob-min.js"></script>
然後在app.js中對其進行初始化:

//初始化Bmob SDK,開發人員需要申請自己ID和KeyBmob.initialize("你的Application ID", "你的REST API Key");
上述代碼可以放在run方法裡面。

4.3  頁面導航

所有的頁面都放在template檔案夾下,頁面之間的關係如所示:


頁面之間的導航基於AngularJS的ui-router模組,具體代碼就不貼了。

4.4  其它重要代碼說明1、位置資訊擷取

      位置資訊通過geolocation外掛程式擷取,具體代碼如下:

navigator.geolocation.getCurrentPosition(geolocationSuccess,//擷取位置座標    geolocationError,    _geolocationOptions);
方法的參數詳細資料請參考cordova-plugin-geolocation外掛程式說明。

2、發送位置資訊到雲端和擷取雲端資料

      和雲端資料庫的互動都需要bmob的js SDK,具體的增刪改查可以去官方文檔上查看。代碼比較長,這裡就不貼了。更詳細的資訊在原始碼裡都有注釋,應該能看懂。

三、系統

                                          


四、項目地址

       項目目前放在CSDN上面,地址如下:位置分享APP項目源碼。

基於Ionic+Cordova+Bmob的開源項目實戰

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.