Verwenden Sie Analytics in einer WebView

Aufrufe zum Protokollieren von Ereignissen oder zum Festlegen von Benutzereigenschaften, die von einem WebView aus ausgelöst werden, müssen an nativen Code weitergeleitet werden, bevor sie an Google Analytics gesendet werden können.

Implementieren Sie einen JavaScript-Handler

Der erste Schritt bei der Verwendung von Google Analytics in einer WebView besteht darin, JavaScript-Funktionen zu erstellen, um Ereignisse und Benutzereigenschaften an nativen Code weiterzuleiten. Das folgende Beispiel zeigt, wie dies auf eine Weise durchgeführt wird, die sowohl mit dem nativen Android- als auch dem Apple-Code kompatibel ist:
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.");
  }
}

Implementieren Sie eine native Schnittstelle

Um nativen Apple-Code aus JavaScript aufzurufen, erstellen Sie eine Nachrichtenhandlerklasse, die dem WKScriptMessageHandler -Protokoll entspricht. Sie können Google Analytics-Aufrufe innerhalb des Rückrufs userContentController:didReceiveScriptMessage: durchführen:

Schnell

Hinweis: Dieses Firebase-Produkt ist auf dem macOS-Ziel nicht verfügbar.
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)
  }
}

Ziel 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"]];
  }
}

Fügen Sie abschließend den Nachrichtenhandler zum Benutzerinhaltscontroller der Webansicht hinzu:

Schnell

Hinweis: Dieses Firebase-Produkt ist auf dem macOS-Ziel nicht verfügbar.
self.webView.configuration.userContentController.add(self, name: "firebase")

Ziel c

Hinweis: Dieses Firebase-Produkt ist auf dem macOS-Ziel nicht verfügbar.
[self.webView.configuration.userContentController addScriptMessageHandler:self
                                                                     name:@"firebase"];

Nächste Schritte

Eine voll funktionsfähige Implementierung von Google Analytics in einer WebView finden Sie im Analytics-Webview- Beispiel.