Реализуйте обработчик JavaScript.
Первый шаг в использовании Google Analytics в WebView — это создание функций JavaScript для передачи событий и свойств пользователя в нативный код. Следующий пример показывает, как это сделать способом, совместимым как с нативным кодом Android, так и с Apple: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 из вашего WebView.
Вы можете корректно регистрировать события и устанавливать свойства пользователя из WebView, вызывая функции JavaScript, определенные на предыдущем шаге. В следующем примере показано, как правильно регистрировать событие покупки и устанавливать свойство пользователя: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") }
Реализовать нативный интерфейс
Для вызова нативного кода Apple из JavaScript создайте класс обработчика сообщений, соответствующий протоколу WKScriptMessageHandler . Вы можете выполнять вызовы Google Analytics внутри функции обратного вызова userContentController:didReceiveScriptMessage: :.
Быстрый
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"]]; } }
Наконец, добавьте обработчик сообщений в контроллер пользовательского контента веб-представления:
Быстрый
self.webView.configuration.userContentController.add(self, name: "firebase")
Objective-C
[self.webView.configuration.userContentController addScriptMessageHandler:self name:@"firebase"];
В iOS можно вручную регистрировать события внутриигровых покупок в WebView.
Вы можете вручную регистрировать события IAP в WebView, используя Analytics SDK версии 12.5.0 или выше.
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 продолжит автоматически регистрировать внутриигровые покупки, где это возможно, и не будет удалять дубликаты событий, зарегистрированных вручную.
Следующие шаги
Для полноценной реализации Google Analytics в WebView см. пример analytics-webview .