内嵌Webview

优质
小牛编辑
171浏览
2023-12-01

对于使用UIWebView、WKWebView嵌入网页在应用内的App,我们封装了从JavaScript到Native的调用,并提供了与Native一致的统计API。(点此下载JS Demo

此处我们封装了从Javascript到Native的调用,但是如果您的APP已有JavaScript Bridge,您也可以进行自己封装。

使用方法

  1. 引用mobstat.js到您的网页内
  2. 对于UIWebview,实现如下代理方法,并调用SDK的webviewStartLoadWithRequest:接口,传入request参数

    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
     [[BaiduMobStat defaultStat] webviewStartLoadWithRequest:request];
     return YES;
    }
    
    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
     BaiduMobStat.default().webviewStartLoad(with: request)
     return true
    }
    
  3. 对于WKWebView,实现如下代理方法,并调用SDK的didReceiveScriptMessage:body:接口,传入的参数为messagenamebody

    -(void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{
     [[BaiduMobStat defaultStat] didReceiveScriptMessage:message.name body:message.body];
    }
    
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
     if let body = message.body as? Dictionary<String, AnyObject> {
         BaiduMobStat.default().didReceiveScriptMessage(message.name, body: body)
     }
    }
    
  4. 在您的HTML代码内,调用对应的API进行统计。API列表见下方。

API

JS的埋点Api,可以灵活使用,没有固定的调用场景,在JS代码的业务场景触发处埋点即可。

接口声明,请查看上面下载的JS Demo中的mobstat.js

具体调用方法可以参考JS Demo中的mobstat.html文件。

事件分析

无时长事件

// 接口声明
BaiduMobStat.onEvent(eventId, eventLabel);
// attributes 是以object形式传入的字典,如{'类型':'类型一', '数值': '3'}
BaiduMobStat.onEventWithAttributes(eventId, eventLabel, attributes);

// 调用示例
<li><a href="" onClick="BaiduMobStat.onEvent('event1', '自定义事件一');">onEvent(String, String)</a></li>
<li><a href="" onClick="BaiduMobStat.onEventWithAttributes('event4', '自定义事件四', {'类型':'类型一', '数值': '3'});">onEvent(String, String, Dict)</a></li>

固定时长事件

// 接口声明
BaiduMobStat.onEventDuration(eventId, eventLabel, duration);
// attributes 是以object形式传入的字典,如{'类型':'类型一', '数值': '3'}
BaiduMobStat.onEventDurationWithAttributes(eventId, eventLabel, duration, attributes);

// 调用示例
<li><a href="" onClick="BaiduMobStat.onEventDuration('event3', '自定义事件三', 1000);">onEventDuration(String, String, long)</a></li>
<li><a href="" onClick="BaiduMobStat.onEventDurationWithAttributes('event6', '自定义事件六', 1000, {'类型':'类型一', '数值': '3'});">onEventDuration(String, String, long, Dict)</a></li>

自定义时长事件

// 接口声明
BaiduMobStat.onEventStart(eventId, eventLabel);
BaiduMobStat.onEventEnd(eventId, eventLabel);
// attributes 是以object形式传入的字典,如{'类型':'类型一', '数值': '3'}
BaiduMobStat.onEventEndWithAttributes(eventId, eventLabel, attributes);

// 调用示例
<li><a href="" onClick="BaiduMobStat.onEventStart('event2', '自定义事件二');">onEventStart(String, String)</a></li>
<li><a href="" onClick="BaiduMobStat.onEventEnd('event2', '自定义事件二');">onEventEnd(String, String)</a></li>
<li><a href="" onClick="BaiduMobStat.onEventEndWithAttributes('event5', '自定义事件五', {'类型':'类型一', '数值': '3'});">onEventEnd(String, String, Dict)</a></li>

页面分析

// 接口声明
BaiduMobStat.onPageStart(pageName);
BaiduMobStat.onPageEnd(pageName);

// 调用示例
<li><a href="" onClick="BaiduMobStat.onPageStart('WebView');">onPageStart(String)</a></li>
<li><a href="" onClick="BaiduMobStat.onPageEnd('WebView');">onPageEnd(String)</a></li>