WebView 不会 运行 PIWIK 跟踪 JS
WebView will not run PIWIK tracking JS
我使用与我的另一个应用程序一起使用的代码创建了一个 android 应用程序。当人们使用该应用程序时,PIWIK 跟踪 JS 将不会 运行。如果您访问该网站,它会很好地跟踪(JS 跟踪器是网页上的 JS 标签)。如果您使用该应用程序,它不会跟踪访问。我启用了 JS,并且我从一个运行良好的应用程序中复制了代码。两个应用之间的唯一区别是 SDK 目标版本。
下面是我的代码:
public class ZestyView extends Activity {
final Activity activity = this;
WebView myWebView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_zestyview);
myWebView = (WebView) findViewById(R.id.webview);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.setWebViewClient(new MyWebViewClient());
myWebView.getSettings().setBuiltInZoomControls(true);
myWebView.getSettings().setLoadWithOverviewMode(true);
myWebView.getSettings().setUseWideViewPort(true);
Toast.makeText(getApplicationContext(), "Page is loading... Please wait!", Toast.LENGTH_LONG).show();
myWebView.loadUrl("https://zestysaver.com/?pk_campaign=App&pk_kwd=Android");
}
private class MyWebViewClient extends WebViewClient {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getHost().equals("zestysaver.com")) {
Log.e("url", Uri.parse(url).getHost());
return false;
}
// Otherwise, give the default behavior (open in browser)
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
myWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
跟踪代码托管在外部域中。
终于找到我的答案了。我查看了我的 LogCat 并找到了未标记为错误的行:
I/X509Util: Failed to validate the certificate chain, error: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
做了一些研究以确保我是正确的,然后 运行 我的网站通过 SSLLabs 托管我的分析软件 (PIWIK),发现证书链不完整。更新了我网站上的证书链,然后 bam.. 开始跟踪。
伙计,我花了好几个小时在这么愚蠢的事情上!
我使用与我的另一个应用程序一起使用的代码创建了一个 android 应用程序。当人们使用该应用程序时,PIWIK 跟踪 JS 将不会 运行。如果您访问该网站,它会很好地跟踪(JS 跟踪器是网页上的 JS 标签)。如果您使用该应用程序,它不会跟踪访问。我启用了 JS,并且我从一个运行良好的应用程序中复制了代码。两个应用之间的唯一区别是 SDK 目标版本。
下面是我的代码:
public class ZestyView extends Activity {
final Activity activity = this;
WebView myWebView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_zestyview);
myWebView = (WebView) findViewById(R.id.webview);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.setWebViewClient(new MyWebViewClient());
myWebView.getSettings().setBuiltInZoomControls(true);
myWebView.getSettings().setLoadWithOverviewMode(true);
myWebView.getSettings().setUseWideViewPort(true);
Toast.makeText(getApplicationContext(), "Page is loading... Please wait!", Toast.LENGTH_LONG).show();
myWebView.loadUrl("https://zestysaver.com/?pk_campaign=App&pk_kwd=Android");
}
private class MyWebViewClient extends WebViewClient {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getHost().equals("zestysaver.com")) {
Log.e("url", Uri.parse(url).getHost());
return false;
}
// Otherwise, give the default behavior (open in browser)
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
myWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
跟踪代码托管在外部域中。
终于找到我的答案了。我查看了我的 LogCat 并找到了未标记为错误的行:
I/X509Util: Failed to validate the certificate chain, error: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
做了一些研究以确保我是正确的,然后 运行 我的网站通过 SSLLabs 托管我的分析软件 (PIWIK),发现证书链不完整。更新了我网站上的证书链,然后 bam.. 开始跟踪。
伙计,我花了好几个小时在这么愚蠢的事情上!