访问WebView

时间:2017-09-18 13:19:34

标签: javascript android webview local-storage

首先我已经看到这里还有其他潜在的相关问题,但提供的解决方案并没有解决我的问题。

尝试帮助解释问题,我会介绍我想要实现的目标;我们的网站会发送一封电子邮件,邀请用户注册我们的客户端应用。电子邮件中的链接会访问我们的网站,存储激活码,然后重定向到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手机上进行测试。

有什么明显的我遗失了吗?

1 个答案:

答案 0 :(得分:1)

根据developer.android.com/reference/android/webkit/WebView.html

  

出于明显的安全原因,您的应用程序有自己的缓存,   cookie存储等 - 它不共享浏览器应用程序的数据。   Cookie是在一个单独的线程上管理的,所以像index这样的操作   建立不要阻止UI线程。按照说明进行操作   如果您想在应用程序中使用cookie,请使用CookieSyncManager。

我建议或许使用深层链接。流程将类似于:

  1. 像以前一样将激活码保存在本地存储
  2. 当用户下载您的应用并通过入职流程时 包括一些打开网页的按钮(或自动执行) 系统浏览器中的页面。
  3. 现在您可以访问保存的本地存储了 激活码。
  4. 在网站上提供具有激活码的深层链接按钮 在网址
  5. 用户点击它并返回到您可以抓取的应用 来自Intent的激活码
  6. 如果您不希望通过离开应用程序来破坏用户体验,也许您应该查看推介链接(搜索:Google Play Campaign Measurement)。从Google Play商店下载应用后,您可以在应用内访问推荐号码。在这种情况下,您可以省略访问任何本地存储值并离开您的应用程序。