Hybrid App交互方案-規(guī)范(一)

Android/iOS 功能交互

  • Android 在加載 H5 頁面的時候,需要向 WebView 里面注入一個 _JHAPP 對象,并且該對象提供一個可供 JS 調(diào)用的 api 方法;

  • iOS 在加載 H5 頁面的時候,因為蘋果不支持對象注入,所以里面是注入一個 ** _JHAPP** 方法,并且該方法也可供 JS 調(diào)用。

但是 Android 和 iOS 與 JS 交互的機(jī)制是不一樣的,所以還需要制定一下統(tǒng)一的交互規(guī)則,方便 JS 進(jìn)行方法調(diào)用。


Android 端調(diào)用可以直接拿到調(diào)用返回值:

let result = window._jh.api(); // 無參數(shù) API 調(diào)用
let result = window._jh.api('eyJuYW1lIjogInRpdGxlIn0='); // 有參數(shù) API 調(diào)用

參數(shù)解析格式:

{
    RequestId   : "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d", // 唯一調(diào)用標(biāo)識
    MethodName  : "getPlatformName", // 調(diào)用方法名稱
    Params  : null | {}, // 要調(diào)用方法的參數(shù)
}
  • RequestId : 此標(biāo)識能夠代表 JS 的唯一請求,如果是異步方法調(diào)用,可以在異步方法完成后回調(diào)該標(biāo)識;
  • MethodName : 要調(diào)用的方法名稱,請參照接口文檔進(jìn)行實現(xiàn);
  • Params : 要調(diào)用的方法的參數(shù),可以為 Null 或者是一個 Object 類型,為 Null 代表沒有參數(shù),反之則 Object 中的每一個 Key 代表一個參數(shù)項;
  • 同步返回 : Android 可以直接在方法里面返回函數(shù)調(diào)用結(jié)果,但是請也必須對返回數(shù)據(jù)進(jìn)行 Base64 編碼之后再返回;
  • 異步返回 : 有些方法需要異步返回結(jié)果,可以在方法執(zhí)行結(jié)束之后,把返回結(jié)果 Base64 編碼之后直接調(diào)用 JS 的 notify 方法。
hybrid.notify("9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d", "eyJuYW1lIjogInRpdGxlIn0=");


iOS 端調(diào)用不能直接拿到調(diào)用返回值:

window.webkit.messageHandlers._jh.postMessage('eyJuYW1lIjogInRpdGxlIn0=');
{
    RequestId   : "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d", // 唯一調(diào)用標(biāo)識
    MethodName  : "getPlatformName", // 調(diào)用方法名稱
    Params  : null | {}, // 要調(diào)用方法的參數(shù)
}
  • RequestId : 此標(biāo)識能夠代表 JS 的唯一請求,如果是異步方法調(diào)用,可以在異步方法完成后回調(diào)該標(biāo)識;
  • MethodName : 要調(diào)用的方法名稱,請參照接口文檔進(jìn)行實現(xiàn);
  • Params : 要調(diào)用的方法的參數(shù),可以為 Null 或者是一個 Object 類型,為 Null 代表沒有參數(shù),反之則 Object 中的每一個 Key 代表一個參數(shù)項;
  • 異步返回 : iOS 不能同步返回調(diào)用結(jié)果,但是可以在方法執(zhí)行結(jié)束之后,把返回結(jié)果以 Base64 編碼之后直接調(diào)用 JS 的 notify 方法。
hybrid.notify("9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d", "eyJuYW1lIjogInRpdGxlIn0=");




交互消息通知

在很多 App 場景下,H5 頁面在運(yùn)行過程中也需要根據(jù)系統(tǒng)運(yùn)行狀態(tài)及時的發(fā)生改變,但是 H5 沒有后臺運(yùn)行的能力,這會導(dǎo)致在有些業(yè)務(wù)流程中,跳轉(zhuǎn)到了原生界面進(jìn)行信息采集,但是采集之后的信息需要在不刷新 H5 頁面的情況下返回給 H5 界面進(jìn)行顯示,這時候就需要 Android/iOS 原生客戶端具備能夠及時通知 JS 更新內(nèi)容的能力。

為了解決這個問題,JS 向原生客戶端公開如下方法調(diào)用,共接收兩個參數(shù):

hybrid.notify(event/* string */, params/* string */);
  • event 代表事件名稱,可查閱事件通知文檔,了解事件名稱的含義與攜帶的參數(shù)列表。
  • params 代表事件攜帶的參數(shù),這是一個經(jīng)過 Base64 編碼之后的字符串,前段開發(fā)者可查閱事件通知文檔,了解具體的使用方法。

如果客戶端想要主動通知 H5 更新頁面的話,可以隨時調(diào)用 JS 的 jh.notify 方法,并把要投遞的消息參數(shù)給編碼好即可,由 JS 自行決定消息應(yīng)該怎么處理。




最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • day07——循環(huán)嵌套&方法 2.1 循環(huán)控制語句 break關(guān)鍵字 break:詞義:打破,打碎,破壞 用法一:...
  • 1.基本用法 在ES6之前,不能直接為函數(shù)的參數(shù)指定默認(rèn)值,只能采用變通的方法。 上面代碼檢查函數(shù)log的參數(shù)y有...
    aaa8808dde01閱讀 139評論 0 0
  • 關(guān)于函數(shù)的一些操作 回想一下java中方法的定義和調(diào)用 //java :求和 public int add(int...
    晚晚_e65f閱讀 108評論 0 0
  • (一)JSP的回顧 一、什么是JSP JSP:JavaServerPages(Java服務(wù)器端頁面) JS...
    請重置閱讀 196評論 0 0
  • 1. LNMP應(yīng)用環(huán)境 1.1 LNMP介紹 大約在2010年以前,互聯(lián)網(wǎng)公司最常用的經(jīng)典Web服務(wù)環(huán)境組合就是L...
    阿喪小威閱讀 565評論 0 0

友情鏈接更多精彩內(nèi)容