ZWebView使用簡(jiǎn)單介紹-Android

ZWebView

ZWebView for Hybird App,建立移動(dòng)端和Web的JS橋接框架,主要包含了多種常用協(xié)議的約束和定義。Android的WebView使用更方便。

最新介紹

https://www.zyao89.cn/blog/article/5a97fa8b632e353ffd14d44a
可在此網(wǎng)站進(jìn)行留言。

Github: ZWebView.git

更新說(shuō)明

  • 1.0.0 創(chuàng)建Android庫(kù)zweb
  • 1.0.1 更新一些簡(jiǎn)單問(wèn)題
  • 1.0.2 添加新注解@ZJson,修復(fù)IOC實(shí)現(xiàn)方式無(wú)法傳json參數(shù)
  • 1.0.3 添加新注解@ZData,傳入字符串,web端接收到的參數(shù)格式為 { 'ZData', String }

Web

分為三種方式

  1. Vue插件注入方式(有些問(wèn)題,不建議使用)

使用Vue時(shí),可導(dǎo)入vue-zweb插件使用。具體參考 vue-zweb

  1. H5標(biāo)簽協(xié)議注入方式

可通過(guò)在html文件中引入 <script> 標(biāo)簽,控制引入框架的位置。

協(xié)議在標(biāo)簽的 src 下,以地址方式注入,具體格式采用:zweb:// 開(kāi)頭。

目前支持的協(xié)議如下:

1. zweb://__init__

具體引入方式如下:

<script type="text/javascript" src="zweb://__init__"></script>
  1. 普通手動(dòng)注入方式

Android

引入方式:

Gradle > v3.0

implementation 'com.zyao89.view:zweb:1.0.2'

Gradle < v3.0

compile 'com.zyao89.view:zweb:1.0.2'

安卓也對(duì)應(yīng)采用三種交互方式

對(duì)應(yīng)的3中枚舉類(lèi)型如下:

public enum InjectionMode
{
    // vue插件方式,引入  vue-zweb.js  例如:<script type="text/javascript" src="static/libs/vue-zweb.min.js"></script>
    VuePlugin,
    // 協(xié)議方式:zweb://  例如:<script type="text/javascript" src="zweb://__init__"></script>
    Protocol,
    // 普通人工引入 <script type="text/javascript" src="static/zweb.js"></script>
    Normal
}

基本使用方式:

  • Step1,初始化:
    在自定義的Application中初始化 ZWebView,方法如下:
@Override
public void onCreate()
{
    super.onCreate();

    ZWebInstance.init(this);
}
  • Step2,構(gòu)建 ZWebConfig 配置文件,并創(chuàng)建 ZWeb 對(duì)象實(shí)例。
String MAIN_HTML = "file:///android_asset/index.html";

// 1. 創(chuàng)建配置文件,并帶入主頁(yè) URL
ZWebConfig config = new ZWebConfig.Builder(ZWebConstant.MAIN_HTML_TEST)
    // 注冊(cè)狀態(tài)監(jiān)聽(tīng)
    .setOnStateListener(this)
    // 注冊(cè)原生協(xié)議UI實(shí)現(xiàn)
    .setNativeMethodImplement(this)
    // 注冊(cè)一些特殊的實(shí)現(xiàn)方法
//  .setOnSpecialStateListener(this)
    // 選擇注入模式
    .setInjectionMode(InjectionMode.VuePlugin)
    // 自動(dòng)注入框架腳本JS(建議配置)
    .autoInjectFramework()
    // 自動(dòng)注入擴(kuò)展方法
    .autoInjectExtendsJS()
    // 添加 assets 中js文件注入
//  .addInjectJSAssetsFile("js/test.js")
    // 添加 raw 中js文件注入
//  .addInjectJSRawFile(R.raw.index_test)
    .build();

// 2. 創(chuàng)建ZWeb對(duì)象實(shí)例.
mZWebInstance = ZWebInstance.createInstance(config);

  • Step3,傳遞Activity的生命周期,如下:
// mRootView 為根ViewGroup容器 (必須)
@Override
protected void onCreate(Bundle savedInstanceState)
{
    //...
    mZWebInstance.onActivityCreate(mRootView);
    //...
}

// 分別實(shí)現(xiàn)其他生命周期傳遞
@Override
public void onBackPressed()
{
    if (!mZWebInstance.onActivityBack())
    {
        super.onBackPressed();
    }
}

@Override
protected void onPause()
{
    mZWebInstance.onActivityPause();
    super.onPause();
}

@Override
protected void onResume()
{
    mZWebInstance.onActivityResume();
    super.onResume();
}

@Override
protected void onStart()
{
    mZWebInstance.onActivityStart();
    super.onStart();
}

@Override
protected void onStop()
{
    mZWebInstance.onActivityStop();
    super.onStop();
}

@Override
protected void onDestroy()
{
    mZWebInstance.onActivityDestroy();
    super.onDestroy();
}

一些內(nèi)部狀態(tài)監(jiān)聽(tīng)實(shí)現(xiàn)

以下為實(shí)現(xiàn)監(jiān)聽(tīng)狀態(tài)接口時(shí),所需要實(shí)現(xiàn)的方法。

/**
* 框架初始化成功后回調(diào)
*
* @param zWebHandler
* @param width 寬
* @param height 高
*/
void onZWebCreated(IZWebHandler zWebHandler, int width, int height);

/**
* 異常(JS如果有異常會(huì)在這里回調(diào))
*
* @param zWebHandler
* @param errorCode 錯(cuò)誤碼
* @param message 錯(cuò)誤信息
*/
void onZWebException(IZWebHandler zWebHandler, long errorCode, String message);

