ネイティブ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", "appsflyerEvent://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メソッドで以下のコードを追加してください。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    NSString* requestURLString = [[request URL] absoluteString];
    if ([requestURLString hasPrefix:@"appsflyerevent://"]){    
        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から来るイベントを以下のように実装します:

webView.setWebViewClient(
    new WebViewClient() {
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.startsWith("appsflyerEvent://"))  {
                String[] urlParts = url.split("\\?")
                if (urlParts.length > 1) {
                    String query = urlParts[1];
                    String eventName = null;
                    String eventValue = null;
                    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 = pair[1];
                            }
                        }
                 }
                                                             AppsFlyerLib.sendTrackingWithEvent(AppsFlyerTestActivity.this,eventName,eventValue);
             }
             return false;
         }
         return true;
    }});
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています