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


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

تنفيذ معالج 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: على النحو التالي:

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

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

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.