Skip to content

🔌 客户端 API 列表(写作平台)

WARNING

假设你已了解 📖 实现方案 章节内容,如果你刚刚接手开发,那这不是你最佳的观光点。

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 类中实现的函数名 以具名行为的方式命名。

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

钩子/生命周期

onWebViewCreated

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

示例

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

onWebViewSuccess

暂定在 onWebViewCreated 后调用,该周期暂无对应的逻辑。由网页告知客户端。

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

onWebViewError

网页代码运行错误,调起客户端错误页面

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

notifyWebViewUpdated

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

如改变字体大小,实际上是修改 config 中的 fontSize,那么客户端调用该函数,并传入 { "name": "config" }

网页接收到回调后主动调取 onConfig ,获取最新的配置,并更新 UI。

参数

updateObj
json
{
  "name": "user",
  "author_id" : 1,// author_id 是 internal_user_id v8.1.7 订阅功能
}
name类型备注
configString全局应用配置
contentString文章内容更新,常用于用户登录后更新文章内容
userString用户信息

返回值

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

示例

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

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

事件

notifyEvent

event 事件,在 UI 或者网络耗时操作时候调用,通知网页

参数

eventName
eventName类型备注
clickLikeBtnSuccessString成功点击喜欢按钮

示例

java
String eventName = "clickLikeBtnSuccess";

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

onWebViewClick

网页点击事件,传达至客户端

参数

clickName
clickName类型备注
likesString点击了喜欢作品
shareWechatString点击了分享到微信按钮
shareMomentsString点击了分享到微信朋友圈按钮
sharePosterString点击了分享海报按钮
topicHomePageString点击了“去参加按钮”,进入主题详情页

示例

java
@JavascriptInterface
public void onWebViewClick(Object clickName, CompletionHandler<Boolean> handler) {

    if(clickName === "shareWechat")
    {
        //do something
    }

    handler.complete(true);
}

业务方法

WARNING

为提高客户端代码语义化,H5Api 类中实现的函数名 以具名行为的方式命名。如业务 user 业务方法应实现为 getUser

getPostsContent

返回作品详情数据

参数

参数典型值类型备注
id4String

返回值

返回值典型值类型备注
json作品详情JSON Object
作品详情(点击展开)
json
{
    "content": {
        "id": 988723,
        "type": "image", //text
        "title": "闪光的小精灵:标题不省略,标题显示完全,显示完全显示完全",
        "content": "我是一个喜欢阅读的孩子,别人的父母都是为孩子不阅读挖空心思地想办法,我却是被父母时常吆喝着放下手里的书,理由是让眼睛做短暂的休息。我经常想,书里有那么多好玩的故事,有那么多有趣事情,有那么多有血有肉的人物,甚至有许多我不曾到过的地方,为什么他们不喜欢读书,可能是他们没有体会到书的“浩瀚、博大与迷人吧”。\r\n 看到媒体有关“阅读中的真善美”的征文,我脑海里最先想到的是书。书里面那些善事、善美的儿童故事人物都活了起来,犹如童话故事里的精灵,一个个跃跃欲试,争着抢着要跳到我的笔下,以铅字的形式展现给全国的读者,好让广大读者了解他们,尤其是小朋友喜欢他们。 《草房子》里的桑桑应该是其中的一个,别看桑桑只是一个小孩子,他身上有乡村景色一般的质朴,有河水一眼见底的纯净,没有受到太多环境的污染,保持自己那份童趣纯真。桑桑有时会顽皮,有时会做错事,有时甚至会与同学打架,这是成长自然,也是孩子该有的天性,但这并不影响他的善良与心灵的美好。 在小说中桑桑做过许多善良的事,他默默的关心纸月。善良可爱的纸月也是个苦命的孩子,她与奶奶相依为命,为了躲避当地孩子的欺负,她转学到油麻地小学,结果还是有同学对她不善,好在有桑桑的关心照顾。可好景不长,纸月因家庭原因离开了心爱的校园,让人看到了生活中可惜无奈的一面。",
        "user_id": 1,
        "author": "闵诗睿",
        "phone": "13800138000",
        "school": "东城第一中学",
        "group": "初中组",
        "is_marked": 0,
        "status": 1,
        "advisor": "闵保华",
        "province": "陕西省",
        "city": "西安市",
        "district": "灞桥区",
        "created_at": "2022-02-22 17:17:21",
        "updated_at": "2022-02-22 17:17:21",
        "like_count": 100001,
        "like_state": false,
        "reviews": "每个人都活在这平凡的世界中,有人却不甘平凡,走出不凡的人生曲线。\r\n  -------------------- \r\n 每个人都活在这平凡的世界中,有人却不甘平凡,走出不凡的人生曲线。",
        "writing_theme_id": 1,
        "code": "",
        "status_cn": "已入围",
        "writing_images": [
            {
                "id": 1,
                "path": "http://images.infzm.com/cms/medias/image/22/03/02/GUwG7LS2EeZHvgh5H7oMTcDs9vNWteuMSJL8dQVK.jpeg",
                "type": "image",
                "width": 11,
                "height": 11,
            },
            {
                "id": 2,
                "path": "http://images.infzm.com/cms/medias/image/22/03/02/zZaMuS6qINEK3OklXEhnhEXhoKy8Q0aks7HhcqvH.jpeg",
                "type": "image",
                "width": 11,
                "height": 11,
            }],
        "writing_theme": {
            "id": 1,
            "title": "怎样读懂一本经典,是让我们重新认识经典作品"
        }
    },
    "user": {
        "id": 1,
        "username": "南周用户",
        "loginname": "1599999999202111010423562021110104331820211101043535",
        "headimgurl": "http://images.infzm.com/users/1/u1.jpg",
        "member_type": 2
    }
}

