uniapp 獲取系統信息的方法小結

uni-app提供瞭異步(uni.getSystemInfo)和同步(uni.getSystemInfoSync)的2個API獲取系統信息。

系統信息返回的內容非常多,各操作系統、各傢小程序、各瀏覽器對它們的定義也不相同。uni-app裡重新梳理瞭這些概念,同時為瞭向下兼容也保留瞭這些平臺原來的概念,但不推薦使用。

按照運行環境層級排序,從底層向上,uni-app有6個概念:

  • device:運行應用的設備,如iphone、huawei
  • os:設備的操作系統,如 ios、andriod、windows、mac、linux
  • rom:基於操作系統的定制,Android系統特有概念,如miui、鴻蒙
  • host:運行應用的宿主程序,即OS和應用之間的運行環境,如瀏覽器、微信等小程序宿主、集成uniMPSDK的App。uni-app直接開發的app沒有host概念
  • uni:uni-app框架相關的信息,如uni-app框架的編譯器版本、運行時版本
  • app:開發者的應用相關的信息,如應用名稱、版本

一、uni.getSystemInfo(OBJECT)

異步獲取系統信息

OBJECT 參數說明:

參數名 類型 必填 說明
success Function 接口調用成功的回調
fail Function 接口調用失敗的回調函數
complete Function 接口調用結束的回調函數(調用成功、失敗都會執行)

#success 返回參數說明

參數分類 參數 說明 App平臺值域 Web平臺值域 小程序平臺值域 備註 uni框架最低版本要求
device deviceId 設備 id 。由 uni-app 框架生成並存儲,清空 Storage 會導致改變          
  deviceType 設備類型。如phonepadpcunknow 詳見 phonepadpcunknow phonepadpc   uni-app 3.4.10+
  deviceBrand 設備品牌。如:applehuawei   不支持     uni-app 3.4.10+
  deviceModel 設備型號   部分設備無法獲取     uni-app 3.4.10+
  deviceOrientation 設備方向 豎屏 portrait橫屏 landscape 豎屏 portrait橫屏 landscape 豎屏 portrait橫屏 landscape。僅微信百度小程序支持   uni-app 3.4.13+
  devicePixelRatio 設備像素比         uni-app 3.4.13+
os osName 系統名稱 ios、android ios、android、windows、macos、linux ios、android、windows、macos   uni-app 3.4.10+
  osVersion 操作系統版本。如 ios 版本,andriod 版本         uni-app 3.4.10+
  osLanguage 操作系統語言詳見 Android僅支持主語言+地區:zh-CN 中文簡體、iOS支持主語言+次語言+地區zh-Hans-CN 中文簡體 與瀏覽器語言一致 不支持   uni-app 3.4.10+
  osTheme 操作系統主題 light、dark。iOS平臺隻有將應用主題設置為跟隨系統時才能獲取到系統的主題 不支持 不支持   uni-app 3.4.10+
  osAndroidAPILevel Android 系統API庫的版本。詳情參考Android 官方文檔(opens new window) 僅 Android 支持 不支持 不支持   uni-app 3.4.10+
rom romName rom 名稱 Android 部分機型獲取不到值,詳見。iOS 不支持 不支持 不支持   uni-app 3.4.13+
  romVersion rom 版本 Android 部分機型獲取不到值,詳見。iOS 不支持 不支持 不支持   uni-app 3.4.13+
browser browserName 瀏覽器名稱或App的webview名稱 chrome(android)、wkwebview(ios)、x5webview(app打包x5引擎) chrome、edge、safari、firefox 不支持   uni-app 3.4.10+
  browserVersion 瀏覽器版本、webview 版本     不支持   uni-app 3.4.10+
host hostName 小程序宿主或uniMPSDK的集成宿主名稱,如:WeChatFeiShu 僅 UniMPSDK 支持 不支持 詳見 微信小程序真機運行才有真值 uni-app 3.4.10+
  hostVersion 宿主版本。如:微信版本號 僅 UniMPSDK 支持 不支持 小程序宿主版本   uni-app 3.4.10+
  hostLanguage 宿主語言 僅 UniMPSDK 支持 不支持 小程序宿主語言   uni-app 3.4.10+
  hostTheme 宿主主題 lightdark。僅 UniMPSDK 支持 不支持 lightdark。前提是微信小程序全局配置"darkmode":true時才能獲取   uni-app 3.4.10+
  hostFontSizeSetting 用戶字體大小設置。以“我-設置-通用-字體大小”中的設置為準,單位:px 不支持 不支持 微信小程序、支付寶小程序、百度小程序、QQ小程序、字節小程序(2.53.0+)   uni-app 3.4.13+
  hostPackageName 小程序宿主包名 僅 UniMPSDK 支持 不支持 不支持   uni-app 3.4.10+
  hostSDKVersion uni小程序SDK版本、小程序客戶端基礎庫版本 僅 UniMPSDK 支持 不支持     uni-app 3.4.13+
uni-app框架 uniPlatform uni-app 運行平臺,與條件編譯平臺相同。詳見 app webh5 各傢小程序,如mp-weixin   uni-app 3.4.10+
  uniCompileVersion uni 編譯器版本號。詳見 3.4.103.2.9 等 3.4.103.2.9 等 3.4.103.2.9 等   uni-app 3.4.10+
  uniRuntimeVersion uni 運行時版本。詳見 3.4.103.2.9 等 3.4.103.2.9 等 3.4.103.2.9 等   uni-app 3.4.10+
app appId manifest 中應用appid,即DCloud appid。         uni-app 3.4.10+
  appName manifest 中應用名稱       字節跳動小程序字段沖突,字節跳動小程序原字段與hostName一致 uni-app 3.4.10+
  appVersion manifest 中應用版本名稱。         uni-app 3.4.10+
  appVersionCode manifest 中應用版本名號。         uni-app 3.4.10+
  appWgtVersion 應用資源(wgt)的版本名稱。         uni-app 3.4.15+
  appLanguage 應用設置的語言 enzh-Hanszh-Hantfres enzh-Hanszh-Hantfres enzh-Hanszh-Hantfres   uni-app 3.4.13+
其他 ua userAgent標識     不支持   uni-app 3.4.10+
  screenWidth 屏幕寬度          
  screenHeight 屏幕高度          
  windowWidth 可使用窗口寬度          
  windowHeight 可使用窗口高度          
  windowTop 可使用窗口的頂部位置          
  windowBottom 可使用窗口的底部位置          
  statusBarHeight 手機狀態欄的高度          
  safeArea 在豎屏正方向下的安全區域。由於此屬性理解和使用比較困難,更推薦使用 safeAreaInsets 屬性。詳見     微信、百度(開發者工具暫不支持,真機有效)、字節跳動、飛書、快手小程序、華為快應用    
  safeAreaInsets 在豎屏正方向下的安全區域插入位置。與小程序定義的 safeArea 用途相同,但是規范參考 iOS 平臺的 safeAreaInsets (opens new window)更利於理解和使用。詳見     微信、百度(開發者工具暫不支持,真機有效)、字節跳動、飛書、快手小程序、華為快應用   uni-app 2.5.3+

#某些小程序特殊的返回參數

參數 說明 平臺差異說明
benchmarkLevel 設備性能等級。取值為:-2 或 0(該設備無法運行小遊戲),-1(性能未知),>=1(設備性能值,該值越高,設備性能越好,目前最高不到50) 微信小程序Android版、QQ小程序Android版
batteryLevel 剩餘電量百分比(僅 iOS 有效) 微信小程序
currentBattery 當前電量百分比 支付寶小程序
navigationBarHeight 導航欄的高度 百度小程序
titleBarHeight 標題欄高度 支付寶小程序
albumAuthorized 允許微信使用相冊的開關(僅 iOS 有效) 微信小程序
cameraAuthorized 允許微信使用攝像頭的開關 微信小程序
locationAuthorized 允許微信使用定位的開關 微信小程序
microphoneAuthorized 允許微信使用麥克風的開關 微信小程序
notificationAuthorized 允許微信通知的開關 微信小程序
notificationAlertAuthorized 允許微信通知帶有提醒的開關(僅 iOS 有效) 微信小程序
notificationBadgeAuthorized 允許微信通知帶有標記的開關(僅 iOS 有效) 微信小程序
notificationSoundAuthorized 允許微信通知帶有聲音的開關(僅 iOS 有效) 微信小程序
bluetoothEnabled 藍牙的系統開關 微信小程序
locationEnabled 地理位置的系統開關 微信小程序
wifiEnabled Wi-Fi 的系統開關 微信小程序
cacheLocation 上一次緩存的位置信息 百度小程序(安卓端最低基礎庫版本 3.40.4 ;iOS 最低支持版本 3.70.2)
storage 設備磁盤容量 支付寶小程序

#不推薦使用的返回參數,僅為向下兼容保留

參數 說明 平臺差異說明
pixelRatio 設備像素比  
brand 設備品牌。uni-app 3.4.10+ 後該字段為全小寫,可能要做兼容處理 App、微信小程序、百度小程序、字節跳動小程序、飛書小程序、QQ小程序
model 設備型號 全平臺支持。Web 端部分設備無法獲取具體型號
system 操作系統名稱及版本,如Android 10  
language 應用設置的語言  
version 引擎版本號 Web不支持
platform 客戶端平臺,值域為:iosandroidmac(3.1.10+)windows(3.1.10+)linux(3.1.10+)  
host 宿主平臺 百度小程序
SDKVersion 客戶端基礎庫版本 支付寶小程序和Web不支持
swanNativeVersion 宿主平臺版本號 百度小程序
app 當前運行的客戶端 支付寶小程序
AppPlatform App平臺 QQ小程序
fontSizeSetting 用戶字體大小設置。以“我-設置-通用-字體大小”中的設置為準,單位:px 微信小程序、支付寶小程序、百度小程序、QQ小程序、字節小程序(2.53.0+)

#uniPlatform 返回值說明

生效條件
app App
web Web
mp-weixin 微信小程序
mp-alipay 支付寶小程序
mp-baidu 百度小程序
mp-toutiao 字節跳動小程序
mp-lark 飛書小程序
mp-qq QQ小程序
mp-kuaishou 快手小程序
mp-jd 京東小程序
mp-360 360小程序
quickapp-webview 快應用通用(包含聯盟、華為)
quickapp-webview-union 快應用聯盟
quickapp-webview-huawei 快應用華為

uniCompileVersion編譯器版本 和 uniRuntimeVersion運行時版本,正常情況應該是一樣的值,即uni-app的版本。

如果使用HBuilder自帶的uni-app開發,該值即等同於HBuilder的版本;如果使用單獨的uni-app cli開發,則等同於cli版本。

但在App平臺,uniCompileVersion 和 uniRuntimeVersion 在某些情況的值會不一樣:

  • App雲打包選擇瞭不匹配的打包機版本,比如HBuilder版本較老,雲端已經沒有對應打包機,此時打包後uniCompileVersion會小於uniRuntimeVersion
  • App離線打包,使用瞭不匹配的離線SDK
  • App wgt升級,即手機上安裝的App是老版的uniRuntimeVersion,wgt的新版使用瞭不同版本的HBuilder或uni-app cli版本,並且實施瞭應用資源升級

#romName 返回值說明

解釋
MIUI 小米
EMUI 華為
HarmonyOS 華為鴻蒙
Magic OS 榮耀
ColorOS oppo
Funtouch OS vivo
FLymeOS 魅族
SmartisanOS 錘子

註意:不同rom的版本號規則不同,比如MIUI版本號是V130,而HarmonyOS的版本號是2.0.0

#hostName 返回值說明

解釋
WeChat 微信
wxwork 微信企業版
百度宿主平臺枚舉值列表(opens new window) 百度
alipay 支付寶
amap 高德
DINGTALK 釘釘
UC UC瀏覽器
QUARK 誇克瀏覽器
AK 阿裡健康
YK 優酷
字節宿主平臺枚舉值列表(opens new window) 字節跳動系列
qq QQ
KUAISHOU 快手

#safeArea 返回值說明

參數 類型 說明
left Number 安全區域左上角橫坐標
right Number 安全區域右下角橫坐標
top Number 安全區域左上角縱坐標
bottom Number 安全區域右下角縱坐標
width Number 安全區域的寬度,單位邏輯像素
height Number 安全區域的高度,單位邏輯像素

safeAreaInsets 的結構

參數 類型 說明
left Number 安全區域左側插入位置
right Number 安全區域右側插入位置
top Number 安全區頂部插入位置
bottom Number 安全區域底部插入位置

#language 返回值說明

language的國際規范是BCP47規范,分為三段,主語言-次語言-地區。例如zh-Hans-CN,表示 中文-簡體-中國大陸

但除瞭主語言外,後兩者均可省略。在不同平臺,它們的省略規則也不相同。

  • app-ios,不省略,返回zh-Hans-CN
  • app-android、web、微信小程序,省略次語言,返回zh-CN
  • uni-app框架和應用的多語言,以及支付寶小程序,則用zh-Hans來表示簡體中文

所以獲取語言後,不能直接字符串比較,需要拆段比較,npm上也有專門做BCP47語言規范比較的庫。

#deviceId 返回值說明

Web、小程序、iOS,屬於對用戶隱私保護比較嚴格的平臺,在這些平臺很難獲取有效的設備唯一標記。

Android也已經改進用戶隱私保護。在極老的手機上可以無限制獲取imei,在次老的手機上,獲取imei等隱私信息時需要彈框讓用戶授權。新的Android手機(Android10以上)已經徹底無法獲取imei瞭。

所以標記設備,大多隻能依靠本地存儲一個隨機數來標記。

deviceId,在app-android平臺,會根據優先使用imei、mac(僅在用戶已授權的情況下,如果發現需要授權或未授權,則跳過此步驟),如果沒有獲取到就使用隨機生成的標識。其他平臺是直接使用隨機生成的標識。

當使用本地存貯的隨機數時,發生以下情況將導致deviceId失效:

  • 卸載App
  • Android上重置App數據
  • 瀏覽器清空緩存或開啟隱私模式,

app下需要廣告追蹤的場景,在iOS上可以使用idfa (opens new window)、部分國產Android手機可以使用OAID(opens new window)

#deviceModel 返回值說明

uni-app 3.5.1+ 版本規范瞭 deviceModel 返回值,例如之前返回 iPhone11ProMax 新版本返回值為 iPhone 11 Pro Max,各設備型號參考規范 (opens new window)中 Generation 對應的值

註意:新機型剛推出一段時間會顯示 Unknown,官方會盡快進行適配。

#其他註意

  • deviceType
    • app-ios 隻支持 phonepad

    • app-android 支持 phonepadtvcarwatchvrapplianceundefinedunknown,關於各個類型的更詳細解釋參考Android官方文檔 (opens new window)。

    • 其中,app-android 平臺下 pad 類型的判斷,在國產pad等非google官方設備上並不一定準確。如果有需要開發者可自行根據型號或屏幕大小判斷。uni-app框架源碼中判斷pad的java代碼如下,供參考:

    • public static boolean isTablet(Context context) {
      	return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE;
      }

       

  • osThemeapp-ios 隻有將應用主題設置為跟隨系統時才能獲取到系統的主題。小程序也有類似限制。
  • 屏幕高度 = 原生NavigationBar高度(含狀態欄高度)+ 可使用窗口高度 + 原生TabBar高度
  • windowHeight不包含NavigationBar和TabBar的高度
  • Web端,windowTop等於NavigationBar高度,windowBottom等於TabBar高度
  • App端,windowTop等於透明狀態NavigationBar高度,windowBottom等於透明狀態TabBar高度
  • 高度相關信息,要放在 onReady 裡獲取。太早取不到。

本API在其他小程序的文檔鏈接:

  • 微信小程序(opens new window)
  • 支付寶小程序(opens new window)
  • 百度小程序(opens new window)
  • 字節小程序(opens new window)
  • 飛書小程序(opens new window)
  • QQ小程序(opens new window)
  • 快手小程序(opens new window)
  • 京東小程序(opens new window)
  • 華為快應用(opens new window)

