@qcwx_mediatom/quick-app-ad-sdk
Version:
mediatom快应用广告SDK
130 lines (120 loc) • 3.8 kB
JavaScript
// utils/device.js
import device from '@system.device';
import network from '@system.network';
import pkg from '@system.package';
export async function getDeviceInfo() {
const info = {
os: 'Quick', // Android / iOS
osv: '', // 系统版本
devicetype: 0, // 0 = 手机,默认
connectiontype: 0,
carrier: 0,
brand: '',
model: '',
sw: 0,
sh: 0,
density: 0,
orientation: 1,
ua: '',
verCodeOfHms: '',
verCodeOfAG: ''
};
// 封装 device.getInfo 为 Promise
const getDevice = () => new Promise(resolve => {
device.getInfo({
success(res) {
info.osv = res.osVersionCode || '';
switch (res.deviceType) {
case 'phone': info.devicetype = 0; break;
case 'tablet': info.devicetype = 1; break;
case 'tv': info.devicetype = 3; break;
default: info.devicetype = 0; break;
}
info.brand = res.brand || '';
info.model = res.model || '';
info.sw = res.screenWidth || 0;
info.sh = res.screenHeight || 0;
info.density = res.screenDensity || 0;
info.ua = buildUserAgent(info);
resolve();
},
fail(e) {
console.warn('[device.getInfo] 获取失败', e);
resolve();
}
});
});
const getNetwork = () => new Promise(resolve => {
network.getSimOperators({
success(data) {
const operator = data.operators?.[0]?.operator;
switch (operator) {
case '46000': case '46002': case '46004': case '46007': info.carrier = 1; break;
case '46001': case '46006': case '46009': info.carrier = 2; break;
case '46003': case '46005': case '46011': info.carrier = 3; break;
default: info.carrier = 0; break;
}
resolve();
},
fail() { resolve(); }
});
});
const getNetworkType = () => new Promise(resolve => {
network.getType({
success(res) {
switch (res.type) {
case 'wifi': info.connectiontype = 1; break;
case '2g': info.connectiontype = 2; break;
case '3g': info.connectiontype = 3; break;
case '4g': info.connectiontype = 4; break;
case '5g': info.connectiontype = 5; break;
case 'others': info.connectiontype = 11; break;
default: info.connectiontype = 0; break;
}
resolve();
},
fail() { resolve(); }
});
});
await Promise.all([getDevice(), getNetwork(), getNetworkType()]);
if (info.brand.toLowerCase() === 'huawei') {
const huawei = await getHuaweiVersions();
info.verCodeOfHms = huawei.verCodeOfHms || '';
info.verCodeOfAG = huawei.verCodeOfAG || '';
}
return info;
}
function buildUserAgent(deviceInfo = {}) {
const { os = 'UnknownOS', osv = '', brand = '', model = '', sw = 0, sh = 0, density = 0 } = deviceInfo;
const resolution = sw && sh ? `${sw}x${sh}` : 'unknown';
return `QuickApp/${os} ${osv} (${brand} ${model}; ${resolution}; DPR:${density})`;
}
async function getHuaweiVersions() {
const versions = {
verCodeOfHms: '',
verCodeOfAG: ''
};
await Promise.all([
new Promise(resolve => {
pkg.getInfo({
package: 'com.huawei.hms',
success(res) {
versions.verCodeOfHms = res.versionName || '';
resolve();
},
fail: () => resolve()
});
}),
new Promise(resolve => {
pkg.getInfo({
package: 'com.huawei.appmarket',
success(res) {
versions.verCodeOfAG = res.versionName || '';
resolve();
},
fail: () => resolve()
});
})
]);
return versions;
}