上一篇介紹了Cordova開發(fā)環(huán)境搭建以及使用李茫,不過該文是依賴CordovaLib.xcodeproj工程的也就是說必須要導(dǎo)入相關(guān)的工程以及文件婚瓜,而我一直比較不喜歡這種方式腐泻,于是嘗試只導(dǎo)入我需要的模塊文件來構(gòu)建我們的App梗摇,過程就不多說了斤贰,來看看成過吧(只是一個簡單的登錄示例)。
1 新建一工程命名Cordova
導(dǎo)入我們需要的文件如圖
有一部分文件夾和文件涉及到公司信息了殖侵,所有打個碼贸呢。下面介紹一下各文件:
代號 | 介紹 |
---|---|
1 | 存放html文件 |
2 | js文件,h5與原生交互用得到拢军,想用cordova必須要懂點js |
3 | 是cordova的一些類文件(忘了展開了楞陷,一會附圖吧),有一些會報錯需要導(dǎo)入#import <Foundation/Foundation.h> |
4 | js執(zhí)行文件 |
5 | js執(zhí)行文件 |
6 | 原生類文件h5調(diào)用 |
這里就是你自己創(chuàng)建的類6(見上圖)。
如果是加載本地文件度陆,路徑一定要設(shè)置正確才能加載出來艾凯。需求不一樣這里就說怎么加載html了。到此基本配置完成
開始寫代碼
我們的html同事提供一個plugin.js文件懂傀,這個文件很重要趾诗,這是h5調(diào)用原生方法的入口,我們h5同事提供了這樣一個方法:
var Utils = (function() {
/*
* apiGateWayPost 請求原聲數(shù)據(jù)
* @param {object} success
**/
var __apiGatePost = function(serviceName, para, success, onErr) {
if(isH5Test) {
var ajax = new MYAJAX(serviceName, para, success,onErr);
} else {
loadShow();
var __data = {
"method": serviceName,
"para": para
};
function onAPISuceess(data) {
loadHide();
success(data);
}
function onErr(data) {
loadHide();
}
CDVOriginalPort('apiGateWayPost', __data, onAPISuceess, onErr);
}
}
}
文件4里面依然是js執(zhí)行代碼:
function CDVOriginalPort(RequestType, RequestData, fun_callbackSuccess, fun_callbackFail) {
if (RequestType == "apiGateWayPost") { //post請求
pact_apiGateWayPost(RequestData, fun_callbackSuccess, fun_callbackFail);
}
}
//post請求
function pact_apiGateWayPost(RequestData, fun_callbackSuccess, fun_callbackFail) {
oldAlert('111');
Pact.apiGateWayPost(RequestData, fun_callbackSuccess, fun_callbackFail);
}
文件5還是js執(zhí)行代碼:
cordova.define("cordova-plugin-Pact.Pact", function(require, exports, module) {
var exec = require('cordova/exec');
module.exports = {
apiGateWayPost: function(RequestData, onSuccess, onError) {
oldAlert('222');
exec(onSuccess, onError, "Pact", "apiGateWayPost", [RequestData]);
},
}
}
文件4和文件5是需要我們原生和h5人員溝通之后蹬蚁,我們來維護(hù)的恃泪。
看我們原生類6中的代碼:
- (void)apiGateWayPost:(CDVInvokedUrlCommand *)command {
NSDictionary *old_dic = [command.arguments lastObject];
NSString *method = old_dic[@"method"];
NSMutableDictionary *para = old_dic[@"para"];
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"333" preferredStyle:UIAlertControllerStyleAlert];
UIApplication *app = [UIApplication sharedApplication];
AppDelegate *delegate = (AppDelegate*)app.delegate;
[delegate.window.rootViewController presentViewController:alert animated:YES completion:nil];
}
這里我并沒有做什么處理,只是給個提示框能不能走到這里而已犀斋,只要走到這個方法就說明h5已經(jīng)可以調(diào)用我們原生的方法了贝乎,既然這樣剩下的就要看我們心情來處理了,嘿嘿叽粹。
如果需要給h5傳值的話可以在上方法中實現(xiàn):
[self.commandDelegate runInBackground:^{
CDVPluginResult *result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:nil];
[self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
}];
具體怎么傳還要看具體情況了览效,看效果:[圖片上傳中...(ACA719F3-88BB-41F2-8D49-F943C54C9F1E.png-a0c1e9-1517565156197-0)]
整個流程大體就是這樣了,因為工程里面涉及一些公司信息虫几,沒有上傳demo锤灿,以后時間可以補(bǔ)發(fā)一份,看完依然有疑問的小伙伴可以私下找我持钉。個人感覺這種方式比起上一篇文章說的集成方式要省事一些衡招,個人感覺哈。
謝謝各位捧場啦每强。先寫到這里始腾,先寫到這里~