使用 Android 管理 API 策略时,Android Kiosk 模式不起作用

Posted

技术标签:

【中文标题】使用 Android 管理 API 策略时,Android Kiosk 模式不起作用【英文标题】:Android Kiosk mode not working when using Android Management API Policy 【发布时间】:2019-08-06 10:33:35 【问题描述】:

因此,我正在尝试获得一个单次使用的专用应用程序 + 设备以在信息亭模式 + 自动启动下工作。该应用程序本身是在 Nativescript(使用 Angular)中构建的,因此不是原生 Java,但是这仍然是通过管理员接收器等正常处理的。

当我们使用adb 设置设备所有者时,kiosk 模式按预期工作。

adb shell dpm set-device-owner com.domain.app/.DeviceAdminReceiver

当我们使用 android 管理策略注册设备并自动安装时,信息亭模式永远不会正确启动。


  "name": "enterprises/LC00mpaqaj/policies/policy1",
  "version": "12",
  "applications": [
    
      "packageName": "com.domain.app",
      "installType": "FORCE_INSTALLED",
      "lockTaskAllowed": true,
      "defaultPermissionPolicy": "GRANT"
    
  ],
  "persistentPreferredActivities": [
    
      "receiverActivity": "com.domain.app/.DeviceAdminReceiver",
      "actions": [
        "android.intent.action.MAIN"
      ],
      "categories": [
        "android.intent.category.HOME",
        "android.intent.category.DEFAULT"
      ]
    
  ],
  "dataRoamingDisabled": true,
  "kioskCustomLauncherEnabled": true

AndroidManifest.xml - 与管理员接收器相关的部分

<receiver
    android:name=".DeviceAdminReceiver"
    android:lockTaskMode="if_whitelisted"
    android:description="@string/admin_description"
    android:label="@string/app_name"
    android:permission="android.permission.BIND_DEVICE_ADMIN">
    <meta-data
        android:name="android.app.device_admin"
        android:resource="@xml/admin_permissions" />
    <intent-filter>
        <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <category android:name="android.intent.category.HOME" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</receiver>

当我通过 AMAPI 在单个设备上执行 GET 时,它会显示..


  "name": "enterprises/LC00mpaqaj/devices/3e26eac6be79d049",
  "managementMode": "DEVICE_OWNER",
  "state": "ACTIVE",
  "appliedState": "ACTIVE",
  "policyCompliant": true,
  "nonComplianceDetails": [
    
      "settingName": "persistentPreferredActivities",
      "nonComplianceReason": "INVALID_VALUE",
      "packageName": "com.domain.app"
    
  ],...

所以它似乎不喜欢persistentPreferredActivities,但是我一直在尝试我在medium kiosk article 和实际google kiosk policy examples 上找到的示例。

基于这些示例,我尝试使用各种 receiverActivity 替代格式,但仍然没有乐趣:

"receiverActivity": "com.domain.app/.DeviceAdminReceiver",
"receiverActivity": "com.domain.app",
"receiverActivity": "com.domain.app/.com.domain.app.DeviceAdminReceiver",

所以我的问题是:为什么我不能让 android kiosk 模式适用于我的政策,但它适用于 ADB?

半相关,I can't use google play test tracks 正在测试我可能的解决方案,所以我不得不将更改推送到 prod track,这使得我的开发周期相当长/艰巨。

【问题讨论】:

【参考方案1】:

我不是 Android Management API 专家,但您是否尝试过不使用 kioskCustomLauncherEnabled 参数?在我使用它运行的测试中,它会启动 Google 自己的 Kiosk 应用程序,可能会阻止您的活动启动。

我的两分钱:)

【讨论】:

【参考方案2】:

我想补充一点,如果您设置了"installType": "KIOSK",您将不再需要persistentPreferredActivitieslockType

这似乎是今年推出的一项新功能,我刚刚发现了它(更新日志中没有任何内容)。它应该会稍微简化您的配置。

【讨论】:

以上是关于使用 Android 管理 API 策略时,Android Kiosk 模式不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Android权限篇 设备策略管理器(DevicePolicyManager)

Azure API 管理 - 仅在设置标记时应用策略

禁用设备管理员

在 Kiosk 模式下禁用 Android 导航(Android 管理 API)

对 iOS 和 Android 应用使用啥 CORS 策略?

适用于 G Suite 的 Android 管理 API