0

在我的 iOS 应用程序中,我想使用 Flurry 分析。在应用程序的一个屏幕上有 UIWebView。该站点在服务器上,但不在 App 的代码中。每次我加载该屏幕时,信息都会从服务器传输到我的屏幕,一切正常。我的 WebView 上有很多按钮,我想在按下它们时跟踪它们。如果按钮位于 App 代码中,我阅读了有关如何在 App 代码中实现 Flurry 分析的信息,但如果按钮位于服务器端(html/css/JS),我无法理解如何跟踪事件从 App 上的 UIWebView 到 Flurry。

Flurry 是这样写的:

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


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

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

4

1 回答 1

0

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

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

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

-(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;
}
于 2016-02-24T07:27:33.160 回答