پیاده سازی جاوا اسکریپت هندلر
اولین قدم در استفاده از 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:
سویفت
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 اضافه کنید:
سویفت
self.webView.configuration.userContentController.add(self, name: "firebase")
هدف-C
[self.webView.configuration.userContentController addScriptMessageHandler:self name:@"firebase"];
مراحل بعدی
برای اجرای کاملاً کاربردی Google Analytics در WebView، به نمونه analytics-webview مراجعه کنید.