#示例

調用代碼示例

uni.getSystemInfo({
	success: function (res) {
		console.log(res.appName)
	}
});

在不同平臺 getSystemInfo 的返回值(表格較長,可縮放頁面後拖動橫向滾動條)

標明 - 的都為 undefined,其他值都與所列出項相同

字段名稱 App-Android App-iOS h5 Android uniMPsdk iOS uniMPsdk mp-weixin mp-alipay mp-baidu mp-toutiao
appId __UNI__8BB4001 __UNI__8BB4001 __UNI__8BB4001 __UNI__8BB4001 __UNI__8BB4001 __UNI__8BB4001 __UNI__8BB4001 __UNI__8BB4001 __UNI__8BB4001
appName test test test test test test test test test
appVersion 1.0.0 1.0.0 1.0.0 1.0.0 1.0.0 1.0.0 1.0.0 1.0.0 1.0.0
appVersionCode 100 100 100 100 100 100 100 100 100
appLanguage zh-Hans zh-Hans zh-Hans zh-Hans zh-Hans zh-Hans zh-Hans zh-Hans zh-Hans
browserName chrome wkwebview safari chrome wkwebview
browserVersion 96.0.4664.104 13.4.13 13.0.3 88.0.4324.93 15.4
deviceId d3db0944da20f333 F791564F-853B-47B6-8CB8-27FF59315059 16518284854447835016 c7eafa7ed8774c0d F791564F-853B-47B6-8CB8-27FF59315059 1652178285720384773 16536215804846585135 1653359639811213582 16538995501084056633
deviceBrand xiaomi apple huawei apple iphone iphone iphone apple
deviceModel Mi10Pro iPhone13ProMax iPhone MXW-AN00 iPhoneSimulator iPhone6/7/8Plus iPhone14,3 iPhone6/7/8 iPhone6
deviceType phone phone phone phone phone phone phone phone phone
deviceOrientation portrait portrait portrait portrait portrait portrait portrait
devicePixelRatio 2.5687501430511475 3 2 3 3 3 3 2 2
hostName safari MPLauncherV3 uniMPDemo WeChat、wxwork alipay、amap、DINGTALK、UC、QUARK、AK、YK baiduboxapp 等百度宿主平臺枚舉值列表(opens new window) Douyin、Toutiao、news_article_lite、live_stream、XiGua、PPX
hostVersion 13.0.3 1.0 1.0.0 8.0.5 10.2.23 2.45.0 6.6.3
hostLanguage zh-CN zh-CN zh-Hans-CN zh-CN zh-CN zh-CN  
hostTheme light light
hostPackageName com.example.mplauncherv3 io.dcloud.hellounimp
hostSDKVersion 3.4.13 3.4.13 2.24.2 2.7.6 3.450.16 2.49.0
osName android ios ios android ios ios ios ios ios
osVersion 12 15.5 13.2.3 10 15.4 10.0.1 15.5 15.5 10.0.1
osLanguage zh-CN zh-Hans-CN zh-CN zh-Hans-CN
osTheme light light light light
osAndroidAPILevel 31 29
romName MIUI HarmonyOS
romVersion V130 2.0.0
uniPlatform app app web app app mp-weixin mp-alipay mp-baidu mp-toutiao
uniCompileVersion 3.4.13 3.4.13 3.4.13 3.4.13 3.4.13 3.4.13 3.4.13 3.4.13 3.4.13
uniRuntimeVersion 3.4.13 3.4.13 3.4.13 3.4.13 3.4.13 3.4.13 3.4.13 3.4.13 3.4.13

二、uni.getSystemInfoSync()

獲取系統信息的同步接口。調用參數和返回值同上getSystemInfo

三、總結

uni.getSystemInfo()  

(1) deviceType 獲取設備類型,phone、pad、pc

(2) deviceOrientation 獲取設備方向,豎屏 portrait橫屏 landscape

(3) osName 獲取系統名稱,ios、android、windows、macos (APP隻有ios、android)

推薦閱讀: