我必须为我的企业设备实现一次性应用程序,其中只有一个主要的 android 应用程序本身可以使用 2-3 个其他应用程序,如通话、短信和谷歌地图,除此之外,用户不得使用或访问其他应用程序和设置,
1)我已经考虑过通过企业管理 Api 使用企业拥有的单一用途,它更复杂、更大,但更完整的解决方案。
2) 我已经使用 看起来更像是我的解决方案的 android 设备所有者应用程序实现并测试了示例 锁定任务,但存在问题
我如何为生产级设备提供设备所有者?对于我的测试,我能够使用 adb shell 命令进行配置。我知道设备必须是新的/重置和未配置的,这不是问题。
我在这里寻求一些建议,如果有人实施了它会有所帮助。
更新
使用Fred 建议的 android management Api QuickStartGuide似乎是正确的方法。我的政策是来自自定义启动器的多个应用程序, 现在我陷入了困境,我想发布我的启动器应用程序或其他应用程序以仅为我的企业播放商店。
我遵循将您自己的应用程序上传到 Google Play 商店,这导致我发布了私人应用程序,但我无法这样做,因为我没有获得限制分发选项。
我不知道如何完美地实现这一目标。对于我目前的政策和企业,我有 2 个有效的电子邮件 ID,
所有的 google api 调用都是在 email_1 下完成的
.
email_1 和 email_2 都拥有我公司开发者帐户的管理员权限
.
现在我需要弄清楚只为我的企业发布应用程序,我认为存在正确许可或其他方面的问题,需要帮助。谢谢
google-play device-owner android-for-work cosu android-management-api
所以我试图让一个一次性使用的专用应用程序 + 设备在自助服务终端模式 + 自动启动下工作。应用程序本身是用 Nativescript(使用 Angular)构建的,所以不是原生 Java,但是这仍然是通过管理接收器等正常处理的。
当我们adb用来设置设备所有者时,kiosk 模式按预期工作。
adb shell dpm set-device-owner com.domain.app/.DeviceAdminReceiver
Run Code Online (Sandbox Code Playgroud)
当我们使用 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
}
Run Code Online (Sandbox Code Playgroud)
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" …Run Code Online (Sandbox Code Playgroud) 在我的自定义DPC应用程序(配置为设备所有者)中,我想将第三方应用程序设置为信息亭模式。
我使用DevicePolicyManager.addPersistentPreferredActivity()进行了一些测试,但它似乎仅在目标应用程序是启动器的情况下才有效,即,如果提供的组件是支持HOME和DEFAULT意图类别的活动。但我需要它才能与任何应用一起使用。
如“不支持锁定任务模式的应用程序”中所述,Google DPC Android设备政策可以通过在政策部分中仅提供程序包名称(而不是完整的活动组件名称)来实现。因此,我认为可以在DPC中执行此操作,但是怎么办呢?persistentPreferredActivities
我们有一些 Android 设备作为完全托管的工作设备连接到 Android Management API。
现在,当我们推出了一些更改设备策略,例如Factory Reset Disabled,Adjust Volume Button Disabled或任何其他这样的控制,设备不同步立即。
事实上,我们必须手动打开 Android Device Policy 并点击Sync它才能真正获得更改。
这真的很麻烦,因为有时策略不会同步几个小时并且设备没有获得更新。
此外,我们policy为每个控件更改加载整个设备,因为如果其他控件没有返回到null,是否可以Patch或UpdateMask可以用来避免这种情况?
有人可以建议我可以做些什么来确保设备立即获得策略更改吗?
policy android google-api device-policy-manager android-management-api
我正在尝试为我们的组织访问新的 Android Management API,但在访问 API 时遇到问题。通过 API 浏览器访问 API 时,一切运行正常。为了在我们的服务器上运行它,我在 Google 云控制台中创建了一个新项目,并在那里创建了一个服务帐户。我下载了密钥并使用它在我的机器上进行本地测试。然而,在第一次 signupUrl 调用时,我收到 403 错误,指出:“调用者无权管理项目。”。我正在使用的服务帐户具有“项目所有者”角色,我不知道如何赋予它更多权限......
我正在使用的代码:
def initial_enterprise_user(request):
enterprise_token = request.GET.get('enterpriseToken')
usr = request.user
scopes = ['https://www.googleapis.com/auth/androidmanagement']
credentials = ServiceAccountCredentials.from_json_keyfile_name(settings.SERVICE_ACCOUNT, scopes=scopes)
if enterprise_token is None:
androidmanagement = build('androidmanagement', 'v1', credentials=credentials)
resp = androidmanagement.signupUrls().create(projectId=settings.ANDROID_MGMT_PROJECTID).execute()
if resp.status_code == 200:
usr.signup_url_name = resp.json()['name']
usr.save()
return render(request, 'initial_login.html', {'response_url': resp.json()['url']})
else:
return HttpResponse('Failed to get signup url')
else:
# handle token present
Run Code Online (Sandbox Code Playgroud) 按照Android 管理 API 参考,我们已将 Android 配套应用程序配置为能够:启用系统应用程序、隐藏和取消隐藏程序包。
我们在策略配置中添加了以下信息:
{
'
'
'
"applications": [
{
"packageName": "com.domain.app",
"installType": "REQUIRED_FOR_SETUP",
"defaultPermissionPolicy": "GRANT",
"delegatedScopes": [
"ENABLE_SYSTEM_APP",
"PACKAGE_ACCESS"
]
}
],
'
'
'
}
Run Code Online (Sandbox Code Playgroud)
然后,在我们的 Android Companion 应用程序中,我们根据此处和此处的Google 文档添加了以下代码行:
DevicePolicyManager dpm = (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName admin = new ComponentName(mContext, DeviceAdminReceiver.class);
// Iterate through system application package names list
for (String packageName : systemAppsList) {
if (packageName != null && !packageName.equals("")) {
try {
// Re-enable a system …Run Code Online (Sandbox Code Playgroud) 我想在完全托管的设备中启用内部应用程序共享,以便我可以向企业中的特定用户发送包含更新的链接。
我尝试在 Play 商店设置中点击 Play 商店版本 7 次,但每次我都会收到一条消息“Google Play 商店已更新”。
如何在托管设备上激活内部应用程序共享,以便可以共享应用程序 URL 来测试应用程序更新?
我有一个在完全托管的设备上运行的 KIOSK 应用程序。我在 PlayStore 上推送了几个更新,我可以在 PlayStore App 上看到更新的版本,但它们没有自动更新。
我也将auto-update政策设置为Always但仍然没有运气。帮助表示赞赏
android ×5
cosu ×3
google-play ×2
device-admin ×1
device-owner ×1
google-api ×1
kiosk ×1
kiosk-mode ×1
mdm ×1
policy ×1
python ×1