JS-Native通信协议项目汇报

李权

TbJsBridge

交互历程

window.TbJsBridge.payWithNative('0', 'c10061');
  • 在native中加入js方法
  • webiew调用相应方法能调起native方法
  • 问题:安全漏洞

链接截获

交互历程

  • native注册要截获的字段

  • webview跳转时对url进行分析

  • 成功则执行对应native代码

  • 问题:跳转到空链接、成功后无返回

链接截获

交互历程

// webview
$.location.setHref('http://tieba.baidu.com/paywithnative'
+ '?jump_tieba_native=1&wanttype=0&fromtype=c10061');
// client
if (link.contains(TbConfig.WEB_VIEW_JUMP2NATIVE) && 
    link.contains(UrlSchemaHelper.CHANGE_YINJI_SUCCESS)) {
    Bundle param = WebviewHelper.parserQuery(link);
    if (param != null && UrlSchemaHelper.CHANGE_YINJI_SUCCESS.equalsIgnoreCase(param.getString("path"))) {
	MessageManager.getInstance().dispatchResponsedMessageToUI(new
	    CustomResponsedMessage<Void>(CmdConfigCustom.CMD_YINJIN_CHANGE));
	return UrlManager.MATCH;
    }
}

TbBridge

交互现状

  • native注册对应类与方法
  • webiew发起prompt
  • native截获并执行
  • 返回执行结果

附:H5与端互调文档

http://agroup.baidu.com/ucapp/md/article/29356

TbBridge

交互现状

// webview
// android 7.0.0 以上的版本需要用 tbbridge 组件进行交互
var tbbridge = require('sglobal/widget/tbbridge');
if (tbbridge.support()) {// 是否支持 tbbridge
    tbbridge.baseCall(interfaceName, methodName, param);
    // tbbridge.baseCall(‘CommonJSBridge’, ‘startLoginModule’, {});
}
// client
public class CommonTbJsBridge implements JsPromptInterface {
	private static final String INTERFACE_NAME = "CommonJSBridge";
	private static final String START_LOGIN_MODULE = "startLoginModule";

	private final TbPageContext<?> mTbPageContext;

	public CommonTbJsBridge(TbPageContext<?> tbPageContext) {
		mTbPageContext = tbPageContext;
	}

	private String startLoginModule() {
		// 跳转到登录页面
		TbadkCoreApplication.getInst().login(mTbPageContext,
		    new CustomMessage<LoginActivityConfig>(CmdConfigCustom.START_GO_ACTION,
		    new LoginActivityConfig(mTbPageContext.getPageActivity(), true)));
		JSResultData resultData = new JSResultData();
		resultData.setStatus(JSResultData.STATUS_SUCCESS);
		resultData.setErrorCode(JSResultData.ERRORCODE_NO);
		resultData.setErrorMsg("");
		return OrmObject.jsonStrWithObject(resultData);
	}

后续计划

  • hybird
  • webview对native的消息系统
  • 两端统一
  • 第三方调用使用js做中间层

JS-Native通信协议项目汇报

By leegend

JS-Native通信协议项目汇报

JS-Native通信协议项目汇报

  • 416