生成Enrollment Token返回错误QR码的问题排查
问题分析与解决方案
核心问题
你错误地将qrCode的值以JSON字符串的形式传入,而Android Management API要求该字段接收的是一个原生Python字典(对应JSON对象)。当你传入字符串时,API无法正确解析自定义配置,因此自动 fallback 到默认的Google DPC应用。
修正后的代码
import json import androidmanagement # 假设 enterprise_name 和 policy_name 已正确定义 enrollment_token = androidmanagement.enterprises().enrollmentTokens().create( parent=enterprise_name, body={ "policyName": policy_name, "qrCode": { "android.app.extra.PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME": "com.tmp.app.admin/.AdminReceiver", "android.app.extra.PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM": "MUQ6NEQ6MDQ6NTY6M0E6ODA6Mzg6NEY6NUM6ODI6Qzk6NUY6MkM6QjA6RTk6RDc6QTM6RjI6NDg6NTA6QTQ6RjY6QTA6RjM6MTA6NUM6MzI6NkY6QkU6NUI6M0E6Qzk=", "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION": "https://myurl-stuff.com/link_part/my_app.apk", "android.app.extra.PROVISIONING_SKIP_ENCRYPTION": False, "android.app.extra.PROVISIONING_WIFI_SSID": "MY_WIFI_SSID", "android.app.extra.PROVISIONING_WIFI_PASSWORD": "my_wifi_password", "android.app.extra.PROVISIONING_WIFI_SECURITY_TYPE": "WPA" } } ).execute() print(json.dumps(enrollment_token, indent=2))
关键注意事项
- 避免嵌套字符串:
qrCode对应的value直接传入Python字典即可,不需要用引号包裹成字符串,API客户端库会自动处理成正确的JSON格式返回。 - 布尔值语法:Python中布尔值首字母大写(
False),客户端库会自动转换为JSON标准的false。 - 签名校验和校验:确保你的签名校验和是正确的,可通过
keytool -printcert -jarfile your_app.apk提取证书指纹后转换为Base64格式。
验证结果
修正后调用API,返回的qrCode字段会包含你自定义的设备管理员组件、APK下载地址等配置,而非默认的Google DPC应用信息。
内容的提问来源于stack exchange,提问作者Adam Varhegyi
相关产品推荐
相关产品推荐

