示例工程前端移动开发跨平台【免费下载链接】uni-appA cross-platform framework using Vue.js项目地址https://gitcode.com/gh_mirrors/un/uni-app点击查看免费下载uni.getAppBaseInfo是 uni-app x以及 uni-app中用于获取应用基本信息的核心 API可在 Android、iOS、鸿蒙HarmonyOS、Web 与各小程序平台上一行代码拿到 AppID、应用名称、版本号、主题、渠道、签名等二十余项运行元数据。本文基于当前仓库的uni-getAppBaseInfouni_modules 插件源码系统讲解该 API 的调用方式、全部返回字段与兼容性、典型实战示例并从 Android / iOS / HarmonyOS 三端实现源码剖析其底层数据来源帮助你准确使用字段过滤与渠道配置避免踩坑。功能概述与适用场景在 uni-app x 应用开发中经常需要根据当前运行的应用是谁、什么版本、跑在什么平台来决定业务逻辑例如在页面底部展示应用名称与版本号关于页、设置页判断是否处于 uni-app x 工程isUniAppX以区分新旧编译体系读取编译器 / 运行时版本uniCompilerVersion、uniRuntimeVersion做能力降级或升级提示读取 Android 分发渠道channel用于渠道统计与差异化运营读取应用签名signature用于安全校验。该功能在仓库中以 uni_modules 插件形式提供模块名为uni-getAppBaseInfo其目录结构如下见 src/uni_modules/uni-getAppBaseInfo目录/文件平台作用utssdk/interface.uts多端共用定义GetAppBaseInfoOptions、GetAppBaseInfoResult等全部类型与Uni接口声明utssdk/protocol.uts多端共用声明 API 常量API_GET_APP_BASE_INFO getAppBaseInfoutssdk/app-android/AndroidUTS 编译为 Kotlin 的实现与设备工具类utssdk/app-ios/iOSUTS 编译为 Swift 的实现与设备工具类utssdk/app-harmony/HarmonyOSUTS 编译为 ArkTS 的实现按 package.json 中uni_modules.uni-ext-api的声明该扩展 API 在 Android 端以 Kotlin 实现、iOS 端以 Swift 实现js: false即 App 端走原生实现而非 JS 桥接。插件要求 HBuilderX^3.6.8及以上版本。API 用法与参数说明uni.getAppBaseInfo是一个同步 API调用形式为const res uni.getAppBaseInfo(options?)options 参数| 名称 | 类型 | 必填 | 默认值 | 描述 | | :- | :- | :- | :- | :- | | options |GetAppBaseInfoOptions| 否 | 包含所有字段的过滤对象 | 过滤的字段对象不传参数默认为获取全部字段 |options的唯一属性是| 名称 | 类型 | 必备 | 描述 | | :- | :- | :- | :- | | filter | Arraystring | 是 | 过滤字段的字符串数组假如要获取指定字段传入此数组 |也就是说可以通过filter数组只取自己关心的字段减少不必要的原生调用开销。例如只取应用名与版本const res uni.getAppBaseInfo({ filter: [appName, appVersion] });从 Android 端源码 utssdk/app-android/index.uts 可以看到当config为null或filter为空数组时实现会自动装配一份默认过滤列表包含appId、appName、appVersion、appVersionCode、appLanguage、appWgtVersion、isUniAppX、uniPlatform、packageName、signature、appTheme、channel等随后逐字段判断filterArray.indexOf(field) ! -1才去取值与文档中不传参数默认为获取全部字段的行为一致。iOS 端实现utssdk/app-ios/index.uts采用相同的 filter 判定逻辑。返回值字段详解uni.getAppBaseInfo的返回类型为GetAppBaseInfoResult具体字段类型定义位于 utssdk/interface.uts。下表完整列出各字段的含义与多端兼容性x 表示该端不支持Web/小程序列的数字为 uni-app x 在该端可用的版本Android/iOS/HarmonyOS 列的数字为 App 端可用版本| 名称 | 类型 | 兼容性 | 描述 | | :- | :- | :- | :- | | appId | string | Web: 4.0; 微信小程序: 4.41; 支付宝小程序: 5.31; Android: 3.91; iOS: 4.11; HarmonyOS: 4.61 | 应用的标识即 DCloud AppID来自manifest.json | | appName | string | Web: 4.0; 微信小程序: 4.41; 支付宝小程序: 5.31; Android: 3.91; iOS: 4.11; HarmonyOS: 4.61 | 应用的名称 | | appVersion | string | Web: 4.0; 微信小程序: 4.41; 支付宝小程序: 5.31; Android: 3.91; iOS: 4.11; HarmonyOS: 4.61 | 应用的版本名称App 平台为原生应用安装包的版本名称 | | appVersionCode | string | Web: 4.0; 微信小程序: 4.41; 支付宝小程序: 5.31; Android: 3.91; iOS: 4.11; HarmonyOS: x | 应用的版本号App 平台为原生应用安装包的版本号鸿蒙暂不支持 | | appLanguage | string | Web: 4.0; 微信小程序: 4.41; 支付宝小程序: 5.31; Android: 3.91; iOS: 4.11; HarmonyOS: x | 应用的语言如 en、zh-Hans、zh-Hant、fr、es | | appTheme | string | Android: 4.18; iOS: 4.18; HarmonyOS: 4.61 | 应用的主题合法值light、dark、auto| | appWgtVersion | string | Android: 3.91; iOS: 4.11; HarmonyOS: 4.61 | 应用资源wgt的版本名称App 平台为当前应用资源manifest.json中的版本名称 | | hostLanguage | string | 微信小程序: 4.41; 支付宝小程序: 5.31; HarmonyOS: 4.61 | 小程序宿主语言 | | hostVersion | string | 微信小程序: 4.41; 支付宝小程序: 5.31 | App、小程序宿主版本 | | hostName | string | 微信小程序: 4.41; 支付宝小程序: 5.31 | 小程序宿主名称 | | hostPackageName | string | 均不支持x | 小程序宿主包名 | | hostSDKVersion | string | 微信小程序: 4.41; 支付宝小程序: 5.31 | uni 小程序 SDK 版本、小程序客户端基础库版本 | | hostTheme | string | Web: 4.0; 微信小程序: 4.41; 支付宝小程序: 5.31 | 系统当前主题取值为 light 或 dark微信小程序全局配置darkmode: true时才能获取否则为 null不支持小游戏 | | isUniAppX | boolean | Web: 4.18; 微信小程序: 4.41; 支付宝小程序: 5.31; Android: 3.91; iOS: 4.11; HarmonyOS: 4.61 | 是否 uni-app x 项目 | | uniCompilerVersion | string | Web: 4.18; 微信小程序: 4.41; 支付宝小程序: 5.31; Android: 4.0; iOS: 4.11; HarmonyOS: 4.61 | uni 编译器版本名称 | | uniCompilerVersionCode | number | Web: 4.18; 微信小程序: 4.41; 支付宝小程序: 5.31; Android: 4.0; iOS: 4.11; HarmonyOS: 4.61 | uni 编译器版本号 | | uniRuntimeVersion | string | Web: 4.18; 微信小程序: 4.41; 支付宝小程序: 5.31; Android: 3.91; iOS: 4.11; HarmonyOS: 5.0 | uni 运行时版本名称 | | uniRuntimeVersionCode | number | Web: 4.0; 微信小程序: 4.41; 支付宝小程序: 5.31; Android: 3.91; iOS: 4.11; HarmonyOS: 4.61 | uni 运行时版本号 | | uniPlatform | string | Web: 4.0; 微信小程序: 4.41; 支付宝小程序: 5.31; Android: 3.91; iOS: 4.11; HarmonyOS: 4.61 | uni-app 运行平台合法值见下文 | | channel | string | Android: 4.28; iOS: 4.31 | 应用的分发渠道仅 App 端支持 | | packageName | string | 微信小程序: 5.13; Android: 3.97; iOS: 5.11; HarmonyOS: 4.61 | 微信小程序: 小程序 appIdAndroid: 包名iOS: Bundle ID鸿蒙: bundleName | | bundleName | string | HarmonyOS: 4.61 | 鸿蒙的包名 | | bundleId | string | iOS: 4.11 | iOS 的 Bundle ID | | signature | string | Android: 3.97; iOS: 4.11 | Android: 应用签名证书的 SHA1 值全部小写中间不含 :iOS: 应用签名证书中绑定的 Bundle IDAppleID的 md5 值全部小写 | | PCKernelVersion | string | 微信小程序: 4.41 | PC 内核版本号仅在 PC 端存在该值 | | SDKVersion | string | 微信小程序: 4.41; 支付宝小程序: 5.25 | 客户端基础库版本 | | enableDebug | boolean | 微信小程序: 4.41 | 是否开启调试 | | fontSizeScaleFactor | number | 微信小程序: 4.41 | 微信字体大小缩放比例 | | fontSizeSetting | number | 微信小程序: 4.41 | 微信字体大小单位 px需要基础库2.23.4 | | host |GetAppBaseInfoResultHost| 微信小程序: 4.41 | 当前小程序运行的宿主环境 | | theme | string | 微信小程序: 4.41 | 系统当前主题取值为light或dark全局配置darkmode: true时才能获取否则为 undefined不支持小游戏 |uniPlatform 合法值uniPlatform用于标识当前运行的平台合法值包括app、web、mp-weixin、mp-alipay、mp-baidu、mp-toutiao、mp-lark、mp-qq、mp-kuaishou、mp-jd、mp-360、quickapp-webview、quickapp-webview-union、quickapp-webview-huawei。host 对象的属性| 名称 | 类型 | 兼容性 | 描述 | | :- | :- | :- | :- | | appId | string | 微信小程序: 4.41 | 宿主 app第三方 App对应的 appId当小程序运行在第三方 App 环境时才返回 |theme 的合法值dark深色主题、light浅色主题。已废弃字段仅向下兼容保留以下字段在新版本中已废弃建议使用上表中的新字段替代| 废弃字段 | 说明 | | :- | :- | |uniCompileVersion| uni 编译器版本名称已废弃仅为了向下兼容保留 | |uniCompileVersionCode| uni 编译器版本号已废弃仅为了向下兼容保留 | |language| 应用的语言已废弃仅为了向下兼容保留新字段为appLanguage | |version| 引擎版本号已废弃仅为了向下兼容保留 |在 interface.uts 的类型定义中uniCompileVersion、language、version等字段的 JSDoc 均标注了deprecated 已废弃仅为了向下兼容保留与文档说明一致。关键字段的细节与注意事项appTheme仅 App 平台支持appTheme返回应用的主题配置信息。当返回值为auto时代表跟随系统此时若需知道当前实际是 light 还是 dark需要通过 getSystemInfo 或 getDeviceInfo 查询osTheme。从源码看Android 端直接调用UTSAndroid.getAppTheme()见 app-android/index.utsiOS 端调用UTSiOS.getAppTheme()见 app-ios/index.uts鸿蒙端调用UTSHarmony.getAppTheme()见 app-harmony/index.uts。hostTheme在浏览器Web环境中hostTheme可能是操作系统的 Theme 而不是浏览器的外观这取决于浏览器的实现取值不一定可靠使用时需要留意。channel渠道信息channel仅 App 平台支持其中 Android 平台支持渠道包云打包时需在 HBuilderX 的App 打包界面中配置渠道详见 配置渠道包离线打包时需在原生工程中配置详见 Android 平台配置应用渠道包。从源码看Android 端通过读取应用metaData中的DCLOUD_CHANNEL键获取渠道值见 AppBaseInfoDeviceUtil.uts读取失败时返回空字符串。按 docs/tutorial/app-package.md 的说明云端打包默认提供华为huawei、OPPOoppo、VIVOvivo、小米xiaomi、荣耀honor、应用宝yyb等渠道勾选无时channel返回空字符串自定义渠道可在manifest.json源码视图的__hbuilderx.channel_list中配置例如{ //其它数据 //根节点下配置__hbuilderx如下 __hbuilderx: { channel_list:[ { id:lenovo, name:联想 } ] } }保存后重新打开App 打包界面在APK 渠道包项中即可看到新增的自定义渠道勾选后提交云端打包才能生效。完整实战示例仓库中的演示页面 src/pages/API/get-app-base-info/get-app-base-info.uvue 提供了完整的可运行示例页面放置一个获取App基础信息按钮点击后调用uni.getAppBaseInfo()将返回对象序列化后按键名排序渲染为列表。template page-head :titletitle/page-head view classuni-common-mt view classuni-list view classuni-list-cell v-for(item, index) in data.items :keyindex stylealign-items: center; view classuni-pd view classuni-label stylewidth:180px;{{item.label}}/view /view view classuni-list-cell-db text classuni-list-cell-db-text{{ item.value ? 未获取 : item.value }}/text /view /view /view view classuni-padding-wrap view classuni-btn-v button typeprimary tapgetAppBaseInfo获取App基础信息/button /view /view /view /template script setup languts type Item { label : string, value : string, } type DataType { items: Item[]; } const title ref(getAppBaseInfo) const data reactive({ items: [] as Item[], } as DataType) const getAppBaseInfo () { const res uni.getAppBaseInfo(); const res_str JSON.stringify(res); const res_obj JSON.parseObject(res_str); const res_map res_obj!.toMap(); let keys [] as string[] res_map.forEach((_, key) { keys.push(key); }); data.items [] as Item[]; keys.sort().forEach(key { const value res[key]; if (value ! null) { const item { label: key, value: ((typeof value object) ? JSON.stringify(value) : value) } as Item; data.items.push(item); } }); } /script示例要点不传参数调用uni.getAppBaseInfo()一次性取回全部字段通过JSON.stringifyJSON.parseObjecttoMap()将返回对象转为可遍历的 Map对键排序后渲染空值显示为未获取对象类型的值如host使用JSON.stringify序列化展示。如果你只需要部分字段建议传入filter数组例如uni.getAppBaseInfo({ filter: [appId, appVersion] })。三端源码实现剖析uni-getAppBaseInfo是典型的同一接口、分端原生实现的 UTS 插件各端实现都围绕GetAppBaseInfoResult类型逐字段取值。从源码结构可以清晰看到其数据来源链路。Android编译为 Kotlin入口函数getAppBaseInfo位于 utssdk/app-android/index.uts其内部调用私有函数getBaseInfo(filterArray)逐字段填充结果主要数据来源UTSAndroid.getAppId()、UTSAndroid.getAppName()AppID 与应用名UTSAndroid.getAppVersion()[name]/[code]原生安装包版本名称与版本号UTSAndroid.isUniMp()判断是否运行于 uni 小程序宿主环境是则通过 AppBaseInfoDeviceUtil 读取宿主包名、宿主版本、宿主名称、宿主主题通过UiModeManager.getNightMode()判断夜间模式、宿主语言AppBaseInfoDeviceUtil.getAppSignatureSHA1()通过PackageManager获取应用签名并使用MessageDigest计算 SHA1小写且不含冒号异常时返回空字符串AppBaseInfoDeviceUtil.getChannel()读取metaData中的DCLOUD_CHANNEL键版本号转换convertVersionCode()将形如4.28.0的版本名称解析为数字见 app-android/index.uts。另外注意 Android 实现中appLanguage与language的差异appLanguage调用getOsLanguageNormal()会把 zh 系语言规范化为zh-Hans/zh-Hant按-hans、-hant、-tw、-hk、-mo、-cht等后缀判断而language直接返回系统语言信息中的osLanguage。iOS编译为 Swift入口函数与过滤逻辑见 utssdk/app-ios/index.uts主要数据来源封装在 AppBaseInfoDeviceUtil.utsUTSiOS.getAppId()、UTSiOS.getAppName()AppID 与应用名UTSiOS.getAppVersion()/getAppVersionCode()应用版本与版本号Bundle.main.bundleIdentifierBundle ID对应packageName与bundleId两个字段getSignature()读取embedded.mobileprovision中的application-identifier取到真实 Bundle ID 后用CC_MD5计算其 MD5 值并转为小写十六进制字符串UTSiOS.isUniMp()与 Android 一致宿主环境字段hostName、hostTheme、hostVersion、hostPackageName、hostLanguage仅在 uni 小程序宿主中填充版本号转换AppBaseInfoConvertVersionCode()按.切分版本字符串后重组为可解析的数字。HarmonyOS编译为 ArkTS鸿蒙端实现较精简见 utssdk/app-harmony/index.uts通过defineSyncApi注册同步 API数据来源UTSHarmony.getAppId()、getAppName()、getAppVersion()、getAppTheme()、getUniCompilerVersion()、getUniRuntimeVersion()、isUniAppX()I18n.System.getAppPreferredLanguage()应用首选语言I18n.System.getSystemLanguage()系统语言bundleManager.getBundleInfoForSelfSync()读取 bundleNamepackageName与bundleName同源并通过闭包做了单次缓存getBundleInfoOnce避免重复获取。从三端实现可以推断各端取值优先级与字段完整性并不完全一致例如hostVersion、hostSDKVersion、fontSizeSetting等属于小程序宿主专有字段App 端实现中并不填充鸿蒙端不提供channel、signature、bundleId等字段。因此编写跨端代码时应对返回值做空值判断。自动化测试验证仓库在 src/pages/API/get-app-base-info/get-app-base-info.test.js 中提供了针对该 API 的自动化测试可验证各字段的实际返回字符串类字段appId、appName、appVersion、appVersionCode、appLanguage、language、uniCompilerVersion、uniPlatform、uniRuntimeVersion断言非空数字类字段uniCompilerVersionCode、uniRuntimeVersionCode断言非空且 3.90布尔字段isUniAppX断言为 boolean 类型appTheme断言取值属于[light, dark, auto]必填字段uniCompilerVersion、uniCompilerVersionCode、uniRuntimeVersion、uniRuntimeVersionCode、isUniAppX断言均不为 null。该测试用例既是对实现行为的回归保障也可以作为你自测uni.getAppBaseInfo返回结构的参考模板。兼容性与使用前提uni.getAppBaseInfo在各端均有最低版本要求详见上文返回值表格例如 Android 端 uni-app x 从 3.91 起可用、iOS 端 4.11 起、HarmonyOS 端 4.61 起、Web 端 4.0 起、微信小程序 4.41 起。需要注意的是兼容性列中的版本号代表 uni-app x 对应端的可用版本实际使用时请以你安装的 HBuilderX 与运行环境版本为准小程序端的theme/hostTheme依赖宿主配置如微信小程序需开启darkmode: true否则可能为null或undefinedApp 端channel需要先完成渠道配置云打包界面或原生工程配置才有值本文示例页面使用了languts与JSON.parseObject、toMap()等 uni-app x 特有 API适用于 uni-app x 工程若在传统 uni-appVue 3 / Vue 2工程中使用推荐采用文档对应的 JS 写法直接遍历返回对象即可。相关资源API 规范文档docs/api/get-app-base-info.md插件说明与 UTS 插件目录结构src/uni_modules/uni-getAppBaseInfo/readme.md类型定义全部返回字段src/uni_modules/uni-getAppBaseInfo/utssdk/interface.utsAndroid 实现src/uni_modules/uni-getAppBaseInfo/utssdk/app-android/index.utsiOS 实现src/uni_modules/uni-getAppBaseInfo/utssdk/app-ios/index.utsHarmonyOS 实现src/uni_modules/uni-getAppBaseInfo/utssdk/app-harmony/index.uts运行示例页面src/pages/API/get-app-base-info/get-app-base-info.uvue自动化测试src/pages/API/get-app-base-info/get-app-base-info.test.js渠道包配置docs/tutorial/app-package.md#channel如需进一步了解 UTS 语言与插件机制可阅读 docs/plugin/uts-plugin.md 与 docs/uts/README.md。赞分享示例工程前端移动开发跨平台【免费下载链接】uni-appA cross-platform framework using Vue.js项目地址https://gitcode.com/gh_mirrors/un/uni-app点击查看免费下载相关推荐uni-app x 中 uni.getAppBaseInfo() 完全指南跨平台获取 App 基础信息含源码实现解析uni app x 中 uni.getAppBaseInfo 完全指南跨平台获取 App 基础信息含源码实现解析 本篇技术指南围绕 uni app / u示例工程前端移动开发跨平台uni-app x 设备信息获取指南uni.getDeviceInfo 全字段解析与多端实现原理uni app x 设备信息获取指南uni.getDeviceInfo 全字段解析与多端实现原理 uni.getDeviceInfo options? 是 u示例工程前端移动开发跨平台uni-app x 图片信息获取实战uni.getImageInfo API 详解与多端实现原理uni app x 图片信息获取实战uni.getImageInfo API 详解与多端实现原理 uni.getImageInfo 是 uni app x 中示例工程前端移动开发跨平台创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?