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 uygun şekilde günlüğe 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 Apple kodu çağırmak için WKScriptMessageHandler protokolüne uygun bir mesaj işleyici sınıfı oluşturun. Google Analytics geri arama özelliğini kullanarak userContentController:didReceiveScriptMessage: araması yapabilirsiniz:

Swift

Not: Bu Firebase ürünü macOS hedefinde kullanılamaz.
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

Not: Bu Firebase ürünü macOS hedefinde kullanılamaz.
self.webView.configuration.userContentController.add(self, name: "firebase")

Objective-C

Not: Bu Firebase ürünü macOS hedefinde kullanılamaz.
[self.webView.configuration.userContentController addScriptMessageHandler:self
                                                                     name:@"firebase"];

iOS'te uygulama içi satın alma etkinliklerini bir 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 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şlevsel bir şekilde uygulanması için analytics-webview örneğine bakın.