当您的应用为HyBird模式,并且该模式下需调用H5页面,通过js上报数据时,H5中调用Analytics SDK的方法,必须通过App的native代码进行转发,示例代码如下:
- //定义暴露给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 jsonString){
- //
- }
- }
- //将HiAnalyticsWebInterface的实例添加到webView的js接口上
- public class WebActivity extends AppCompatActivity{
- WebView webView;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- webView=new WebView(this);
- //...
- //定义暴露给H5页面的js对象名为HiAnalyticsObj
- webView.addJavascriptInterface(new HiAnalyticsWebInterface(this),"HiAnalyticsObj");
- }
- }
- //以onEvent为例 其他方法访问类似
- function onEvent(eventName,eventParams){
- if(!eventName){
- return
- }
- if(window.HiAnalyticsObj){
- window.HiAnalyticsObj.onEvent(eventName,JSON.stringify(eventParams))
- }else{
- console.log('no method found')
- }
- }