Publicar una aplicación privada de Android para varios clientes

Con lo que estamos tratando

Tenemos esta aplicación que distribuimos a nuestros clientes de una manera sin conexión (es decir, no subido a Play Store). El sabor de la aplicación distribuido a cada cliente es casi idéntico a un poco de tweak aquí y allá. Todos nuestros clientes comparten esta aplicación con sus empleados para su uso. Básicamente se trata de una aplicación de empresa.

Cuál es el problema

Recientemente, uno de nuestros clientes comenzó a usar una herramienta MDM (Mobility Device Management) que bloquea las aplicaciones que no se descargan desde Google Play. Como obviamente obtuvimos una solicitud de nuestro cliente para ver si podemos subir esta aplicación en Google Play o no.

Lo importante aquí es que tenemos más de 100 clientes y el nombre del paquete de la aplicación proporcionada a cada cliente es en realidad la misma. Así que es la misma aplicación con un poco de tweak aquí y allá. Si vamos por el camino de la publicación de la aplicación a la tienda de juegos, que podría terminar en un caos (no queremos cargar 100 aplicaciones diferentes a la tienda de juegos – es decir, uno para cada cliente). Estamos haciendo una optimización desde nuestro final para que varios clientes puedan usar la misma aplicación (pero no podemos hacer que todos los clientes 100 + usen la misma aplicación).

Qué estoy mirando ?

Empecé a buscar en Android for Work (AFW), aplicaciones privadas de Google, Google administrado jugar y todavía digerir los productos. Pero a mí me parecía una forma segura para que las empresas implementen / publiquen aplicaciones que se pueden descargar sólo en dispositivos específicos y bajo cierto perfil (que mantiene las cosas separadas de las aplicaciones personales y datos del usuario en caso de que usen el mismo teléfono para uso personal y el propósito del trabajo).

¿Qué solución estoy buscando?

  1. Para implementar una aplicación de forma privada (alojarla en Google o en un host privado, pero aparecer en la lista con Google play en ambos casos) y dejar que mis clientes compartan esta aplicación con su empleado.

  2. Cada aplicación privada para cada cliente debe estar en su propia pequeña isla privada. Quiero distribuir la aplicación con el mismo nombre de paquete a todos mis clientes (De lo que he leído hasta ahora, esto podría no ser posible con Google play. Pero espero que alguien puede señalar hechos si me falta algo).

Esta es mi solución:

Creación de una aplicación dinámica en tiempo de ejecución que obtiene datos y configuraciones desde el backend y procesa sus vistas y datos con su propio Id de cliente .

Puedes crear una sola aplicación y subirla a Google Play, pero deberías administrar tus clientes por clientId, lo que hace que cada aplicación actúe separada. Este cliente es único y generado por sus clientes. Esta solución tiene dos lados. Lado de Android y lado de Serever.

1 – Android lado: Nuestra aplicación debe tener un baseUrl como este en Constantes:

baseUrl = "http://yourCorporation.com/{clienId}/api/" 

Y luego todos los servicios de Todos los clientes usan la misma url. clientId es el punto clave. La diferencia de su aplicación cliente es clientId. Para generar url de api-call debes hacer algo como esto:

 Constant.ClientId = scannedQRCode; url = baseUrl.replace("{client_id}",Contant.ClientId) + apiUrl ; 

Debe crear un QR-code por sus clientes que se deben escanear en la primera ejecución de la aplicación. Es bueno enviar el código QR después del registro a su correo electrónico (cliente de sus clientes). Este QR-código tiene clientId. Por lo tanto, todos los clientes tienen sus propios servicios y realmente funciona como islas separadas, incluso si desea cambiar la dirección del servidor, puede poner todos los baseUrl en QR-código, pero esto no se sugiere, porque tienes que crear servidor por clientes y esto es dolor de cabeza .

Usted puede incluso manejar los elementos de configuración y UI de su aplicación con la llamada de un api de configuración que devuelve un customConfigDto como json como este:

 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; } } 

Y hacer que sus vistas por esta configuración. Todo esto funciona separado por aplicación por su clientId . Prefiero QR-código porque es muy práctico y con clase y encaja en su caso, sin embargo, puede introducir este cliente con muchas otras maneras. Éste es uno de los mejores QR-código libre y simple que genera el servicio, y ésta es una de la mejor biblioteca del explorador del código QR para el androide.

2 – Server Side: Tienes que manejar el paso 1 en el lado del servidor y es muy fácil. Puede tener llamadas de entidad Cliente que todas las demás entidades tienen. Debido a que debe mantener todos sus datos en un lugar, pero separados por sus clientes. También puede asignar APIs como esta en Spring:

 @RequestMapping(value = "http://yourCorporation.com/{clienId}/api/customers", method = RequestMethod.GET) Customers getCustomers(@PathVariable("clienId") Long clientId) { return customerService.findCustomerByClientId(clientId); } 

Basado en lo que ha dicho, esto suena más como usted puede solucionar esto con la gerencia de la configuración que enviando cada cliente APKs completamente separados.

Google tiene un canal privado, pero basado en la documentación parece mucho más orientado a tener una sola lista de miembros (es decir, una vez que se le otorga acceso tiene acceso a todo el canal privado) en lugar de acceso altamente personalizado (es decir, ciertas personas tienen acceso a ciertos elementos en el canal).

