Nativescript-vue 在 Android 上保存 cookie

Posted

技术标签:

【中文标题】Nativescript-vue 在 Android 上保存 cookie【英文标题】:Nativescript-vue save cookies on Android 【发布时间】:2020-05-14 21:10:10 【问题描述】:

我正在使用 nativescript-vue 创建一个简单的 webview 应用程序,其中除了加载网站全屏的 webview 之外,应用程序中没有其他内容。

ios 上效果很好,我可以登录网站关闭应用程序然后再打开,我仍然处于登录状态。

android 上,cookie 不会保存,每次关闭应用程序时您都必须重新登录。

我可以通过什么方式在 Android 的 web 视图中启用 cookie?

【问题讨论】:

【参考方案1】:

我无法让它与 cookie 一起工作,所以我不得不切换并使用 localstorage 作为保存令牌而不是 cookie 的备份。

这是我的最终版本的外观:

<template>
    <Page>
        <WebView @loadStarted="onLoadStarted"
                 @loaded="onWebViewLoaded"
                 src="https://yoururl.com/"
        />
    </Page>
</template>

<script>
    import  isAndroid  from "tns-core-modules/platform"

    export default 
        methods: 
            onLoadStarted (webargs) 
                if (isAndroid) 
                    const webView = webargs.object;
                    webView.android.getSettings().setDomStorageEnabled(true) // This will enable local storage
                
            ,
            onWebViewLoaded(webargs)  // I use this only to disable the default zoom buttons
                if (isAndroid) 
                    const webView = webargs.object;
                    webView.android.getSettings().setDisplayZoomControls(false)
                    webView.android.getSettings().setBuiltInZoomControls(false)
                
            ,
        
    ;
</script>

显然,您应该能够启用 cookie 这样做(至少对于较新的 SDK 用户):

webView.on(WebView.loadStartedEvent, (args) => 

      webView.android.getSettings().setAcceptThirdPartyCookies(webView, true)

);

但这并没有按预期工作,因为有时它会保存 cookie,有时它不会,或者有时它会删除 cookie(当您注销时),有时不会。

我希望这些信息对某人有所帮助,因为似乎几乎没有关于此的信息,特别是如果您不太熟悉纯 Java Android 开发。

【讨论】:

【参考方案2】:

这段代码应该可以工作

const webView = webargs.object;

if (android.os.Build.VERSION.SDK_INT >= 21) 
 android.webkit.CookieManager.getInstance().setAcceptThirdPartyCookies(webView.android, true);

【讨论】:

以上是关于Nativescript-vue 在 Android 上保存 cookie的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Nativescript-Vue 中使用 nativescript-drawingpad?

在 Nativescript-Vue 中使用 FontAwesome

在 nativescript-vue 的 FlexboxLayout 中将标签居中

如何更改 nativescript-vue 中的 RadDataForm 样式? (Nativescript-Vue)

NativeScript-vue 条码创建

Nativescript-Vue 每行两列