WebView'da Analytics kullanma


Bir WebView'dan tetiklenen etkinlikleri günlüğe kaydetme veya kullanıcı özelliklerini ayarlama çağrıları, Google Analytics'ya gönderilmeden önce yerel koda yönlendirilmelidir.

JavaScript işleyiciyi uygulama

WebView'da Google Analytics kullanmanın ilk adımı, etkinlikleri ve kullanıcı özelliklerini yerel koda yönlendirmek için JavaScript işlevleri oluşturmaktır. Aşağıdaki örnekte, bunun hem Android hem de Apple yerel koduyla uyumlu olacak şekilde nasıl yapılacağı gösterilmektedir:
function logEvent(name, params) {
  if (!name) {
    return;
  }

  if (window.AnalyticsWebInterface) {
    // Call Android interface
    window.AnalyticsWebInterface.logEvent(name, JSON.stringify(params));
  } else if (window.webkit
      && window.webkit.messageHandlers
      && window.webkit.messageHandlers.firebase) {
    // Call iOS interface
    var message = {
      command: 'logEvent',
      name: name,
      parameters: params
    };
    window.webkit.messageHandlers.firebase.postMessage(message);
  } else {
    // No Android or iOS interface found
    console.log("No native APIs found.");
  }
}

function setUserProperty(name, value) {
  if (!name || !value) {
    return;
  }

  if (window.AnalyticsWebInterface) {
    // Call Android interface
    window.AnalyticsWebInterface.setUserProperty(name, value);
  } else if (window.webkit
      && window.webkit.messageHandlers
      && window.webkit.messageHandlers.firebase) {
    // Call iOS interface
    var message = {
      command: 'setUserProperty',
      name: name,
      value: value
   };
    window.webkit.messageHandlers.firebase.postMessage(message);
  } else {
    // No Android or iOS interface found
    console.log("No native APIs found.");
  }
}

WebView'nizden JavaScript işleyicisini çağırma

Önceki adımda tanımladığınız JavaScript işlevlerini çağırarak etkinlikleri düzgün şekilde kaydedebilir ve kullanıcı özelliklerini WebView'dan ayarlayabilirsiniz. Aşağıdaki örnekte, satın alma etkinliğinin nasıl doğru şekilde günlüğe kaydedileceği ve kullanıcı özelliğinin nasıl ayarlanacağı gösterilmektedir:
function logEventExample() {
   
   // Log an event named "purchase" with parameters
   logEvent("purchase", {
      content_type: "product",
      value: 123,
      currency: "USD",
      quantity: 2,
      items: [{
        item_id: "sample-item-id",
        item_variant: "232323"
      }],
      transaction_id: "1234567"
   });
}

function logUserPropertyExample() {
   // Set a user property named 'favorite_genre'
   setUserProperty("favorite_genre", "comedy")    
}

Yerel arayüzü uygulama

JavaScript'ten yerel Android kodunu çağırmak için @JavaScriptInterface ile işaretlenmiş yöntemlere sahip bir sınıf uygulayın:

public class AnalyticsWebInterface {

    public static final String TAG = "AnalyticsWebInterface";
    private FirebaseAnalytics mAnalytics;

    public AnalyticsWebInterface(Context context) {
        mAnalytics = FirebaseAnalytics.getInstance(context);
    }

    @JavascriptInterface
    public void logEvent(String name, String jsonParams) {
        LOGD("logEvent:" + name);
        mAnalytics.logEvent(name, bundleFromJson(jsonParams));
    }

    @JavascriptInterface
    public void setUserProperty(String name, String value) {
        LOGD("setUserProperty:" + name);
        mAnalytics.setUserProperty(name, value);
    }

    private void LOGD(String message) {
        // Only log on debug builds, for privacy
        if (BuildConfig.DEBUG) {
            Log.d(TAG, message);
        }
    }

    private Bundle bundleFromJson(String json) {
        // ...
    }

}

Yerel arayüzü oluşturduktan sonra, WebView'da çalışan JavaScript kodunun görebilmesi için WebView'nize kaydedin:

// Only add the JavaScriptInterface on API version JELLY_BEAN_MR1 and above, due to
// security concerns, see link below for more information:
// https://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,%20java.lang.String)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
    mWebView.addJavascriptInterface(
            new AnalyticsWebInterface(this), AnalyticsWebInterface.TAG);
} else {
    Log.w(TAG, "Not adding JavaScriptInterface, API Version: " + Build.VERSION.SDK_INT);
}

Sonraki adımlar

WebView'da Google Analytics'nın tam işlevsel bir şekilde uygulanması için analytics-webview örneğine bakın.