1. 程式人生 > >混合開發與第三方外掛

混合開發與第三方外掛

1.掌握manifest.json使用

一個專案的核心配置,比如
原生app許可權(核心功能模組,如果不選,功能無法實現),
專案啟動圖片,專案預設圖示
- 說明:替換元素以後,必須儲存mainfest檔案,之後必須打包成apk或ipa,安裝到手機才可以

2.如何往專案裡面新增支援原生的第三方庫

在manifest進行修改,修改sdk(支援第三方的庫)

3.實現支付寶功能

  1. 支付功能都被dcloud託管到payment模組裡面
    • getChanels() //可以獲取當前手機裡面全部付款渠道
    • 支付寶,微信
    • request(支付渠道,支付訂單資訊【ajax介面拿到資訊,fn】) 進行支付—-這是支付的核心方法

支付寶舉例說明付款方式:

淘寶—>跳轉到支付寶—->首頁登入—->訂單處理—->輸入密碼進行付款

1.早期:前後端還沒有完全分離的時候是用jsp完成
- 生成訂單—>提交給支付寶(提示你登入)—->查詢訂單 —>輸入密碼進行付款

2.(一般用在pc端)前端付款的時候:傳入你的使用者名稱和付款金額和密碼
- 後端
- 1.接收到前端請求
- 2.後端通過httpclient【是不同的服務端之間通訊的工具】訪問支付寶
- 3.申請許可權—核心是拿到支付寶簽證(有了簽證才可以進行付款)
- 支付寶平臺

3.(一般用在移動端)後端提供的介面 <—-我們要使用的

前端只需要輸入付款的金額就可以了,後端直接將需要的訂單資訊和簽證全部返回回來,就可以在頁面中呼叫本地原生介面

<script type="text/javascript">
    var ALI_SERVICE = "http://demo.dcloud.net.cn/helloh5/payment/alipay.php?total=0.01";
    document.getElementById('pay').addEventListener('touchend',function(){
        //0.獲取支付模組
        var pay=plus.payment;
        //1.獲取到手機裡面全部支付渠道
pay.getChannels(function(payWays){ alert(JSON.stringify(payWays)); for(var i=0;i<payWays.length;i++){ if(payWays[i].id == 'alipay'){ plus.nativeUI.toast('準備呼叫阿里支付'); var currentPayWays=payWays[i]; getOrders( ALI_SERVICE,function(order){ pay.request(currentPayWays,order,function(){ alert('付款成功,謝謝土豪!~~'); }) }) } } }) //2.request(支付渠道,支付訂單資訊【ajax介面拿到資訊,fn】) 進行支付 }) //訂單資訊 var getOrders = function(url,fn){ var xhr = new XMLHttpRequest(); xhr.open('GET',url,true); xhr.send(); xhr.onreadystatechange=function(){ if(xhr.status =200 && xhr.readyState ==4){ fn(xhr.responseText); } } }
</script>

如果是一個列表付款總額呢~so:

    <style type="text/css">
        button{
            width: 200px;
            height: 40px;
            background: orange;
            border-radius: 6px;
            text-align: center;
            line-height: 40px;
            font-size: 24px;
            color: #fff;
        }
        #list>div{
            width:100%;
            height: 120px;
            display: flex;
            justify-content: space-around;
            align-items: center;
            overflow: hidden;
            border-bottom: 1px solid #acacac;
        }
        .name{
            font-size: 24px;
        }
        .price{
            color:red;font-size: 32px;
        }
    </style>
    <script type="text/javascript">

        document.addEventListener('plusready', function(){
            //console.log("所有plus api都應該在此事件發生後呼叫,否則會出現plus is undefined。"

        });

    </script>
</head>
<body>
    <div id="list">
        <div>
            <div class="name">
                口罩防霾口罩
            </div>
            <div class="price">
                0.01
            </div>
        </div>
        <div>
            <div class="name">
                圍巾
            </div>
            <div class="price">
                0.01
            </div>
        </div>
        <div>
            <div class="name">
                領結
            </div>
            <div class="price">
                0.01
            </div>
        </div>
    </div>
    <button id="pay">支付一千萬</button>

</body>
<script type="text/javascript">

    var ALI_SERVICE = "http://demo.dcloud.net.cn/helloh5/payment/alipay.php?total=";
    document.getElementById('pay').addEventListener('touchend',function(){
        var price = document.getElementsByClassName('price');
        var total =0.0;
        for(var i=0;i<price.length;i++){
            total+=parseFloat(price[i].innerText);
        }
        alert("付款金額為:"+total);
        //0.獲取支付模組
        var pay=plus.payment;
        //1.獲取到手機裡面全部支付渠道
        pay.getChannels(function(payWays){
            alert(JSON.stringify(payWays));
            for(var i=0;i<payWays.length;i++){
                if(payWays[i].id == 'alipay'){
                    plus.nativeUI.toast('準備呼叫阿里支付');
                    var currentPayWays=payWays[i];
                    getOrders( ALI_SERVICE+total,function(order){
                        pay.request(currentPayWays,order,function(){
                            alert('付款成功,謝謝土豪!~~');
                        })
                    })

                }
            }
        })
        //2.request(支付渠道,支付訂單資訊【ajax介面拿到資訊,fn】) 進行支付
    })
    //訂單資訊
    var getOrders = function(url,fn){
        var xhr = new XMLHttpRequest();
        xhr.open('GET',url,true);
        xhr.send();
        xhr.onreadystatechange=function(){
            if(xhr.status =200 && xhr.readyState ==4){
                fn(xhr.responseText);
            }
        }
    }
</script>

4.手機裡面開啟百度地圖或者高德地圖原生App

百度地圖祕鑰:

ios : lE1xkhcUtw7*******dWvVCqDr6GoYN

android : qF2y1S3jF63********Au54ID7NMaLG

  1. 配置當前manifest裡面許可權 appkey
  2. Maps模組管理地圖控制元件,用於在web頁面中顯示地圖控制元件,提供各種介面操作地圖控制元件,如新增標點、路線等。通過plus.maps可獲取地圖管理物件。
  3. plus.map.api()呼叫就可以了
    • plus.maps.openSysMap( dst, des, src );
    • dst: ( Point ) 必選 導航目的地座標
      要求使用WGS-84座標系值,即GPS獲取的值。
    • des: ( DOMString ) 必選 導航目的地描述
      要求使用WGS-84座標系,即GPS獲取的值。
    • src: ( Point ) 必選 導航起始地描述
<body>
        <button id="map">開啟百度地圖</button>
    </body>
    <script type="text/javascript">
        var btn = document.getElementById('map');
        btn.ontouchend=function(){
            // 設定目標位置座標點和起始位置座標點
            var dst =null;
            var src = new plus.maps.Point(116.335,39.966); // 大鐘寺
            //自己的定位
            plus.geolocation.getCurrentPosition(function(loc){
                dst = new plus.maps.Point(loc.coords.longitude,loc.coords.latitude);
                // 呼叫系統地圖顯示 
                plus.maps.openSysMap( dst, loc.addresses, src );
            })


        }
    </script>

5.掃面二維碼

// 擴充套件API載入完畢後呼叫onPlusReady回撥函式 
document.addEventListener( "plusready", onPlusReady, false );
// 擴充套件API載入完畢,現在可以正常呼叫擴充套件API
function onPlusReady() {
    var e = document.getElementById("scan");
    e.removeAttribute( "disabled" );
}
var scan = null;
function onmarked( type, result ) {
    var text = '未知: ';
    switch(type){
        case plus.barcode.QR:
        text = 'QR: ';
        break;
        case plus.barcode.EAN13:
        text = 'EAN13: ';
        break;
        case plus.barcode.EAN8:
        text = 'EAN8: ';
        break;
    }
    alert( text+result );
    alert('開始下載');
    var d=plus.downloader.createDownload(result,{method:'GET'},function(){
        plus.nativeUI.toast('下載成功 請開啟')
    });
    d.start();
}
function startRecognize() {
    scan = new plus.barcode.Barcode('bcid');
    scan.onmarked = onmarked; 
}
function startScan() {
    scan.start();
}
function cancelScan() {
    scan.cancel();
}
function setFlash() {
    scan.setFlash();
}

6. 下載

這裡寫圖片描述

7.感測器

Accelerometer模組管理裝置加速度感測器,用於獲取裝置加速度資訊,包括x(螢幕水平方向)、y(垂直螢幕水平方向)、z(垂直螢幕平面方向)三個方向的加速度資訊。通過plus.accelerometer獲取裝置加速度感測器管理物件。

感測器

能把具有感知能力的硬體裝置叫做感測器

document.addEventListener('plusready',function(){
    //如何獲取手機裡面重力感測加速器 感測器(sensor)
    //IOT,BIG,DATA,線上教育,雲
    //能把具有感知能力的硬體裝置叫做感測器
    //getCurrentAcceleration獲取當前加速度資訊
    var acc =plus.accelerometer.getCurrentAcceleration(function(s){
        alert(JSON.stringify(s));
        var x = s.xAxis;
        var y = s.yAxis;
        var z = s.zAxis;
        document.getElementsByClassName('x')[0].innerHTML = x;
        document.getElementsByClassName('y')[0].innerHTML = y;
        document.getElementsByClassName('z')[0].innerHTML = z;
    });

},false);

8.css+js風格接近原生的框架

UI框架:
mui,amaze,阿瓦隆,yo,frozen,

9.前端單元測試工具:

mocha,karma,jest
jest:用於做當前開發測試 改良了mocha
主要用於敏捷開發的測試

敏捷開發:每個階段中的任務都可以拿來單獨測試
jest是facebook製作的,為react量身定製的,其他任何內容都可以使用。jest是基於node.js寫的
1. 安裝jest到全域性cnpm install jest -g cnpm install jest-cli -g
2. 建立專案jest安裝到區域性 cnpm install jest –save-dev
3. 編寫被測試的api

app.js:

var app = function(a,b){
    return a+b;
}
module.exports = app;
test.js:

test('測試方法app',function(){
    //引入需要測試的模組
    var app = require('./app');

    expect(app(2,11)).toBe(13);   //toBe()斷言 執行成功時候返回的結果
})
  1. 修改package.json內容
package.json:

{
  "devDependencies": {
    "jest": "^18.0.0"
  },
  "script":{
    "test":"jest"
  }
}

這裡寫圖片描述
5. 通過命令進行測試

jest

這裡寫圖片描述
單元測試

寫的任何的一個方法單元,可以測試任何小的api,或者大的模組
在app.js寫一個api,test.js通過jest測試

9.搭建cordova(phonegap)混合開發環境

cordova需要虛擬機器安卓或者iOS
1. 安裝cordova到全域性 cnpm install cordova -g
2. 建立cordova專案 cordova create MyApp
3. 給專案新增平臺支援
- cd MyApp
- cordova platform add browser
4. 執行專案 cordova run ios

基於一個桌面外掛來進行開發:
phonegap desktop
建立和部署專案

還可以在手機上面安裝phonegap developer

小例子:
.重力加速其獲取實現簡易搖一搖功能

var btn = document.getElementById('yao');
    btn.addEventListener('touchend',function(){
        var w = plus.accelerometer.watchAcceleration(function(s){

            var x = Math.round(Math.abs(s.xAxis));
            var y = Math.round(Math.abs(s.yAxis));
            var z = Math.round(Math.abs(s.zAxis));
            console.log('x'+x);
            console.log('y'+y);
            console.log('z'+z);
            if(x>1 && y>4 && z>4){
                alert('中獎了');
                //clearWatch(watchID)  關閉監聽裝置加速度資訊
                plus.accelerometer.clearWatch(w);
                return;
            }
        },function(){},false);
    })