首先我已经看到这里还有其他潜在的相关问题,但提供的解决方案并没有解决我的问题。
尝试帮助解释问题,我会介绍我想要实现的目标;我们的网站会发送一封电子邮件,邀请用户注册我们的客户端应用。电子邮件中的链接会访问我们的网站,存储激活码,然后重定向到Google Play商店页面。一旦用户下载应用程序然后通过介绍屏幕工作,它就会尝试通过加载WebView来查找激活代码。这是出错的地方,目前无法找到/访问本地存储以获取激活码。
以下是我目前所拥有的:
应用商店重定向(电子邮件中的第一个链接)
<html><head></head><body>
<script type='text/javascript'>
// The activation code goes in this url
localStorage.setItem('url', '" + constructedUrl + "');
setTimeout(function() {
window.location.href='BACK TO OUR SITE' }, 30000);
setTimeout(function() {
window.location.href='GOOGLE PLAY STORE PAGE' }, 500);
</script>
</body></html>
AndroidManifest.xml中的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
尝试访问激活码
cookieWebView.getSettings().setJavaScriptEnabled(true);
cookieWebView.getSettings().setAppCacheEnabled(false);
cookieWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
cookieWebView.getSettings().setDomStorageEnabled(true);
cookieWebView.setWebViewClient(new MyWebClient());
// Call the AppActivate.html file.
cookieWebView.loadUrl(ServerCommunications.getRedirectUrl());
cookieWebView.setWebChromeClient(new WebChromeClient() {
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
Log.d("MyApplication", consoleMessage.message() + " -- From line "
+ consoleMessage.lineNumber() + " of "
+ consoleMessage.sourceId());
return false;
}
});
应用程序激活(从上面的WebView加载)
<head>
<title></title>
</head>
<body>
<script>
var appUrl = localStorage.getItem('url');
console.log("URL is ");
console.log(appUrl);
if (appUrl) {
localStorage.removeItem('url');
location.href = appUrl;
} else {
location.href = "OUR SCHEME://?token=0";
}
</script>
</body>
</html>
我在应用尝试激活时看到的是记录的以下两行:
09-18 09:06:30.151 4948-4948/our.namespace D/MyApplication: URL is -- From line 10 of https://OURWEBSITE/AppActivate.html
09-18 09:06:30.152 4948-4948/our.namespace D/MyApplication: null -- From line 11 of https://OURWEBSITE/AppActivate.html
这表示该值未设置为本地存储,或者无法访问。我知道它已被存储,因为如果我从我的Android设备上的标准浏览器导航到上面的URL,它会给我我期望的价值。
如果我错过任何隐藏的设置或者如果不可能,我就无法解决问题。我相信我已经打开了与WebView的权限或设置相关的任何内容,如可能相关问题的其他答案中所建议的那样。如果它有助于我在BlackView Android 6.0手机上进行测试。
有什么明显的我遗失了吗?
答案 0 :(得分:1)
根据developer.android.com/reference/android/webkit/WebView.html:
出于明显的安全原因,您的应用程序有自己的缓存, cookie存储等 - 它不共享浏览器应用程序的数据。 Cookie是在一个单独的线程上管理的,所以像index这样的操作 建立不要阻止UI线程。按照说明进行操作 如果您想在应用程序中使用cookie,请使用CookieSyncManager。
我建议或许使用深层链接。流程将类似于:
如果您不希望通过离开应用程序来破坏用户体验,也许您应该查看推介链接(搜索:Google Play Campaign Measurement
)。从Google Play商店下载应用后,您可以在应用内访问推荐号码。在这种情况下,您可以省略访问任何本地存储值并离开您的应用程序。