更新记录

1.1.4(2025-07-18)

限时促销:0.1元 (截止8月30日),本插件为UTS插件,支持UniappX

包含以下功能:

iOS KeyChain管理器(钥匙串) 读取、写入、删除

鸿蒙AssetStoreKit管理器(资产管理器) 读取、写入、删除

安卓、iOS、鸿蒙 唯一ID生成和存储(一般用于游客登录,或记住用户名、密码)

支持 iOS、鸿蒙 通用的持久化保存方案,即卸载重装后依然可以读取卸载前保存的数据。

1、增加对鸿蒙的支持
2、增加 安卓、iOS、鸿蒙 生成唯一ID并持久保存的案例。

3、安卓唯一ID:安卓不支持持久化保存,但可以直接获取 AndroidID 作为 UUID【无需额外权限】
4、iOS唯一ID:通过时间戳+随机16进制数生成,生成后保存到钥匙串中【无需额外权限,无需IDFA(广告标识符)、IDFV权限。传统方式使用IDFA/IDFV/设备id 作为游客登陆 有审核风险】
5、鸿蒙唯一ID:通过时间戳+随机16进制数生成,生成后保存到AssetStore中【需要STORE_PERSISTENT_DATA权限,已声明在插件中】

1.1.3(2025-07-18)

限时促销:0.1元 (截止8月30日)

包含以下功能:

iOS KeyChain管理器(钥匙串) 读取、写入、删除

鸿蒙AssetStoreKit管理器(资产管理器) 读取、写入、删除

安卓、iOS、鸿蒙 唯一ID生成和存储(一般用于游客登录,或记住用户名、密码)

支持 iOS、鸿蒙 通用的持久化保存方案,即卸载重装后依然可以读取卸载前保存的数据。

1、增加对鸿蒙的支持
2、增加 安卓、iOS、鸿蒙 生成唯一ID并持久保存的案例。

3、安卓唯一ID:安卓不支持持久化保存,但可以直接获取 AndroidID 作为 UUID【无需额外权限】
4、iOS唯一ID:通过时间戳+随机16进制数生成,生成后保存到钥匙串中【无需额外权限,无需IDFA(广告标识符)、IDFV权限。传统方式使用IDFA/IDFV/设备id 作为游客登陆 有审核风险】
5、鸿蒙唯一ID:通过时间戳+随机16进制数生成,生成后保存到AssetStore中【需要STORE_PERSISTENT_DATA权限,已声明在插件中】

1.1.2(2025-07-18)

限时促销:0.1元 (截止8月30日)

包含以下功能:

iOS KeyChain管理器(钥匙串) 读取、写入、删除

鸿蒙AssetStoreKit管理器(资产管理器) 读取、写入、删除

安卓、iOS、鸿蒙 唯一ID生成和存储(一般用于游客登录,或记住用户名、密码)

支持 iOS、鸿蒙 通用的持久化保存方案,即卸载重装后依然可以读取卸载前保存的数据。

1、增加对鸿蒙的支持
2、增加 安卓、iOS、鸿蒙 生成唯一ID并持久保存的案例。

3、安卓唯一ID:安卓不支持持久化保存,但可以直接获取 AndroidID 作为 UUID【无需额外权限】
4、iOS唯一ID:通过时间戳+随机16进制数生成,生成后保存到钥匙串中【无需额外权限,无需IDFA(广告标识符)、IDFV权限。传统方式使用IDFA/IDFV/设备id 作为游客登陆 有审核风险】
5、鸿蒙唯一ID:通过时间戳+随机16进制数生成,生成后保存到AssetStore中【需要STORE_PERSISTENT_DATA权限,已声明在插件中】
查看更多

平台兼容性

云端兼容性

阿里云 腾讯云 支付宝云

uni-app x(4.75)

Chrome Safari Android iOS 鸿蒙 微信小程序
× × - ×

aper-keychainmanager

使用文档

import { key_LoadText,key_SaveText,key_Delete,gen_UUID } from '@/uni_modules/aper-keychainmanager'
//导入要用到的函数

let myuuid = gen_UUID();//随机生成uuid
let savesuccess = key_SaveText("myuuid",uuid);//将 生成的uuid 保存到myuuid
let username = key_LoadText("myuuid");//读取 myuuid的内容
let delsuccess = key_Delete("myuuid");//删除 myuuid

使用示例

