如果在 App 内有加载一些第三方 H5 页面。这些页面不能直接集成神策分析 JavaScript SDK,如果需要获取这些页面对应的埋点信息,可使用如下方式实现。具体实现原理:通过 webView 向第三方 H5 页面自动嵌入 JavaScript sdk ,当 H5 页面触发事件时,会直接把事件发往 App 端,App 端接收到数据后保存并上报。

为了防止 H5 不在 App 环境下浏览时,track 的事件无法通过 JavaScript SDK 发送。在初始化完 iOS SDK 之后,调用如下接口:

[[SensorsAnalyticsSDK sharedInstance] addWebViewUserAgentSensorsDataFlag];
OBJECTIVE-C


1. 如果是 UIWebView

加载 WebView 时,在 shouldStartLoadWithRequest: 方法中调用如下方法:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
	if ([[SensorsAnalyticsSDK sharedInstance] showUpWebView:webView WithRequest:request]) {
		return NO;
	}
	//在这里添加您的逻辑代码

	return YES;
}
OBJECTIVE-C


WebView 加载完成后,在 webViewDidFinishLoad: 方法中调用如下方法:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
	[webView stringByEvaluatingJavaScriptFromString:@"var script = document.createElement('script');"
	"script.type = 'text/javascript';"
	"script.src = \'<#包含神策 SDK js 文件目标地址#>\';"
	"document.getElementsByTagName('head')[0].appendChild(script);"];
}
OBJECTIVE-C


2. 如果是 WKWebView

加载 WebView 时,在 decidePolicyForNavigationAction: 方法中调用如下方法:

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
	if ([[SensorsAnalyticsSDK sharedInstance] showUpWebView:webView WithRequest:navigationAction.request]) {
	decisionHandler(WKNavigationActionPolicyCancel);
		return;
	}
	//在这里添加您的逻辑代码
	decisionHandler(WKNavigationActionPolicyAllow);
}
OBJECTIVE-C


WebView 加载完成后,在 didFinishNavigation: 方法中调用如下方法:

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
	[webView evaluateJavaScript:@"var script = document.createElement('script');"
	"script.type = 'text/javascript';"
	"script.src = \'<#包含神策 SDK js 文件目标地址#>\';"
	"document.getElementsByTagName('head')[0].appendChild(script);"
	completionHandler:^(id _Nullable obj, NSError * _Nullable error) {
	}]; //添加到head标签中
}
OBJECTIVE-C


3. 注意事项

如果 H5 URL 为 https,在上面的 script.src 中使用的链接也应该是 https 协议