تنفيذ معالِج 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."); } }
استدعاء معالِج 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:
الاستدعاء:
ملاحظة: لا يتوفّر منتج 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) } }
- (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")
ملاحظة: لا يتوفّر منتج Firebase هذا على نظام التشغيل macOS.
[self.webView.configuration.userContentController addScriptMessageHandler:self name:@"firebase"];
الخطوات التالية
للحصول على تطبيق Google Analytics يعمل بكامل طاقته في WebView، اطّلِع على نموذج analytics-webview.