WebView js 封装接入指南


本文档是对 WebView h5 游戏的 Android Studio 模板工程的说明, 下载模板工程 工程下有三个模块:

在正式接入前,要按其他4399游戏那样注册并获取游戏 id,即 game key

集成流程

引入SDK

dependencies {
    // 运营 SDK,建议使用最新版本,可通过浏览仓库地址或向运营咨询版本
    implementation "cn.m4399.sdk:operateBZ:2.4.3"
}

调整游戏打包配置

在 app 或 demo 的 build.gradle

android {
    defaultConfig {
        applicationId "cn.m4399.oeprate.h5demo" // 游戏包名
        versionCode 1                           // 版本数字 
        versionName "1.0.0"                     // 版本名称
    }
}

AndroidManifest.xml

在 app 或 demo 的 AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.rpgsample">

    <application
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:theme="@style/AppTheme"
        tools:ignore="UnusedAttribute">
        
</manifest>

接口调用

封装 js 接口

版署 SDK 用 java 开发,而 h5 游戏无法直接调用 java 接口,因此要先将 SDK 接口封装成可被注入到 js 接口类
具体做法参考 operateBZjs/src/main/java/com/operatebz/js/OperateBZJsApi

游戏可以按需要自由定制

注册本地对象

h5 游戏都由某种 WebView 加载,同时也可以注入一个 js 对象,词对象是上面封接口类的示例,比如

mWebView.addJavascriptInterface(OperateBZJsApi(this, mWebView), "operateBZNativeApi")

这之后,游戏 js 脚本中就可以通过 operateBZNativeApi 调用接口,如

operateBZNativeApi.initSDK(gameId, screenOrientation, compatNotch, cbName, logoutCbName);

但是,为了在游戏代码中调用方便,比如方便参数转换,可以对 operateBZNativeApi 再次封装
具体做法参考 demo/src/main/assets/js/operateBZ_h5_test.js

调用 js 接口

游戏代码先引入此 js 文件,如 demo/src/main/assets/index.html

<script src="js/operateBZ_h5_test.js" type="text/javascript"></script>

此后,可以调用 js 接口,如 demo/src/main/assets/index.html 所示

function _init(gameId, screenOrientation, compatNotch) {
    operateBZJsApi.init(gameId, screenOrientation, compatNotch, initCallback);
    _setUserListener();
}

function initCallback(code, message) {
    console.log('initCallback')
    console.log(message)
    document.getElementById('ext-board').value=' 状态/状态码:' + code + '\n ' + message;
    if (+code === 0) {
        let isLoggedIn = operateBZJsApi.isLogin();
        if (isLoggedIn) {
            _getUser();
        }
    }
}

_init('40001', 0, true)

接口调用

以下接口比较重要,接口说明见 demo/src/main/assets/js/operateBZ_h5_test.js 的 ·operateBZJsApi· 对象下的方法:

更多信息可以参考原始的 Android java 接口

打包

签名

游戏应使用apktool或 as 生成签名文件,或使用已有签名文件
并参考app/build.gradlesigningConfigs定义与使用方式配置打包签名

替换游戏包

最后,设置游戏地址或将打包好的游戏拷贝到项目。
以后一种方式为例,删除demo/src/main/assets下原有所有文件,并将编译好h5游戏文件移动到其下

完成最后的步骤后,同步项目,即可打包验证