ネイティブWebViewからアプリイベントを計測 [In App Events from a Native Web View]

アプリではWeb Viewを使ってHTMLコンテンツを含む場合があります。AppsFlyerのAPIを呼び出すことでWeb View内のJavascriptコードからイベントを計測することが可能です。

以下のコードは、アプリイベントの計測例を示しています:

iOS9向けの実装:iOS9でWebViewイベント計測を実装するには、Javascriptからネイティブアプリへイベントを送信する必要があります。

HTMLコード(AndroidのWebViewとiOSのWebView):

function trackEvent(eventName,eventValue){
	var iframe = document.createElement("IFRAME");
	iframe.setAttribute("src", "af-event://inappevent?eventName="+eventName+"&eventValue="+eventValue);
	document.documentElement.appendChild(iframe);
	iframe.parentNode.removeChild(iframe);
	iframe = null;
}

 

Web viewは、AppsFlyerのSDKを呼び出すネイティブアプリを呼び出す必要があります。

例:

button.onclick = function(event) {
  var eventName = "af_purchase";
  var eventValue = "{\"af_revenue\":6.72 ,\"af_content_type\":\"wallets\", \"af_content_id\":\"15854\"}";
  trackEvent(eventName, eventValue);
};

 

iOS 実装:

UIWebViewのデリゲート内のshouldStartLoadWithRequestメソッドで以下のコードを追加してください。

Objective C Swift

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    NSString* requestURLString = [[request URL] absoluteString];
    if ([requestURLString hasPrefix:@"af-event://"]){    
        NSScanner *scanner = [NSScanner scannerWithString:requestURLString];
        [scanner setCharactersToBeSkipped:[NSCharacterSetcharacterSetWithCharactersInString:@"&?"]];
        [scanner scanUpToString:@"?" intoString:nil];
        NSString *tempString;        NSString *eventName;
        NSString *eventValue;
        while ([scanner scanUpToString:@"&" intoString:&tempString]) {
            if ([tempString hasPrefix:@"eventName="] && [tempString length] > 10){
                eventName = [tempString substringFromIndex:11];
            }
            if ([tempString hasPrefix:@"eventValue="] && [tempString length] > 11){
                eventValue = [tempString substringFromIndex:12];
            }
        }
        if (eventName != nil){
            [[AppsFlyerTracker sharedTracker] trackEvent:eventNamewithValue:eventValue];
        }
        return NO;
    }

Android 実装:

Android WebView はWeb Viewから通知を受け取るWebViewClientを使います。shouldOverrideUrlLoading内で、Web Viewから来るイベントを以下のように実装します:

mWebView.setWebViewClient(
new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
	if (url.startsWith("af-event://"))  {
		String[] urlParts = url.split("\\?");
		if (urlParts.length > 1) {
			String query = urlParts[1];
			String eventName = null;
			HashMap<String, Object> eventValue = new HashMap<>();

			for (String param : query.split("&")) {
				String[] pair = param.split("=");
				String key = pair[0];
				if (pair.length > 1) {
					if ("eventName".equals(key)){
						eventName = pair[1];
					} else if ("eventValue".equals(key)){
						eventValue.put(pair[0], pair[1]);
					}
				}
			}
			AppsFlyerLib.getInstance().trackEvent(CurrentActivity.this,eventName,eventValue);
		}
		return false;
	}
	return true;
}});
この記事は役に立ちましたか?
3人中1人がこの記事が役に立ったと言っています