/**
* 網(wǎng)絡(luò)請(qǐng)求處理
*
* @param zWebHandler
* @param url         鏈接
* @param method      請(qǐng)求方法
* @param data        數(shù)據(jù)
* @param type        返回類(lèi)型
* @param controller
*/
void onZWebRequire(IZWebHandler zWebHandler, String url, String method, String data, String type, IZRequireController controller);

/**
* 異步消息請(qǐng)求
*
* @param zWebHandler
* @param cmd 命令名稱(chēng)
* @param data 數(shù)據(jù)
*/
void onZWebMessage(IZWebHandler zWebHandler, String cmd, String data, IZMessageController controller);

/**
* JS銷(xiāo)毀
*
* @param zWebHandler
*/
void onZWebDestroy(IZWebHandler zWebHandler);

/**
* JS日志信息回調(diào),可在這里記錄或打印
*
* @param zWebHandler
* @param type        類(lèi)型
* @param msg         信息
*/
void onZWebLog(IZWebHandler zWebHandler, String type, String msg);

以上接口部分實(shí)現(xiàn)方式可參考 MainActivity.java

IOC實(shí)現(xiàn) js 請(qǐng)求方法封裝

  1. 定義調(diào)用JS的方法接口
public interface RequireService
{
    @ZMethod("a") // callReceiver
    boolean callA(@ZKey("KeyA") String a, @ZKey("KeyB") String b, @ZKey("Time") long time);

    @ZFunction("init")
    boolean init(@ZKey("A") String a, @ZKey("B") String b, @ZKey("C") int c);

    @ZMethod(ZMethodName.ON_READY)
    void initParam(@ZKey("Msg") String msg, @ZKey("Skin") int skin, @ZKey("Color") int color);

    @ZFunction(ZFunctionName.REFRESH)
    void refresh();

    @ZFunction("newInit")
    boolean newInit(@ZJson String oJson);

    @ZFunction("newInit2")
    boolean newInit2(@ZData String str);
}

各種注解介紹:

@ZFunction("方法名稱(chēng)"): 用于調(diào)用JS中 ZWebSDK.extends('方法名稱(chēng)', function(oData){}); 擴(kuò)展方法的調(diào)用。

@ZMethod("監(jiān)聽(tīng)名稱(chēng)"):用于JS中 ZWebSDK.on('監(jiān)聽(tīng)名稱(chēng)', function(oData){}); 注冊(cè)監(jiān)聽(tīng)的方法調(diào)用。

@ZKey("參數(shù)名稱(chēng)"):JS中Object參數(shù)鍵值名稱(chēng)。

@ZCmd("cmd名稱(chēng)"):用于 onZWebMessage 方法回調(diào)中,cmd參數(shù)的映射。具體使用方法可以參考Demo。(針對(duì)Message做映射解析時(shí)使用)。

@ZJson:JS中Object參數(shù)的字符串(json)。

@ZData:參數(shù)為字符串。

  1. 創(chuàng)建接口服務(wù)對(duì)象實(shí)例,并進(jìn)行調(diào)用
mRequireService = mZWebInstance.create(RequireService.class);

通過(guò)使用 mRequireService 提供的方法,調(diào)用JS。如下:

mRequireService.callA("我是一個(gè)堅(jiān)挺的消息。。。", "小A你好?。?, time);

JS調(diào)用原生提供的方法

  1. 使用現(xiàn)有的 void onZWebMessage(IZWebHandler zWebHandler, String cmd, String data, IZMessageController controller); 進(jìn)行方法解析,并異步返回結(jié)果。

    參數(shù) cmd :定義的命令名稱(chēng)。

    參數(shù) data: 定義的參數(shù)。

    controller :可進(jìn)行異步的結(jié)果返回?;蛘呃?controller.parseMessage(this.mParseMessage); 此方法進(jìn)行方法解析。

  2. 使用原生 @JavascriptInterface 注解的方法進(jìn)行擴(kuò)展。

    框架在 ZWebConfig 中提供了 setExposedName (String exposedName); 方法,可以擴(kuò)展一個(gè)原生的接口協(xié)議名稱(chēng)。

    然后,利用 mZWebInstance.addJavascriptInterface(object); 進(jìn)行對(duì)象中的方法注入。

iOS

暫無(wú)

Author Blog

zyao89.cn


作者:Zyao89;轉(zhuǎn)載請(qǐng)保留此行,謝謝;
原文網(wǎng)站:https://www.zyao89.cn
祝你好運(yùn),謝謝支持

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

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,628評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,159評(píng)論 25 708
  • 1 金錢(qián)和信任是互相替代品 金錢(qián)的出現(xiàn)原因是因?yàn)榇笠?guī)模交換。本質(zhì)上,金錢(qián)對(duì)于社會(huì)的意義在于記錄人對(duì)社會(huì)做出的貢獻(xiàn)值...
    alabiubiubiu閱讀 504評(píng)論 0 3
  • 文/立夏和芒種 殘陽(yáng)破血 孤燈難眠 念舊人 舊人意闌珊 斜月下 依依惜別離人散 北風(fēng)前 昨日少年 已改容顏 暮往朝...
    歡粒子閱讀 250評(píng)論 0 1
  • 1. 愛(ài)情應(yīng)該是這樣的:如果今生所有的幸運(yùn)只能遇到彼此,那我們也一定會(huì)祈禱用下輩子下下輩子所有的幸運(yùn),能夠在一起...
    宣客閱讀 574評(píng)論 3 3

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