تنفيذ معالج 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."); } }
تنفيذ الواجهة الأصلية
لاستدعاء رمز Apple الأصلي من JavaScript، يجب إنشاء فئة معالج رسائل
بما يتوافق مع بروتوكول WKScriptMessageHandler
. يمكنك إجراء
مكالمتان (Google Analytics) داخل
userContentController:didReceiveScriptMessage:
رد الاتصال:
Swift
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
self.webView.configuration.userContentController.add(self, name: "firebase")
Objective-C
[self.webView.configuration.userContentController addScriptMessageHandler:self name:@"firebase"];
الخطوات التالية
لتنفيذ Google Analytics بشكل كامل في WebView، يُرجى الاطّلاع على الاطّلاع على موقع ويب "إحصاءات Google". كعينة.