使用NodeJs服务账号生成二维码注册安卓企业设备卡在系统更新问题
Android Management API扫码注册设备卡在系统更新问题排查
复现背景
按照谷歌官方文档指引完成了以下测试流程:
快速入门地址:https://colab.research.google.com/github/google/android-management-api-samples/blob/master/notebooks/quickstart.ipynb#scrollTo=pjHfDSb8BoBP
- 创建企业(Enterprise)
- 创建政策(Policy)
- 注册设备
后续基于Android Enterprises的Node.js API开发了服务端解决方案,所有文档要求的功能均正常运行,覆盖政策、设备、企业的查询、创建、删除操作。
问题描述
通过Node应用生成的QR码扫码注册设备时,设备卡在系统更新环节无法继续。
相关代码
政策更新接口代码
router.post('/update/:id', async function(req, res) { const {title,policy_body,update_mask,enroll_url} = req.body; // 此处调用android managment API,将返回结果更新到数据库 const amApiBody = { name: policy_body.name, updateMask:update_mask, requestBody:policy_body } const policy_update_response = await amApi.updatePolicy(amApiBody); const p = await policyModel.update(req.params.id,title,policy_update_response,enroll_url); res.json(p) });
AmAPI封装代码
this.updatePolicy = async function (body) { const auth = new google.auth.GoogleAuth({ scopes: ['https://www.googleapis.com/auth/androidmanagement'], }); const authClient = await auth.getClient(); google.options({auth: authClient}); // 获取可用政策列表 const res = await androidmanagement.enterprises.policies.patch(body); console.log('requestFinalBody=',body); return res.data; }
生效的政策配置
policy_create_response= { name: 'enterprises/LC019rjnor/policies/policy1', version: '14', applications: [ { packageName: 'com.google.samples.apps.iosched', installType: 'FORCE_INSTALLED', autoUpdateMode: 'AUTO_UPDATE_HIGH_PRIORITY' }, { packageName: 'com.dekaisheng.courier', installType: 'FORCE_INSTALLED', autoUpdateMode: 'AUTO_UPDATE_HIGH_PRIORITY' } ], keyguardDisabledFeatures: [ 'KEYGUARD_DISABLED_FEATURE_UNSPECIFIED' ], defaultPermissionPolicy: 'GRANT', uninstallAppsDisabled: true, keyguardDisabled: true, tetheringConfigDisabled: true, dataRoamingDisabled: true, networkEscapeHatchEnabled: true, bluetoothDisabled: true, debuggingFeaturesAllowed: true, funDisabled: true, kioskCustomLauncherEnabled: true }
环境变量配置
运行应用前已导出服务账号凭据环境变量:
export GOOGLE_APPLICATION_CREDENTIALS="/Users/Mac/Projects/wajid/mdm/server/env/auth.json"
解决思路
- 调整政策中
funDisabled参数取值,将其改为false后重新生成二维码测试。该参数会禁用设备向导相关流程,容易触发零接触注册阶段系统更新卡死。 - 临时关闭
networkEscapeHatchEnabled参数,排除该参数开启后因网络受限阻断系统更新请求的问题。 - 测试阶段先移除强制安装应用的
AUTO_UPDATE_HIGH_PRIORITY配置,避免注册阶段高优先级应用更新抢占系统更新资源导致流程卡住。 - 确认API调用时传入的
updateMask字段列表和实际修改的政策字段完全匹配,避免字段缺失或多余导致政策配置未正确生效。 - 使用官方快速入门生成的同配置政策二维码注册同一设备,排除设备本身谷歌服务版本、区域、网络的基础问题。
- 确认生成的注册二维码携带的企业ID、政策名称和实际创建的资源完全一致,排除资源版本不匹配的问题。
内容的提问来源于stack exchange,提问作者Vaimeo
相关产品推荐
相关产品推荐

