استخدام "إحصاءات Google" في WebView


يجب توجيه المكالمات لتسجيل الأحداث أو ضبط خصائص المستخدِمين التي يتم تشغيلها من داخل WebView إلى الرمز البرمجي الأصلي قبل أن يتم إرسالها إلى Google Analytics.

تنفيذ معالِج JavaScript

الخطوة الأولى لاستخدام Google Analytics في WebView هي إنشاء functionsJavaScript لإعادة توجيه الأحداث وخصائص المستخدِم إلى الرمز البرمجي الأصلي. يوضّح المثال التالي كيفية إجراء ذلك بطريقة متوافقة مع الرمز البرمجي الأصلي لكل من 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.");
  }
}

تنفيذ واجهة أصلية

لاستدعاء رمز Apple الأصلي من JavaScript، أنشئ فئة لمعالج الرسائل متوافقة مع بروتوكول WKScriptMessageHandler. يمكنك إجراء مكالمات Google Analytics داخل userContentController:didReceiveScriptMessage: عملية الردّ:

Swift

ملاحظة: لا يتوفّر منتج 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)
  }
}

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

أخيرًا، أضِف معالِج الرسائل إلى وحدة التحكّم في محتوى المستخدم في webview:

Swift

ملاحظة: لا يتوفّر منتج Firebase هذا على نظام التشغيل macOS.
self.webView.configuration.userContentController.add(self, name: "firebase")

Objective-C

ملاحظة: لا يتوفّر منتج Firebase هذا على نظام التشغيل macOS.
[self.webView.configuration.userContentController addScriptMessageHandler:self
                                                                     name:@"firebase"];

الخطوات التالية

للحصول على تطبيق Google Analytics يعمل بكامل طاقته في WebView، اطّلِع على نموذج analytics-webview.