示例

java
@JavascriptInterface
public void getPostsContent(Object id, CompletionHandler<JSONObject> handler) throws JSONException {
    handler.complete(this.content);
}

onShare

点击分享按钮

参数

shareType
参数典型值类型备注
shareTypewechat timeline posterString微信好友、微信朋友圈、海报

返回值

返回值典型值类型备注
truetrue falseBoolean
java
@JavascriptInterface
public void onShare(Object shareType, CompletionHandler<Boolean> handler) {
    String shareType = (String) type;
    /*
    share code in here
     */
    handler.complete(true);
}

getUser

用户信息,返回数据结构到网页

返回值

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

WARNING

用户未登录时,返回空的数据结构,如下:

json
{

}

示例

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

onContentMounted

网页获取正文内容并渲染到页面后触发的回调,客户端可监听 onContentMounted 即可得知内容已显示在页面上。

参数

ContentMountedObject
json
{

}

示例

java
@JavascriptInterface
public void onContentMounted(Object ContentMountedObject, CompletionHandler<Boolean> handler) throws JSONException {
    JSONObject _ContentMountedObject = (JSONObject) ContentMountedObject;


    handler.complete(true);
}

onDevice

设备信息、客户端版本

返回值

返回值典型值类型备注
jsondeviceJSONObject数据结构
json
{
  "platform"       : "android", //ios
  "client_version" : "6.7.0"
}

示例

java
@JavascriptInterface
public void onDevice(Object _null, CompletionHandler<JSONObject> handler) throws JSONException {
    JSONObject device = new JSONObject();
    device.put("platform", "android");
    handler.complete(device);
}

onConfig

用户自定义,系统设置。包含字体样式、深色模式(夜间模式)、页面顶部、底部预留高度。

前端初次调用该方法,返默认的数据结构。内容更新后客户端需要调用 notifyWebViewUpdated API,并传入 { "name": "config" } 参数,通知前端重新调用。

返回值

返回值典型值类型备注
jsonconfigJSONObject数据结构
json
{
  "fontStyle"          : "system", //系统默认 system | 宋体 simsun
  "nightMode"          : false,    //夜间模式 true | 浅色模式 false
  "navAndStatusBarHeight": "64",      //64 个单位,网页内容顶部预留的高度
  "bottomBarHeight": "32"      //32 个单位,网页内容底部预留的高度
}

示例

java
@JavascriptInterface
public void onConfig(Object _null, CompletionHandler<JSONObject> handler) throws JSONException {
    JSONObject config = new JSONObject();
    config.put("fontSize", "normal");
    handler.complete(config);
}