You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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"  

解决思路

  1. 调整政策中funDisabled参数取值,将其改为false后重新生成二维码测试。该参数会禁用设备向导相关流程,容易触发零接触注册阶段系统更新卡死。
  2. 临时关闭networkEscapeHatchEnabled参数,排除该参数开启后因网络受限阻断系统更新请求的问题。
  3. 测试阶段先移除强制安装应用的AUTO_UPDATE_HIGH_PRIORITY配置,避免注册阶段高优先级应用更新抢占系统更新资源导致流程卡住。
  4. 确认API调用时传入的updateMask字段列表和实际修改的政策字段完全匹配,避免字段缺失或多余导致政策配置未正确生效。
  5. 使用官方快速入门生成的同配置政策二维码注册同一设备,排除设备本身谷歌服务版本、区域、网络的基础问题。
  6. 确认生成的注册二维码携带的企业ID、政策名称和实际创建的资源完全一致,排除资源版本不匹配的问题。

内容的提问来源于stack exchange,提问作者Vaimeo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:18:03