目录

Hybrid模式下H5页面中通过JavaScript调用端侧接口

当您的应用为Hybrid模式,并且该模式下需调用H5页面,通过JavaScript上报数据时,H5中调用Analytics SDK的方法,必须通过App的native代码进行转发,示例代码如下:

App中暴露给WebView访问的方法

// 定义暴露给H5的js对象,其中用JavascriptInterface标注的方法均可被H5调用
public class HiAnalyticsWebInterface{
   HiAnalyticsInstance instance;
   public HiAnalyticsWebInterface(Context context){
       HiAnalyticsTools.enableLog();
       instance = HiAnalytics.getInstance(context);
       instance.setAnalyticsEnabled(true);
   }
   @JavascriptInterface
   public void onEvent(String eventName,String jsonString) {
       instance.onEvent(eventName,bundleFromJson(jsonString));
   }
   private Bundle bundleFromJson(String parameters){
    // 将字符串转化为Bundle对象
   }
}
// 将HiAnalyticsWebInterface的实例添加到WebView的js接口上
public class WebActivity extends AppCompatActivity {
    WebView webView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        webView = new WebView(this);
        // ...
        // 定义暴露给H5页面的js对象名为HiAnalyticsObj
        webView.getSettings().setJavaScriptEnabled(true);
        webView.addJavascriptInterface(new HiAnalyticsWebInterface(this), "HiAnalyticsObj");
    }
}

H5页面中调用方法

// 以onEvent为例 其他方法访问类似
function onEvent(eventName,eventParams){
   if(!eventName){
     return
   }
   if(window.HiAnalyticsObj){
       window.HiAnalyticsObj.onEvent(eventName,JSON.stringify(eventParams))
   }else{
       console.log('no method found')
   }
}