更新记录

1.0.1(2026-05-04)

[新增]支持harmony [新增]app(ios),支持获取attributiontoken [优化]app(ios),去掉NSUserTrackingUsageDescriptio权限申请(权限最小化原则),由宿主自行申请,无权限也能正常运行(idfa返回空字符串,applyAdvertiserId则无任何作用)

1.0.0(2026-04-20)

首次发布,支持android和ios


平台兼容性

uni-app(4.61)

Vue2 Vue2插件版本 Vue3 Vue3插件版本 Chrome Safari app-vue app-vue插件版本 app-nvue app-nvue插件版本 Android Android插件版本 iOS iOS插件版本 鸿蒙
1.0.0 1.0.0 × × 1.0.0 1.0.0 9.0 1.0.0 13 1.0.0 14
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × × ×

uni-app x(4.61)

Chrome Safari Android Android插件版本 iOS iOS插件版本 鸿蒙 微信小程序
× × 9.0 1.0.0 13 1.0.0 14 ×

yc-china-api

由于uniapp对于设备信息的支持不够友好,所以写一个比较通用的设备信息采集(国内合规)插件。

支持平台

android和ios和harmony 为了兼容原生环境(object-C/java等)和uniapp环境(js/ts等),以及考虑数值类型的精度可能会丢失,所以,所有参数和返回内容,均为字符串。

方法和说明

android方法 调用方式 说明
getAdvertiserId 异步 获取oaid
getRefer 异步 获取本app安装refer
getDeviceInfo 同步 设备信息简要,json字符串,为了减少方法调用,同步能获取到的信息都整合到这里了,见“设备信息”说明
getDeviceInfoAll 同步 更完整的设备信息,加密版,解密方式见“解密”说明
ios方法 调用方式 说明
getBundleId 同步 获取bundleId,比如:com.x.x
getAttributionToken 同步 获取attributiontoken
applyAdvertiserId 异步 宿主App已配置NSUserTrackingUsageDescription时申请idfa权限,并在回调中返回idfa(未配置、未授权或获取失败则返回空字符串)
getAdvertiserId 异步 获取idfa,不触发权限弹窗;未配置NSUserTrackingUsageDescription、未授权或获取失败都返回空字符串
getDeviceInfo 同步 设备信息简要,json字符串,为了减少方法调用,同步能获取到的信息都整合到这里了,见“设备信息”说明
getDeviceInfoAll 同步 更完整的设备信息,加密版,解密方式见“解密”说明
Harmony方法 调用方式 说明
getAdvertiserId 异步 获取oaid,调用时申请APP_TRACKING_CONSENT权限;未授权或获取失败则返回空字符串
getDeviceInfo 同步 设备信息简要,json字符串,为了减少方法调用,同步能获取到的信息都整合到这里了,见“设备信息”说明
getDeviceInfoAll 同步 更完整的设备信息,加密版,解密方式见“解密”说明

调用示例

import * as YcApi from "@/uni_modules/yc-china-api";
let bundleId = YcApi.getBundleId()
YcApi.getAdvertiserId(data => {
    // data就是oaid/idfa,Harmony未授权时为空字符串
})

设备信息

// android
{
    mamu: "", // 设备厂商
    brand: "", // 设备品牌
    model: "", // 设备型号
    api_level: "", // android系统的api等级,比如"36"表示android 16
    yc_id: "", // 设备唯一id(app间不互通,同一个app卸载重装不变)
    pkg: "", // 包名
    advertiser_id: "", // oaid,建议先调用getAdvertiserId,否则无值
    anid: "", // android id
    timezone: "", // 系统设置的时区
    country: "" // 系统设置的国家/地区(两位,比如:US)
}
// ios
{
    model: "", // 设备型号
    os_version: "", // ios系统版本
    bundle_id: "", // bundleId
    advertiser_id: "", // idfa,建议先调用getAdvertiserId,否则无值
    idfv: "", // idfv
    yc_id: "", // 设备唯一id,卸载重装不变
    country: "", // 系统设置的国家/地区(两位,比如:US)
    country_apple: "", // apple认定的国家(三位,比如:USA),通过ios系统接口获得,首次可能无值,如依赖该值,建议每1秒重试一次getDeviceInfo(),最多3次即可
    timezone: "", // 系统设置的时区
}
// Harmony
{
    mamu: "", // 设备厂商
    brand: "", // 设备品牌
    model: "", // 设备型号
    os_version: "", // Harmony系统版本
    api_level: "", // Harmony API版本
    yc_id: "", // 设备唯一id,基于bundleName + AAID生成;AAID首次异步获取中时可能为空,建议稍后重试一次getDeviceInfo()
    pkg: "", // 包名/bundleName
    advertiser_id: "", // oaid,建议先调用getAdvertiserId,否则无值
    aaid: "", // App scoped AAID,用于对齐android id并生成yc_id
    country: "", // 系统设置的国家/地区(两位,比如:US)
    timezone: "" // 系统设置的时区
}

