Read/Write Value API
writevalue:// 会把 scheme 之后的全部内容作为一个字符串保存在应用的私有存储中;readvalue:// 则把它注入回页面,在 iOS 上是 window.storedValues,在 Android 上是 window.appSettings。这些值在重启和清除缓存后依然保留,卸载应用后才会消失(在 Android 上清除应用数据时也会消失)。
Lovable + 设备存储
用户希望应用能记住他们。Cookie 和 localStorage 通常能让您的 Lovable 应用保持登录,但它们属于 Web 存储,清除缓存后就会消失。WebViewGold 增加了两个小巧的原生辅助功能:一个持久化的值存储(writevalue:// 和 readvalue://),用于保存设置和恢复会话;以及一个设备 UUID(get-uuid://),用于您服务器上的设备绑定许可证、受信任设备和按设备区分的设置。
每个平台一次性 $109 起,或由我们的团队全程代劳,$698 起。
writevalue:// 会把 scheme 之后的全部内容作为一个字符串保存在应用的私有存储中;readvalue:// 则把它注入回页面,在 iOS 上是 window.storedValues,在 Android 上是 window.appSettings。这些值在重启和清除缓存后依然保留,卸载应用后才会消失(在 Android 上清除应用数据时也会消失)。
get-uuid:// 会设置 JavaScript 变量 uuid,这是一个不含个人信息的唯一设备 ID。也可以把它以 ?uuid=XYZ 的形式附加到第一次请求上(enhanceUrlUUID / UUID_ENHANCE_WEBVIEW_URL),或者注入到每个页面中(autoInjectVariable / AUTO_INJECT_VARIABLES)。
它不会在设备之间同步,不是数据库,也不是密码保险箱。值要尽量小(设置、标志位、可吊销的令牌),用户数据请放在 Supabase 或 Lovable Cloud(Postgres、存储、边缘函数) 中,并且绝不要把 UUID 当作身份证明。
把这段粘贴到 Lovable 中以实现 Web 应用端。检查结果,发布,然后在 WebViewGold 应用中测试。
为 WebViewGold 应用封装添加原生持久化。1) 创建 src/lib/nativeStore.ts,包含:inApp(),判断 navigator.userAgent 是否包含我的 WebViewGold 标识;writeValues(obj),导航到 writevalue:// 后接用分号连接的 key=value 对(值仅限字母、数字、点、连字符和下划线);readValues(),导航到 readvalue://,并在 250 毫秒后解析 window.storedValues(iOS)或 window.appSettings(Android)。在应用之外改用 localStorage。2) 订阅 supabase.auth.onAuthStateChange,在 SIGNED_IN 和 TOKEN_REFRESHED 时写入 rt=REFRESH_TOKEN,同时写入 theme 和 lang。3) 应用启动时,如果 supabase.auth.getSession() 没有返回会话,就读取这些值;如果存在 rt,就调用 supabase.auth.refreshSession({ refresh_token: rt })。4) 登录后读取全局变量 uuid(如果未定义,先导航一次到 get-uuid://),并把它 upsert 到启用 RLS 的 devices 表(user_id、uuid、platform、last_seen)中。5) 在设置中添加带“移除”按钮的“已登录设备”列表。6) 退出登录时,重写一份不含 rt 的值。绝不要在同一时刻触发两个原生 scheme。
出色的工作!无需任何编码就能轻松完成。简单快捷!创作者也提供了大力帮助!
登录后写入一个可吊销的刷新令牌。如果清除缓存后 Web 会话没了,就在启动时把它读回来,悄悄恢复会话,而不是显示登录页面。
主题、语言、单位、“已完成引导”、上次打开的工作区:启动时在本地读取,比后端响应更早,离线时也能用。
“Pro 版可在两台设备上使用”:激活时注册 UUID,在服务器上统计活跃设备数,并提供“管理设备”页面来释放名额。
在用户已经确认过的设备上跳过第二重验证或邮件验证码,并显示“已登录设备:iPhone、Pixel”,每台设备都可以单独退出登录。
前台的 iPad 或仓库里的扫码手机,应该始终打开同一个门店或工位:按设备保存工位 ID 即可。
大约一小时,外加后端里的一张设备表。
在 Config.swift(useragent_iphone、useragent_ipad)和 Config.java(USER_AGENT)中设置自定义 User-Agent,只在匹配时才调用这些 scheme。在浏览器中则回退到 localStorage。
writevalue:// 之后的所有内容都会原样保存为一个字符串,所以请使用简单的 key=value;key=value 格式,并且只用 URL 安全的值(字母、数字、点、连字符、下划线)。每次写入都会替换整个字符串,因此请始终写入所有键。
导航到 readvalue://,稍等片刻(文档中用的是 200 毫秒),然后解析 window.storedValues(iOS)或 window.appSettings(Android)。先应用主题和语言,然后在需要时恢复登录会话。
登录后读取 uuid(在调用 get-uuid:// 之后,或通过自动注入选项自动获得),并把它和用户一起保存在 Supabase 或 Lovable Cloud(Postgres、存储、边缘函数) 中:用户 ID、UUID、平台、最后活跃时间。设备数量限制要在服务器上强制执行,绝不要放在客户端。
退出登录时,重写一份不含令牌的值,并在服务器上吊销该令牌。删除账号时,也一并删除设备记录(账号删除指南)。
iOS 在每次脚本执行中只处理一次 scheme 导航,所以请用短暂的延迟把调用串起来(或者使用支持 get-uuid 的 multiapicall://),而不是在同一时刻同时触发。
在应用和浏览器中使用同一套 API。把 YourAppToken 替换为您的自定义 User-Agent。
var inApp = navigator.userAgent.indexOf("YourAppToken") !== -1;
function nativeWrite(values) { // { rt: "abc123", theme: "dark", lang: "en" }
var str = Object.keys(values).map(function (k) { return k + "=" + (values[k] || ""); }).join(";");
if (!inApp) { try { localStorage.setItem("appValues", str); } catch (e) {} return; }
window.location.href = "writevalue://" + str;
}
function parseValues(str) {
var out = {};
String(str || "").split(";").forEach(function (pair) {
var i = pair.indexOf("=");
if (i > 0) out[pair.slice(0, i)] = pair.slice(i + 1);
});
return out;
}
function nativeRead(callback) {
if (!inApp) { callback(parseValues(localStorage.getItem("appValues"))); return; }
window.location.href = "readvalue://";
setTimeout(function () {
callback(parseValues(window.storedValues || window.appSettings)); // iOS || Android
}, 250);
}
function nativeDeviceId(callback) {
if (!inApp) { callback(null); return; }
if (typeof uuid !== "undefined") { callback(uuid); return; } // 已自动注入
window.location.href = "get-uuid://";
setTimeout(function () { callback(typeof uuid !== "undefined" ? uuid : null); }, 250);
}先用它们;在应用内,它们的持久性和在浏览器中一样。原生值存储是一份备份,用来保存必须在清除缓存后依然存在的内容,例如可吊销的设备令牌、引导状态或语言选择,而且启动时即可读取,离线也能用。
不是。它是一个用于您自己应用逻辑、不含个人信息的设备标识符,不是 IDFA,也不是 Android 广告 ID,读取它也不会弹出 App Tracking Transparency 提示。如果您用它跨其他公司的应用跟踪用户,或者把它分享给广告网络,那就构成了跟踪,ATT 规则随之适用。
不会。值按安装、按设备保存。凡是应该跟着用户走的内容(个人资料、偏好设置、购买记录)都应放在您的后端;设备存储只负责加快启动速度,并让一台设备保持登录。
卸载后保存的值就没有了,而且您也不应假设 UUID 会保持不变。让用户重新登录、重新注册设备,并在一段时间不活跃后或通过“管理设备”页面,在 Supabase 或 Lovable Cloud(Postgres、存储、边缘函数) 中释放旧设备。
只能测试兜底方案。这些 scheme 只在 WebViewGold 应用内有效,在桌面浏览器或 Lovable 预览中都不起作用。检测自定义 User-Agent,在浏览器中使用 localStorage 兜底,并在手机上用应用的构建版本测试真实流程。
结果相同,只是您需要投入的工作量不同。三种方式都附带审核通过保证和 7×24 小时人工支持。
$109 每个平台,一次性付费
WebViewGold 许可证:一个现成的 Xcode 或 Android Studio 项目。粘贴您的 URL,设置名称和图标,开启所需功能,构建并提交。永久免费更新。
在主页查看方案$349 每个许可证,一次性附加购买
无需 Mac、Xcode 或 Android Studio:在浏览器中完成配置,我们在云端构建两个应用,并将其交付到 App Store Connect 和 Play Console。
Cloud Builder 如何运作 试用免费演示$698 每个平台 $798
把您的 URL 和图标发给我们。我们的团队在 72 小时内完成配置、构建并交付您的应用,白标,附源码项目。两个平台共 $1,158。
Full Service 详情 服务提供方:冬季特惠价格有效期至 2026年12月31日。
App Store & Google Play 审核通过保证 – 否则 14 天内退款
想直接交给我们?Full Service:我们在 72 小时内完成配置、构建并交付,每个平台 $698 起。有疑问?通过 7×24 小时在线聊天联系我们。
退款依据我们 FAQ 中列出的条件:应用因非内容原因被 Apple 和/或 Google 拒审,并在购买后 14 天内提出申请。