از 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 مراجعه کنید.