Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 访问WebView中的本地存储_Javascript_Android_Webview_Local Storage - Fatal编程技术网

Javascript 访问WebView中的本地存储

Javascript 访问WebView中的本地存储,javascript,android,webview,local-storage,Javascript,Android,Webview,Local Storage,首先,我看到这里还有其他潜在的相关问题,但是提供的解决方案并没有解决我的问题 为了帮助解释问题,我将介绍我正在努力实现的目标;我们的网站会发送一封电子邮件,邀请用户注册我们的客户端应用程序。电子邮件中的链接点击我们的网站,存储激活码,然后重定向到Google Play Store页面。一旦用户下载了应用程序,然后通过介绍屏幕进行操作,它就会尝试通过加载WebView来查找激活码。这就是问题所在,目前它无法找到/访问本地存储以获取激活码 以下是我目前拥有的: 应用商店重定向电子邮件中的第一个链接

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

为了帮助解释问题,我将介绍我正在努力实现的目标;我们的网站会发送一封电子邮件,邀请用户注册我们的客户端应用程序。电子邮件中的链接点击我们的网站,存储激活码,然后重定向到Google Play Store页面。一旦用户下载了应用程序,然后通过介绍屏幕进行操作,它就会尝试通过加载WebView来查找激活码。这就是问题所在,目前它无法找到/访问本地存储以获取激活码

以下是我目前拥有的:

应用商店重定向电子邮件中的第一个链接

从上述WebView加载的应用程序激活

这表明该值未设置到本地存储或无法访问。我知道它已经被存储,因为如果我在Android设备上从标准浏览器导航到上面的url,它会给我期望的值

我无法确定我是否遗漏了任何隐藏的设置,或者这是不可能的。我相信我已经打开了与WebView的权限或设置相关的任何内容,正如在对可能相关问题的其他回答中所建议的那样。如果有帮助的话,我正在BlackView Android 6.0手机上进行测试

有什么明显的我遗漏的吗?

根据:

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


我的建议可能是使用深度链接。流程将类似于:

如前所述,将激活代码保存在本地存储器中 当用户下载您的应用程序并完成登录过程时 包括一些按钮或自动打开网页 系统浏览器中的页面。 现在,您可以访问保存数据的本地存储 激活码。 在网站上提供一个带有激活码的深度链接按钮 在url中 用户单击它并返回到您的应用程序,您可以在其中抓取 从意图激活代码
如果你不想因为离开应用程序而破坏用户体验,也许你应该看看推荐链接搜索:Google Play Campaign Measurement。从Google Play Store下载应用程序后,您可以访问应用程序中的推荐号码。在这种情况下,您可以忽略访问任何本地存储值并离开应用程序。

在本地存储/cookies中的默认Android web浏览器中设置的任何值在应用程序的WebView中将不可见。这是一个完全不同的浏览器实例。我们能够通过使用SafariViewController在iOS上实现这一点。我想我希望Android的限制性会更小。您是否相信通过使用cookie可以实现类似的功能,并能够从我们的应用程序中访问它们?出于明显的安全原因,您的应用程序有自己的缓存、cookie存储等-它不共享浏览器应用程序的数据。Cookie是在一个单独的线程上管理的,因此像建立索引这样的操作不会阻塞UI线程。如果您想在应用程序中使用cookies,请按照CookieSyncManager中的说明进行操作。我建议您使用深度链接?因此,流程如下:1。如前所述,将激活代码保存在本地存储器2中。当用户下载您的应用程序并通过入职流程时,请包含一些按钮或自动执行,以在系统浏览器中打开网页。3.现在您可以访问保存激活码的本地存储。4.在网站上提供一个深度链接按钮,该按钮在url 5中有激活代码。用户单击它并返回到您的应用程序,在那里您可以从意图中获取激活码。这有意义吗?我一定会留意的谢谢!如果这解决了问题,我会让你知道,这样你就可以得到答案。我继续使用了竞选衡量建议。我在重定向到Play Store时传递了相关信息,然后在应用程序运行时使用这些信息。
    <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>
<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;
    }
});
<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