<template>
    <view>
        <image class="logo" src="/static/logo.png"></image>
        <view v-if="isiOS || isHarmony">
            <text class="title">持久化存储,卸载重装也不影响</text>
            <text class="info">支持 iOS(采用Keychain)</text>
            <text class="info">支持 鸿蒙(采用AssetStore)</text>
            <text class="info">测试JSON: {{testjson01}}</text>
            <text class="info">用户名: {{username}}</text>
            <text class="info">密码: {{password}}</text>

            <button class="btn" @click="savekey">保存</button>
            <button class="btn" @click="deletekey">删除</button>
        </view>

        <text class="title">唯一ID解决方案,卸载重装也不影响:</text>
        <text class="info">支持 iOS(采用Keychain)</text>
        <text class="info">支持 鸿蒙(采用AssetStore)</text>
        <text class="info">支持 安卓(读取AndroidID)</text>

        <button class="btn" @click="genid">生成唯一ID并存储</button>
        <text class="title" >唯一ID: {{myuuid}}</text>
    </view>
</template>

<script>
    // #ifdef APP-ANDROID
    import { gen_UUID } from '@/uni_modules/aper-keychainmanager'
    // #endif

    // #ifdef APP-HARMONY || APP-IOS
    import { key_LoadText,key_SaveText,key_Delete,gen_UUID } from '@/uni_modules/aper-keychainmanager'
  // #endif

    export default {
        data() {
            return {
                testjson01: '',
                username: '',
                password: '',
        myuuid: '',
            }
        },
        onLoad() {
      setInterval(()=>{this.readkey()},1000)
        },
        computed: {
            isiOS() : boolean {
                // #ifdef APP-IOS
                return true
                // #endif
                return false
            },
            isHarmony() : boolean {
                // #ifdef APP-HARMONY
                return true
                // #endif
                return false
            },
            isAndroid() : boolean {
                // #ifdef APP-ANDROID
                return true
                // #endif
                return false
            },
        },
        methods: {
            //读取
            readkey(){
                // #ifdef APP-ANDROID
                this.genid();
                return
                // #endif

                // #ifdef APP-HARMONY || APP-IOS
                this.myuuid = key_LoadText("myuuid");
                this.testjson01 = key_LoadText("testjson01");
                //不存在则返回空字符串
                this.username = key_LoadText("username");
                this.password = key_LoadText("password");
                console.log(this.myuuid,this.testjson01,this.username,this.password);
                // #endif
            },
            //保存
            savekey(){
        //需要注意的是:
        //  key长度不能超过256字节
        //  text长度不能超过1024字节
                // #ifdef APP-HARMONY || APP-IOS
                if(key_SaveText("testjson01",`{"hello":"world","testarr":[1,2,3,4]}`)){
                    console.log("测试JSON 保存成功")
                }else{
                    console.log("测试JSON 保存失败")
                }

                //两个参数分别是 :key,value
                key_SaveText("username","testuser");
                key_SaveText("password","testpass");

                this.simpleToast("保存完成!卸载app也不会失效哦")
                // #endif
            },
            //删除
            deletekey(){
                // #ifdef APP-HARMONY || APP-IOS
                if(key_Delete("testjson01")){
                    console.log("测试JSON 删除成功")
                }else{
                    console.log("测试JSON 删除失败")
                }

                key_Delete("username")
                key_Delete("password")              

                this.simpleToast("删除完成,读取试试呢!")
                // #endif
            },

      //##########################################
      //生成唯一ID
      genid(){
                // #ifdef APP-ANDROID
                //安卓 解决方案:直接获取AndroidID
                this.myuuid = gen_UUID();
                return
                // #endif

                // #ifdef APP-HARMONY || APP-IOS
                //iOS、鸿蒙 解决方案:通过13位时间戳 + 随机数产生UUID,重复概率很低,无需任何权限。UUID通过KeyMan保存到手机中持久化存储。
        const uuid = gen_UUID();
        if(!key_Delete("myuuid")){//先删除之前保存的
          this.simpleToast("唯一ID更新失败,请重试")
        }

        if(key_SaveText("myuuid",uuid)){
          this.simpleToast("唯一ID已生成,卸载重装试试吧。")
        }
                // #endif
      },

      simpleToast(text:string){
        uni.showToast({
         title: text,
         duration: 2000
        });
      }

        }
    }
</script>

<style>
    .logo {
        height: 80px;
        width: 80px;
        margin: 80px auto 25px auto;
    }

    .title {
        font-size: 18px;
        color: #8f8f94;
    text-align: center;
        margin-top: 15px;
    }

    .info{
        text-align: center;
    }
    .btn{
         margin: 5px;
    }
</style>

权限

安卓 无

苹果 无

鸿蒙 ohos.permission.STORE_PERSISTENT_DATA (已声明在UTS插件中,无需额外声明,不会弹窗请求权限)

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问