html5混合開發是什麼

2022-05-30 18:02:16

html5混合開發是指同時採用原生(程式語言)與H5(Web語言)技術來開發應用;混合開發是一種取長補短的開發模式,原生程式碼部分利用外掛或者其它框架為H5提供容器,程式主要的業務實現、介面展示都是利用與H5相關的技術進行實現的。

本教學操作環境:windows7系統、HTML5版、Dell G3電腦。

目前市場上主流的APP分為三種:原生APP、Web APP(即HTML5)和混合APP三種,相對應的定 制開發就是原生開發、H5開發和混合開發。

混合開發是什麼?

混合開發,是指在開發一款App產品的時候,為了提高效率、節省成本而利用原生與H5的開發技術的混合應用。通俗點來說,這就是網頁的模式,同時採用網頁語言和程式語言進行開發,通常由「H5雲網站+APP應用使用者端」兩部份構成。

混合開發是一種取長補短的開發模式,原生程式碼部分利用外掛或者其它框架為H5提供容器,程式主要的業務實現、介面展示都是利用與H5相關的技術進行實現的。很多APP都是利用混合開發模式而成的。

優點:

1、開發效率高,節約時間。同一套程式碼Android和IOS基本上都可使用;

2、更新和部署比較方便,每次升級版本只需要在伺服器端升級即可,不再需要上傳到App Store進行稽核;

3、程式碼維護方便、版本更新快,節省產品成本;

4、比web版實現功能多;

5、可離線執行。

缺點:

1、功能/介面無法自定:所有內容都是固定的,不能換介面或增加功能;

2、載入緩慢/網路要求高:混合APP資料需要全部從伺服器調取,每個頁面都需要重新下載,因此開啟速度慢,網路佔用高,緩衝時間長,容易讓使用者反感;

3、安全性比較低:程式碼都是以前的老程式碼,不能很好地相容最新手機系統,且安全性較低,網路發展這麼快,病毒這麼多,如果不實時更新,定期檢查,容易產生漏洞,造成直接經濟損失;

4、既懂原生開發又懂H5開發的高階人才難找。

混合APP原理

混合APP通常由前端負責大部分介面開發和業務邏輯,原生負責封裝原生功能供前端呼叫,二者以 WebView 作為媒介建立通訊,從而既擁有 Web 開發的速度優勢,又能擁有強大的原生能力。

從一個前端開發者的角度來看,混合應用可以簡單地理解為讓前端頁面跑在一個特殊的瀏覽器環境裡,這個環境除了常規 Web API之外,還額外提供了很多可以直接呼叫手機原生能力的 API。

從一個原生開發者的角度來看,混合應用其實就是一個原生開發的 App 外殼,這個外殼將原生功能封裝成很多 API 並注入到 WebView 裡,然後將前端頁面打包進 App,App 啟動時用 WebView 載入前端頁面,剩下的就全交給前端了。

web網頁和ios,android進行互動(原理)

web網頁和ios,android進行互動(原理)

  • web網頁呼叫ios和android

  • web頁面傳送一個假的請求, ios,android攔截請求,解析是真請求還是假請求

    • 真請求放行

    • 假請求攔截,解析出真實的功能需求欄位,

    • 通過釋出訂閱,傳遞給相應檔案,做出相應的操作

傳送一個假請求,讓原生開發攔截(該加請求的url路勁需要和ios,android設定的保持一致)
ios攔截請求

// 繼承類MyURLProtocol,子類NSURLProtocol
// MyURLProtocol.h檔案
#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN
@interface MyURLProtocol: NSURLProtocol



@end
// MyURLProtocol.m檔案
#import "MyURLProtocol.h"
@implementation MyURLProtocol

// 手機app是否可以載入請求
+ (BOOL)canInitWithRequest:(NSURLRequest *)request{
    
    //攔截到請求後,獲取請求的字串
    NSString *path = request.URL.absoluteString;
    
    // 判斷字串是否以協商好的虛假協定開頭(如emma://開頭)
    if([path hasPrefix:@"emma://"]){
        // 這是個假請求
        // 獲取該請求真實目的
        NSString *action = [path substringFromIndex:7];
        
        // 該檔案不能呼叫一些原生功能,需要裝有webview的檢視檔案才行,所以要將該請求欄位傳給檢視檔案
        // 檔案間不能通訊,用釋出訂閱(ios自帶一個釋出訂閱)
        if([action isEqualToString:@"captureImage"]){
            // 傳送訊息,拍照
            [[NSNotificationCenter defaultCenter] postNotificationName:@"captureImage" object:nil userInfo:nil];
        }
        
        // 攔截掉該請求
        return NO;
    } else {
        // 真請求
        // 允許該請求通過
        return YES;
    }
}
    
@end
// 裝有webview的頁面(檔案)
#import "MyURLProtocol.h"

