Skip to content

🔌 客户端 API 列表

API 命名空间

所有 API 约定均使用 DSBridge-Android/DSBridge-IOS 作为调用函数和响应的功能。

在当前实现,没有定义 API 资源的情况下,不使用命名空间功能,将 API 添加到 DWebView 实例时,命名空间参数为 null

Android

java
dwebView.addJavascriptObject(new H5Api(), null);

iOS

object-c
[dwebview addJavascriptObject:[[H5Api alloc] init] namespace:nil];

为提高代码语义化,H5Api 类中实现的函数名 以具名行为的方式命名。

如业务 user 业务名称约定为 getUser; 响应/处理方法以 on 为前缀,如分享按钮 setShare

参数

返回值

Android

返回值典型值类型备注
truetrue falseBoolean

iOS

返回值典型值类型备注
1``String

钩子/生命周期

onWebViewCreated

onWebViewCreated 生命周期,网页代码开始运行,响应网页,以便网页运行后续续业务。

示例

java
@JavascriptInterface
public void onWebViewCreated(Object msg, CompletionHandler<Boolean> handler) {
    handler.complete(true);
}

notifyWebViewUpdated

notifyWebViewUpdated 生命周期,有配置或数据更新时,通知网页。调用 dWebView.callHandler 函数,传入 updateObj JSONObject 参数

如用户完成登录后,用户的信息将会被更新,那么客户端调用 notifyWebViewUpdated,传参数 { "name": "user" }

网页获取参数后主动调取 getUser ,获取最新的用户信息,进入后续的流程

参数

updateObj
json
{
  "name": "user"
}
name类型备注
userString用户信息

返回值

返回值典型值类型备注
retValuetrue falseBooleanretValue 表示 updated 的响应结果

示例

java
JSONObject updateObj = new JSONObject();
try { 
    updateObj.put("name", "user"); 
} catch (JSONException e) {
    e.printStackTrace();
}

dWebView.callHandler("notifyWebViewUpdated", new Object[]{ updateObj }, new OnReturnValue<Boolean>() {
    @Override
    public void onValue(Boolean retValue) {
        showToast(retValue);
    }
});

事件

notifyWebViewUpdated 生命周期不同的是,notifyEvent 不强制开发者更新对应的数据。

如用户登录后,调用 notifyEvent,传参数 { "name": "loginSuccess" } ,表示用户成功登陆。

notifyEvent

参数

eventName
json
{
  "name": "shareSuccess"
}
eventName类型备注
shareSuccessString点击分享到社交应用
loginSuccessString关闭登录页之后
BindPhoneSuccessString绑定手机成功,多数情况下是单独调起绑定手机页面后的成功回调

示例

java
JSONObject eventName = new JSONObject();
try { 
    eventName.put("name", "shareSuccess"); 
} catch (JSONException e) {
    e.printStackTrace();
}

dWebView.callHandler("notifyEvent", new Object[]{ eventName }, new OnReturnValue<Boolean>() {
    @Override
    public void onValue(Boolean retValue) {
        showToast(retValue);
    }
});

业务方法

getUserByNative

返回用户信息

返回值

返回值典型值类型备注
jsonuserJSONObject数据结构

WARNING

前端先调用 getLoginStatusByNative,判断是否登录,避免得到空的返回值

示例

java
@JavascriptInterface
public void getUserByNative(Object _null, CompletionHandler<JSONObject> handler) throws JSONException {
    JSONObject user = new JSONObject();
    user.put("username", "Mather");
    handler.complete(content);
}

getLoginStatusByNative

返回用户是否登录的状态

参数

无参数

返回值

返回值典型值类型备注
truetrue falseBoolean

onSetShare

设置网页分享信息,标题、描述、分享地址和分享小图

参数

shareObject

json
{
  "title": "分享标题",
  "desc" : "分享描述",
  "icon" : "http://images.infzm.com/medias/2018/0816/136580.jpeg@770x510",
  "url"  : "http://www.infzm.com/content/136473"
}

返回值

返回值典型值类型备注
truetrue falseBoolean

示例

java
@JavascriptInterface
public void onSetShare(Object shareObject, CompletionHandler<Boolean> handler) throws JSONException {
    JSONObject shareObject = (JSONObject) shareObject;
    String title       = shareObject.getString("title");
    String desc        = shareObject.getString("desc");
    handler.complete(true);
}

onOpenNativeLogin

仅仅是登录页,无后续绑定手机流程。

WARNING

为避免逻辑冲突,建议先判断登录状态,再调起登录页

WARNING

建议前端开发者使用 onOpenNativePage API 调起登录页

参数

无参数

返回值

返回值典型值类型备注
truetrue falseBoolean

示例

java
@JavascriptInterface
public void onOpenNativeLogin(Object _null, CompletionHandler<JSONObject> handler) throws JSONException {
    //launch login page
    handler.complete(true);
}

onOpenNativePage

打开客户端页面,其数据结构参考[APP 路由参数支持表]

参数

nativePageParams
json
{
  "version": "1.1.0",
  "link_type": "10",
  "terms_id": "6"
}

返回值

返回值典型值类型备注
jsonopenNativePage-Success / openNativePage-FailJSONObject数据结构

openNativePage-Success

json
{
  "code": "200",
  "msg": "路由存在"
}

openNativePage-Fail

json
{
  "code": "404",
  "msg": "路由不存在"
}

示例

java
@JavascriptInterface
public void onOpenNativePage(Object nativePageParams, CompletionHandler<Boolean> handler) throws JSONException {
    JSONObject nativePage = (JSONObject) nativePageParams;
    double link_type = nativePage.getString("link_type");
    
    JSONObject response = new JSONObject();
    try { 
        response.put("code", "200"); 
        response.put("msg", "路由存在");
    } catch (JSONException e) {
        e.printStackTrace();
    }
    
    handler.complete(response);
}