解密

由于getDeviceInfoAll获取到的信息与风控相关,需要请求网络接口进行鉴定(建议在服务器端进行) [POST] https://pfront.wzyoucai.com/interface/device/info/all
header
Content-Type: application/json
body

{
    "plat": "", // 必填,平台,android、ios或Harmony
    "pkg": "", // 必填,android传包名,ios传bundleId,示例:com.x.x
    "data": "", // 通过getDeviceInfoAll方法获取到的值
    "version": "1.0.0", // 可选,uts插件版本
}

请求示例:

curl -X POST -H 'Content-Type: application/json' -d '{"plat":"ios","pkg":"com.x.x","data":"xxx","version":"1.0.0"}' https://pfront.wzyoucai.com/device/info/all

建议:一般情况下,客户端直接用getDeviceInfo即可;如果对风控有要求可以调用getDeviceInfoAll,发到自己的服务器端,然后请求该接口解密。

依赖说明

android,云打包自定oaid的包,无需特殊配置;离线打包,需要把官方打包工程中的oaid_xxx.aar复制到libs里 ios,插件不内置NSUserTrackingUsageDescription,遵循权限最小化原则;如果宿主App需要采集idfa,请在App自身配置NSUserTrackingUsageDescription并按业务合规要求申请ATT权限。未配置或未授权时,getAdvertiserId/applyAdvertiserId都会返回空字符串,且不会触发权限弹窗或闪退。 getAttributionToken通过Apple AdServices获取Apple Ads归因token,不需要额外plist权限;token有效期为24小时,服务端可用该token请求Apple归因接口。 如果你的项目不想给用户弹窗“是否允许追踪”,需要把manifest.json里面的 "sdkConfigs" : { "oauth" : {}, "ad" : {} // 这个去掉,如果开了广告,官方会默认带这个(会在app首次打开申请idfa权限),uts插件里没法帮你去掉 }

Harmony,插件仅为获取OAID声明ohos.permission.APP_TRACKING_CONSENT,并在调用getAdvertiserId时申请权限;未授权或系统返回全0标识时返回空字符串。AAID为App scoped标识,首次启动时AAID为异步获取,getDeviceInfo/getDeviceInfoAll第一次调用可能暂时返回空yc_id,稍后重试即可。

隐私、权限声明

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

Android 需要 android.permission.ACCESS_NETWORK_STATE、android.permission.ACCESS_WIFI_STATE 权限;为兼容 Android 11+ 的 Package Visibility 机制,插件已内置 <queries> 声明以允许查询华为/荣耀/小米/OPPO/vivo 应用市场的 installReferrer ContentProvider。iOS 插件不内置 IDFA 相关 plist 权限声明;如宿主 App 已自行配置 NSUserTrackingUsageDescription 并获得授权,则可获取 IDFA,否则返回空字符串。Harmony 获取 OAID 仅声明 ohos.permission.APP_TRACKING_CONSENT,并在调用 getAdvertiserId 时申请。

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

本插件只采集合规的设备信息(不涉及用户隐私,但应用商店上架要求采集设备信息必须在隐私弹窗之后,请确保在隐私弹窗之后调用)。本插件仅在本机完成采集与加密,不主动发起任何网络请求,数据上传由宿主 App 负责。

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

本插件不包含任何广告 SDK、不展示任何广告。