// 註冊MyURLProtocol,可以實現攔截
[NSURLProtocol registerClass:[MyURLProtocol class]];

// 訂閱訊息,拍照的訊息
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleCaptureImage) name:@"captureImage" object:nil];

// 訂閱拍照訊息的處理常式
-(void)handleCaptureImage{
    // 拍照的操作
}

html傳送假請求

<!-- // HTML檔案傳送假請求 -->
<a href="emma://captureImage">拍照</a>
<a href="emma://openweChart">開啟微信</a>
<a href="emma://scan">掃一掃</a>
// js檔案傳送假請求
window.location.href = 'emma://captureImage';

ios,android傳值給web網頁

先在網頁上準備一個獲得結果的回撥函數

當原生需要傳值給網頁時,向開啟網頁的視窗動態插入js程式碼,這段js程式碼就是呼叫回撥函數的程式碼

web程式碼

import React, { useState } from 'react'
function WebView() {
 const [image, setimage] = useState('');
 
 const btnAction = () => {
     // 傳送一個假的請求,觸發原生
      window.location.href = 'emma://captureImage';
      
      // 在window設定了一個回撥方法(模組化開發,ios只能找到window全域性作用域,所以只能掛在window上)
      window.onCaptureImageCallback = (value) => {
          setimage(value)
      }
 }
 
 return (
 	<div>
     	<button onClick={btnAction}>拍照</button>
         <img src={image} />
     </div>
 )
}

ios程式碼

// webview的檔案
// 需要將webview提升成全域性變數(掛載webview的函數和處理髮布訂閱事件的函數是兩個作用域)
@property (strong, nonatomic) WKWebView *webview;

// 事件處理常式中
// 向視窗注入js程式碼
NSString *jsMethod = [NSString stringWithFormat:@"window.onCaptureImageCallback('%@')", @"需要傳給網頁的值"];
[self.webview evaluateJavaScript:jsMethod completionHandler:nil];

擴充套件知識:原生開發和Web APP (HTML5)開發的優缺點

原生開發

原生開發(Native App開發),是在Android、IOS等行動平臺上利用官方提供的開發語言、開發類庫、開發工具進行App開發。比如Android是利用Java、Eclipse、Android studio;IOS是利用Objective-C 和Xcode進行開發。

通俗點來講,原生開發就像蓋房子一樣,先打地基然後澆地樑、房屋結構、一磚一瓦、鋼筋水泥、電路走向等,都是經過精心的設計。原生APP也一樣:通過程式碼從每個頁面、每個功能、每個效果、每個邏輯、每個步驟全部用程式碼寫出來,一層層,一段段全用程式碼寫出來。

優點:

1、可存取手機所有功能(如GPS、攝像頭等)、可實現功能最齊全;

2、執行速度快、效能高,絕佳的使用者體驗;

3、支援大量圖形和動畫,不卡頓,反應快;

4、相容性高,每個程式碼都經過程式設計師精心設計,一般不會出現閃退的情況,還能防止病毒和漏洞的出現;

5、比較快捷地使用裝置端提供的介面,處理速度上有優勢。

缺點:

1、開發時間長,快則3個月左右完成,慢則五個月左右;

2、製作費用高昂,成本較高;

3、可移植性比較差,一款原生的App,Android和IOS都要各自開發,同樣的邏輯、介面要寫兩套;

4、內容限制(App Store限制);

5、必須等下載完畢使用者才可以開啟,獲得新版本時需重新下載應用更新。

Web APP (HTML5)開發

HTML5應用開發,是利用Web技術進行的App開發,可以在手機端瀏覽器裡面開啟的網站就稱之為webapp。Web技術本身需要瀏覽器的支援才能進行展示和使用者互動,因此主要用到的技術是HTML、CSS、Javascript以及jQuery、Vue、React等JS框架。

優點:

1、支援裝置範圍廣,可以跨平臺,編寫的程式碼可以同時在Android、IOS、Windows上執行;

2、開發成本低、週期短;

3、無內容限制;

4、適合展示有大段文字(如新聞、攻略等),且格式比較豐富(如加粗,字型多樣)的頁面;

5、使用者可以直接使用最新版本(自動更新,不需使用者手動更新)。

缺點:

1、由於Web技術本身的限制,H5移動應用不能直接存取裝置硬體和離線儲存,所以在體驗和效能上有很大的侷限性;

2、對聯網要求高,離線不能做任何操作;

3、功能有限;

4、APP反應速度慢,頁面切換流暢性較差;

5、圖片和動畫支援性不高;

6、使用者體驗感較差;

7、無法呼叫手機硬體(攝像頭、麥克風等)。

相關推薦:《html視訊教學

以上就是html5混合開發是什麼的詳細內容,更多請關注TW511.COM其它相關文章!