这是我的解决方案:
创建运行时动态应用程序,从后端获取数据和配置,并使用自己的客户端 ID 呈现其视图和数据。
您可以创建单个应用程序并上传到 google play,但您应该通过 clientId 管理您的客户端,使每个应用程序的行为分开。此 clientId 是唯一的,并且是根据您的客户生成的。这个解决方案有两个方面。Android端和服务器端。
1 - Android 端:我们的应用程序应该在常量中有一个这样的 baseUrl:
baseUrl = "http://yourCorporation.com/{clienId}/api/"
然后所有客户端的所有服务都使用相同的 url。clientId 是关键点。您的客户端应用程序的区别是 clientId。要生成 api-call 的 url,您应该执行以下操作:
Constant.ClientId = scannedQRCode;
url = baseUrl.replace("{client_id}",Contant.ClientId) + apiUrl ;
您必须为应在应用程序首次运行时扫描的客户创建 QR 码。注册后最好将二维码发送到他/她(您客户的客户)的电子邮件。这个二维码有clientId。因此,每个客户端都有自己的服务,并且实际上是独立的岛屿,即使您想更改服务器地址,也可以将所有 baseUrl 放入 QR 码中,但不建议这样做,因为您必须为每个客户端创建服务器,这很令人头疼。
您甚至可以通过调用配置 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;
}
}
并通过此配置呈现您的视图。所有这些工作都由他们的clientId每个应用程序分开。
我更喜欢 QR 码,因为它非常方便和优雅,适合您的情况,但是您可以通过许多其他方式输入此 clientId。这是最好的免费和简单的二维码生成服务之一,这是安卓最好的二维码扫描器库之一。
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);
}