Una alternativa que sugiero: haga que todos los clientes descarguen el mismo APK. Dé a cada uno de ellos un "código de activación" específico para su aplicación. Cuando la aplicación se inicia por primera vez, llama a un servicio web y le pasa su código de activación; en el lado del servidor, se utiliza el código de activación para identificar el cliente y, a continuación, devolver los datos de la configuración correcta al cliente. A continuación, puede distribuir el mismo APK a todos los usuarios de su canal privado y configurarlo de forma remota una vez instalado.

Una ventaja importante de este esquema es que puede tener varias configuraciones para una organización. Sólo déle al cliente una selección de varios códigos de activación, cada uno de los cuales les dará una cierta configuración. Por ejemplo, si usted tiene una aplicación que es utilizada tanto por los trabajadores portuarios como por los conserjes (y sólo estoy echando un ejemplo aquí), usted podría dar a los trabajadores portuarios un código de activación y los conserjes de un segundo código de activación y luego puede dar fácilmente diferentes configuraciones.

La solución buena y larga:

no utilice el mismo nombre de paquete para diferentes aplicaciones. Cree un proyecto multimodule, establezca un módulo para el core, cosas compartidas y agregue un módulo para cada cliente donde pueda ajustar lo que necesita y configurar el nombre del paquete dinámicamente basado en tipo de compilación. De esta forma, puede utilizar el mismo nombre de paquete para su servidor CI y todo lo demás y tener otro nombre de paquete al liberar la aplicación .

La solución corta que puede funcionar:

Publicar la aplicación como una versión beta de google play cerrada y enviar invitaciones únicamente a este cliente. De esa manera puede distribuir la aplicación a sus empleados a través de la tienda de juegos y los otros clientes no se dará cuenta No puedo asegurar que funcionará sin saber qué herramienta MDM que se enfrentan, pero ya que las aplicaciones de canal beta no requieren permisos de origen desconocido , deberías estar bien.

Si quieres el mismo nombre de paquete, tendrás que hacer algo como lo que EJoshuaS sugirió: administrar las diferentes configuraciones dentro de la versión de una aplicación. No podrás tener más de una aplicación con el mismo paquete implementado en Google Play.

Si está abierto a tener paquetes diferentes, puede cambiar el nombre del paquete en el manifiesto de Android para cada uno y liberarlo como una aplicación diferente. Tendría que cambiar el paquete dondequiera que importe el archivo R y necesitaría asegurarse de que todas las referencias de clase en su manifiesto incluyan toda la ruta de clase ( <activity android:name="[full.package].MainActivity"> que <activity android:name=".MainActivity"> ). Esto se vuelve bastante confuso y es terrible en términos de gestión de configuración, por lo que no es realmente una gran solución en general, pero podría funcionar para usted.

Empecé a buscar en Android for Work (AFW), aplicaciones privadas de Google, Google administrado jugar y todavía digerir los productos.

Esto probablemente sería un buen ajuste para AFW.

Pero para mí parecía una forma segura para que las empresas desplegaran / publicaran aplicaciones que sólo se pueden descargar en dispositivos específicos y bajo cierto perfil

Eso es lo que hace un MDM, sí, pero hay más. Con Android for Work también tienes configuraciones gestionadas que te permiten pasar una configuración para la aplicación. Esto se puede usar para cambiar urls de backend, etc.

Es seguro que apoya su segundo requisito, pero sé muy poco para estar seguro acerca de la primera. Aunque puede alojar y distribuir en forma privada una aplicación en Google Play for Work, no sé si la distribuiré de forma privada a varios clientes.

La ventaja obvia de usar esta API de Google es que no tienes que construir nada tú mismo. Además, la mayoría de los MDM admiten las API de Android for Work, por lo que un administrador de dominio puede comprar la aplicación a granel y distribuirla a los empleados. Echa un vistazo a la Comunidad AppConfig que muestra a los proveedores de MDM que incorpora esas API y las mejores prácticas.

Independientemente de lo que decida, definitivamente debe tener una buena mirada en Android for Work, ya que lo que está describiendo es exactamente lo que se pretende. La configuración inicial es un dolor y hay muy poca información sobre cómo funciona todo y juega juntos, pero pasar unos días tratando de averiguarlo podría ser mejor que la construcción de su propia solución gestionada que tendrá que mantener también .

  • Comprobación de la versión de mi aplicación mediante programación en el mercado de Android
  • No se puede analizar el error de respuesta al cargar capturas de pantalla en Google Play (Android Market)
  • En segundo plano, compruebe la Play Store para determinar si una aplicación está disponible para descargar en el dispositivo
  • Aplicación en el mercado de Android: las notificaciones HTTP no vienen
  • Cuando se emiten "com.android.vending.INSTALL_REFERRER" get enviar?
  • Transferencia de la aplicación de Android a otro desarrollador
  • ¿Por qué Google Play Store no muestra la razón de la indisponibilidad del dispositivo para la aplicación?
  • Insignia dinámica HTML de la aplicación de Google Play
  • Google play muestra todas las capturas de pantalla
  • Botón de actualización de Google Play Store deshabilitado después de realizar cambios
  • Cómo abrir la aplicación Google Play Store desde mi aplicación para instalar la versión más reciente de mi aplicación disponible en la tienda de reproducción
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.