از Analytics در WebView استفاده کنید

تماس‌ها برای ثبت رویدادها یا تنظیم ویژگی‌های کاربر که از داخل WebView اجرا می‌شوند، باید قبل از ارسال به Google Analytics به کد بومی ارسال شوند.

پیاده سازی جاوا اسکریپت هندلر

اولین قدم در استفاده از Google Analytics در WebView، ایجاد توابع جاوا اسکریپت برای ارسال رویدادها و ویژگی های کاربر به کد بومی است. مثال زیر نشان می دهد که چگونه می توان این کار را به گونه ای انجام داد که با کد اصلی اندروید و اپل سازگار باشد:
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.");
  }
}

پیاده سازی رابط بومی

برای فراخوانی کد بومی اپل از جاوا اسکریپت، یک کلاس کنترل کننده پیام مطابق با پروتکل WKScriptMessageHandler ایجاد کنید. می توانید تماس های Google Analytics را در داخل userContentController:didReceiveScriptMessage: callback:

سریع

توجه: این محصول Firebase در هدف macOS در دسترس نیست.
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)
  }
}

هدف-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"]];
  }
}

در نهایت، کنترل کننده پیام را به کنترل کننده محتوای کاربر webview اضافه کنید:

سریع

توجه: این محصول Firebase در هدف macOS در دسترس نیست.
self.webView.configuration.userContentController.add(self, name: "firebase")

هدف-C

توجه: این محصول Firebase در هدف macOS در دسترس نیست.
[self.webView.configuration.userContentController addScriptMessageHandler:self
                                                                     name:@"firebase"];

مراحل بعدی

برای اجرای کاملاً کاربردی Google Analytics در WebView، به نمونه analytics-webview مراجعه کنید.