Flurry Analytics in a WebView in iOS



在我的iOS应用程序中,我想使用Flurry分析。在应用程序的一个屏幕上有UIWebView。并且该站点在服务器上,但不在应用程序的代码中。每次我加载该屏幕时,信息都会从服务器传输到我的屏幕,一切都很好。我的 WebView 上有很多按钮,我想在按下它们时跟踪它们。如果按钮在应用程序代码中,我读到了如何在应用程序代码中实现 flurry 分析,但如果按钮在服务器(html/css/JS) 的一侧,我不明白如何跟踪从 UIWebView 通过应用程序到 Flurry 的事件。

Flurry正在写这个:

如果我的应用是我的移动网站的包装器,我可以使用Flurry Analytics跟踪事件(例如按下按钮)吗?这些操作发生在应用正在包装的站点服务器上。


是的,您可以跟踪这些事件。如果要跟踪的操作(例如按下按钮)存在于应用代码中,则只需在应用端记录事件即可。如果该按钮存在于 Web 视图中显示的移动网页上,则需要注入一个 Javascript 函数,该函数将在按下按钮时触发额外的自定义 URL。此 URL 将具有自定义方案,例如"myapp://buttonclicked"。然后在应用代码中,需要在 Web 视图触发该 URL 之前捕获该 URL。当您看到 URL 是您指定的 URL ("myapp://...")时,您可以在应用程序端记录事件。

有几种方法可以在 Web 视图加载自定义 URL 之前捕获自定义 URL。在 iOS 中,您需要实现 UIWebViewDelegate 方法 webView:shouldStartLoadWithRequest:navigationType:。在Android上,你可以使用shouldOverrideUrlLoad方法实现WebViewClient。

您可以通过委托方法轻松捕获WebView事件

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request 导航类型:(UIWebViewNavigationType)导航类型

下面是我在应用程序中使用的示例代码:

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
    navigationType:(UIWebViewNavigationType)navigationType  
{
    if([[[request URL] absoluteString] rangeOfString:@"payment_successful_mobile.php"].location != NSNotFound)
        return YES; 
    if([[[request URL] absoluteString] rangeOfString:@"index.php?file=c-my_campaingns"].location != NSNotFound)
    {
        [self onClickBackButton:nil];
        return NO;
    }
    if([[[request URL] absoluteString] rangeOfString:@"Timeout"].location != NSNotFound)
    {
        [self performSelectorOnMainThread:@selector(displayTimeOutMessage) withObject:nil waitUntilDone:NO];
        return NO;
    }
    return YES;
}

最新更新