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, bir satın alma işleminin nasıl düzgün şekilde günlüğe kaydedileceği ve örnek olarak bir 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
iOS veya Android için doğal bir arayüz uygulayabilirsiniz.
iOS
JavaScript'ten yerel Apple kodu çağırmak için WKScriptMessageHandler protokolüne uygun bir ileti işleyici sınıfı oluşturun. userContentController:didReceiveScriptMessage: geri çağırma işlevi içinde Google Analytics aramaları yapabilirsiniz:
Swift
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { guard let body = message.body as? [String: Any] else { return } guard let command = body["command"] as? String else { return } guard let name = body["name"] as? String else { return } if command == "setUserProperty" { guard let value = body["value"] as? String else { return } Analytics.setUserProperty(value, forName: name) } else if command == "logEvent" { guard let params = body["parameters"] as? [String: NSObject] else { return } Analytics.logEvent(name, parameters: params) } }
Objective-C
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message { if ([message.body[@"command"] isEqual:@"setUserProperty"]) { [FIRAnalytics setUserPropertyString:message.body[@"value"] forName:message.body[@"name"]]; } else if ([message.body[@"command"] isEqual: @"logEvent"]) { [FIRAnalytics logEventWithName:message.body[@"name"] parameters:message.body[@"parameters"]]; } }
Son olarak, mesaj işleyiciyi web görünümünün kullanıcı içeriği denetleyicisine ekleyin:
Swift
self.webView.configuration.userContentController.add(self, name: "firebase")
Objective-C
[self.webView.configuration.userContentController addScriptMessageHandler:self name:@"firebase"];
Android
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); }
iOS'te uygulama içi satın alma etkinliklerini WebView'da manuel olarak günlüğe kaydetme
Analytics SDK'sının 12.5.0 veya daha yeni bir sürümünü kullanarak uygulama içi satın alma etkinliklerini bir WebView'da manuel olarak günlüğe kaydedebilirsiniz.
function logManualPurchaseEvent() {
// For manually tracking in-app purchases within a WebView, log the in-app purchase event:
logEvent("in_app_purchase", {
currency: "USD",
price: 0.99,
product_id: "prod_123",
product_name: "Product 123",
quantity: 1,
value: 0.99,
});
}
SDK'nın, mümkün olan durumlarda uygulama içi satın alma işlemlerini otomatik olarak günlüğe kaydetmeye devam edeceğini ve manuel olarak günlüğe kaydedilen uygulama içi satın alma etkinliklerinin yinelenenlerini kaldırmayacağını unutmayın.
Sonraki adımlar
WebView'da Google Analytics'nın tam işlevli bir uygulaması için analytics-webview örneğine bakın.