WebView'da Analytics kullanma


Bir WebView'den gönderilen etkinlik günlüğe kaydetme veya kullanıcı özelliği ayarlama çağrıları, Google Analytics'e gönderilmeden önce yerel koda yönlendirilmelidir.

JavaScript işleyiciyi uygulama

Google Analytics'ü bir WebView'de kullanmanın ilk adımı, etkinlikleri ve kullanıcı özelliklerini yerel koda yönlendirecek JavaScript işlevleri oluşturmaktır. Aşağıdaki örnekte, bunun hem Android hem de Apple yerel koduyla uyumlu bir ş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.");
  }
}

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

Önceki adımda tanımladığınız JavaScript işlevlerini çağırarak etkinlikleri düzgün bir şekilde günlüğe kaydedebilir ve kullanıcı özelliklerini bir WebView'den ayarlayabilirsiniz. Aşağıdaki örnekte, bir satın alma etkinliğinin nasıl doğru şekilde günlüğe kaydedileceği ve örnek olarak bir kullanıcı mülkünün 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 kodunu çağırmak için WKScriptMessageHandler protokolüne uygun bir mesaj işleyici sınıfı oluşturun. userContentController:didReceiveScriptMessage: geri çağırma işlevinde Google Analytics aramaları yapabilirsiniz:

SwiftObjective-C

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)
  }
}
- (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:

SwiftObjective-C

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

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

Sonraki adımlar

Google Analytics'ün bir Web Görünümü'nde tam işlevli bir şekilde uygulanması için analytics-webview örneğine bakın.