2013-11-28 25 views
2

我跟踪访问者的用户名,我想将网页上的用户名数据传递给我的活动方法。传递这些数据的正确方法是什么?Android Webview将标题数据传递给Google Analytics

(把HTML页面隐藏的DIV中的用户名和数据解析网页是我最后的选择,我不喜欢它)

我用网页视图在我的Android应用程序。我加载这样的网址:

public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    ... 
    String url = "http://example.com"; 
    webView.postUrl(url, EncodingUtils.getBytes(myPostData, "base64")); 
    ... 
} 

我的页面响应中有一些自定义标题。响应标头有:

header('User name: michael'); 

如果页面已成功加载,我需要从响应中获取该标题并将其作为自定义维度在Google Analytics中使用。

EasyTracker easyTracker = EasyTracker.getInstance(); 
easyTracker.send(MapBuilder 
    .createAppView("Home screen") 
    .set(Fields.customDimension(1), "michael"); 
    .build() 
); 

我的问题是什么是正确的方法?是否有可能从onPageFinished中获取它并将此标头设置在Google Analytics代码中,或者有更好的方法吗?我接受任何与此结构兼容的方法/解决方案。

请注意,我重写了我的活动,这些方法的工作原理:

WebViewClient::onPageStarted(WebView view, String url, Bitmap favicon) 
WebViewClient::onPageFinished(WebView view, String url) 
WebViewClient::shouldOverrideUrlLoading(WebView view, String url) 
WebViewClient::onLoadResource(WebView view, String url) 
WebViewClient::onReceivedError(WebView view, int errorCode, String description, String failingUrl) 
WebChromeClient::onProgressChanged(WebView view, int newProgress) 

编辑:
这里有一个类似的答案是3岁:https://stackoverflow.com/a/3134609/429938
但它提供赶头在shouldOverrideUrlLoading。是不是可以在onPageFinished中捕获它?或者,我怎么能与Webview.postUrl()

EDIT2使用它:
另一种解决方案是从javascript代码使用addJavascriptInterface,并设置用户名并设置活动内谷歌分析代码。但这是一个Android特定的解决方案。我宁愿在IOS中使用的通用解决方案等

+0

您所要求的内容在Google Analytics服务条款下是被禁止的。 http://www.google.com/analytics/terms/us.html“您不会(...)使用服务跟踪,收集或上传任何个人识别个人身份的数据(...)或其他数据可以合理地链接到这些信息由谷歌“ – Eduardo

+0

用户名只是一个例子来表达我的问题。我使用analaytics设置了不同的使用数据。 – trante

回答

2

最跨平台的解决方案是一个JavaScript桥(addJavascriptInterface)。这是我会推荐你​​的。

本机部分也可以在iOS上实现。而HTML部分保持不变。

如果不是,则需要使用其中一个事件实现本机端的所有逻辑,如onPageFinished。如果头部不能从这里访问,请使用HTTPURLConnection和loadDataWithBaseURL自己完成请求。

1

我用下面的代码时,页面加载到konw:

webview.setWebChromeClient(new WebChromeClient() { 
        public void onProgressChanged(WebView view, int progress) 
        { 
         MyActivity.setTitle("Loading..."); 
         MyActivity.setProgress(progress * 100); 

         if (progress == 100) { 
    //page is successfully loaded and you can get our header. 

         } 
         } 
        }); 
+0

这不是我的问题。 – trante

+0

正确提出问题以获得正确答案 – NickUnuchek

+0

'...如果页面已成功加载,我需要从响应中获取该标题并将其作为自定义维度在Google Analytics中使用...' – trante

1

试试这个:在这里我得到“用户名“来自标头的值

HttpURLConnection conn = null; 
      final HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() { 
       public boolean verify(String hostname, SSLSession session) { 
        return true; 
       } 
      }; 
      try { 
       URL url = new URL(YOUR_URL); 
       if (url.getProtocol().toLowerCase().equals("https")) { 
        trustAllHosts(); 
        HttpsURLConnection https = (HttpsURLConnection) url.openConnection(); 
        https.setHostnameVerifier(DO_NOT_VERIFY); 
        conn = https; 
       } else { 
        conn = (HttpURLConnection) url.openConnection(); 
       } 
       conn.setInstanceFollowRedirects(false); 
       conn.connect(); 
     String location = conn.getHeaderField("User name");