Dib*_*nia 17 android google-play android-for-work
我们正在处理什么
我们有这个应用程序,我们以离线方式分发给我们的客户(即没有上传到Play商店).分发给每个客户的应用程序风格几乎完全相同,只是在这里和那里进行一些调整.我们所有的客户都将这个应用程序分享给员工使用.基本上这是一个企业应用程序.
有什么问题
最近,我们的一位客户开始使用MDM(移动设备管理)工具来阻止未从Google Play下载的应用.很明显,我们收到了客户的请求,看看我们是否可以在Google Play上上传此应用.
这里重要的是我们有超过100个客户端,并且提供给每个客户端的应用程序的包名实际上是相同的.所以它是相同的应用程序,在这里和那里进行一些调整.如果我们沿着将应用程序发布到游戏商店的道路,我们可能最终陷入混乱(我们不希望将100个不同的应用程序上传到游戏商店 - 即每个客户端一个).我们正在进行一些优化,以便多个客户可以使用相同的应用程序(但我们不能让所有100多个客户使用相同的应用程序.).
我在看什么?
我开始关注Android For Work(AFW),谷歌私人应用,托管Google游戏以及仍在消化这些东西.但对我而言,它似乎只是企业部署/发布应用程序的安全方式,只能在特定设备上和特定配置文件下下载(这样可以将用户的个人应用程序和数据分开,以防他们将相同的手机用于个人和工作目的).
我在寻找什么样的解决方案?
私下部署一个应用程序(托管它与谷歌或私人托管,但在两种情况下都与谷歌播放列出),让我的客户与他们的员工共享此应用程序.
每个客户的每个私人应用程序应该在自己的小岛上.我想用相同的软件包名称向我的所有客户分发应用程序(从我到目前为止所读到的内容来看,谷歌播放可能无法实现这一点.但我希望如果我遗漏某些内容,有人可以指出事实).
这是我的解决方案:
创建运行时动态应用程序,从后端获取数据和配置,并使用自己的客户端ID呈现其视图和数据.
您可以创建单个应用并上传到Google Play,但您应该通过clientId管理您的客户,这会使每个应用分离.此clientId是唯一的,并根据您的客户生成.这个解决方案有两个方面.Android端和Serever端.
1 - Android方面:我们的应用程序在Constants中应该有这样的baseUrl:
baseUrl = "http://yourCorporation.com/{clienId}/api/"
Run Code Online (Sandbox Code Playgroud)
然后所有客户端的所有服务都使用相同的URL.clientId是关键点.您的客户端应用程序的区别是clientId.要生成api-call网址,您应该执行以下操作:
Constant.ClientId = scannedQRCode;
url = baseUrl.replace("{client_id}",Contant.ClientId) + apiUrl ;
Run Code Online (Sandbox Code Playgroud)
您必须为应在首次运行的应用程序中扫描的客户创建QR码.将注册后的QR码发送给他/她(客户的客户)电子邮件是很好的.这个QR码有clientId.因此,每个客户都有自己的服务,并且真正作为独立的岛工作,即使你想要更改服务器地址,你可以将所有baseUrl放在QR码中,但这不建议,因为你必须为每个客户创建服务器,这很头疼.
您甚至可以通过调用config api来处理应用程序的配置和UI元素,该API将返回一个customConfigDto作为json,如下所示:
public class CustomConfigDto {
String colorPrimary ;
String colroPrimaryDark ;
String colorAccent ;
int tabCounts;
//and more...
public String getColorPrimary() {
return colorPrimary;
}
public void setColorPrimary(String colorPrimary) {
this.colorPrimary = colorPrimary;
}
public String getColroPrimaryDark() {
return colroPrimaryDark;
}
public void setColroPrimaryDark(String colroPrimaryDark) {
this.colroPrimaryDark = colroPrimaryDark;
}
public String getColorAccent() {
return colorAccent;
}
public void setColorAccent(String colorAccent) {
this.colorAccent = colorAccent;
}
public int getTabCounts() {
return tabCounts;
}
public void setTabCounts(int tabCounts) {
this.tabCounts = tabCounts;
}
}
Run Code Online (Sandbox Code Playgroud)
并通过此配置呈现您的视图.所有这些都可以通过clientId按应用程序分离.我喜欢QR码,因为它非常方便和优雅,适合您的情况,但您可以通过许多其他方式进入此clientId.这是最好的免费和简单的QR码生成服务之一,这是Android最好的QR码扫描仪库之一.
2 - 服务器端:你必须在服务器端处理step1,这很容易.您可以拥有所有其他实体拥有它的实体调用客户端.因为您应该将所有数据保存在一个地方,但由客户分开.您还可以在Spring中映射这样的API:
@RequestMapping(value = "http://yourCorporation.com/{clienId}/api/customers", method = RequestMethod.GET)
Customers getCustomers(@PathVariable("clienId") Long clientId) {
return customerService.findCustomerByClientId(clientId);
}
Run Code Online (Sandbox Code Playgroud)
根据您所说的,这听起来更像是您可以通过配置管理解决此问题,而不是发送每个客户端完全独立的 APK。
Google 有一个私人频道,但根据文档,它似乎更倾向于拥有一个成员列表(即,一旦您被授予访问权限,您就可以访问整个私人频道),而不是高度定制的访问权限(即某些人可以访问)到频道中的某些项目)。
我建议的另一种选择:让所有客户端下载相同的 APK。为他们每个人提供一个客户端特定的“激活码”,用于您的应用程序。当应用程序第一次启动时,它调用一个网络服务并将其激活码传递给它;在服务器端,您使用激活码来识别客户端,然后将正确配置的数据返回给客户端。然后,您可以将相同的 APK 分发给您私人频道上的每个人,并在安装后进行远程配置。
此方案的一个主要优点是您可以为一个组织设置多种配置。只需让客户端选择几个激活码,每个激活码都会给他们一个特定的配置。例如,如果您有一个由码头工人和看门人都使用的应用程序(我只是在这里抛出一个例子),您可以给码头工人一个激活码,给看门人第二个激活码,然后您可以轻松地提供他们不同的配置。
归档时间: |
|
查看次数: |
2233 次 |
最近记录: |