Los problemas con las aplicaciones empresariales rara vez son tan simples como "una línea de código incorrecta";La versión incorrecta ha llegado a suficientes personas. La ayuda oficial de Google Play dice: El lanzamiento por etapas solo se aplica a las actualizaciones, no a los primeros lanzamientos; el porcentaje no aumentará automáticamente y debe ser ampliado manualmente por la persona a cargo de la liberación. La documentación para desarrolladores de Apple llama a la actualización un lanzamiento por fases: para los usuarios que activan las actualizaciones automáticas, el volumen se lanzará a un ritmo fijo de 7 días, 1%, 2%, 5%, 10%, 20%, 50% y finalmente 100%. Ambos bandos están haciendo lo mismo: bloquear el radio de la explosión en una ventana retráctil.
1. Dos conjuntos de tiendas, dos conjuntos de gramática en escala de grises.
La comparación de Bitrise sobre la gestión de lanzamientos es muy clara: Apple no permite cambiar manualmente el porcentaje, pero permite múltiples pausas en un máximo de 30 días; después de la reanudación, continúe desde el día de la suspensión en lugar de comenzar de nuevo. El juego es más flexible. Puede establecer los intervalos y las proporciones usted mismo, pero existe una restricción estricta——El porcentaje ampliado no se puede revertir, sólo puede "abortar". Después de la suspensión, los usuarios que hayan actualizado a la nueva versión continuarán en la nueva versión, pero ningún usuario nuevo ingresará al lote. Si una aplicación se elimina del estante o el programa para desarrolladores expira, la eliminación gradual de Apple se detendrá y será inmediatamente visible para todos después de que se vuelva a incluir en la lista. Si desea controlar el volumen, solo puede volver a enviar una versión.
| Dimensiones | Lanzamiento por etapas de Google Play | Lanzamiento de la App Store en fases |
|---|---|---|
| Aplicable | Paquete de actualización, no disponible para la primera versión | Actualizaciones de versión de aplicaciones ya enumeradas |
| Ritmo | Aumentar manualmente el porcentaje, no es obligatorio 7 días | document.getElementById('af-error-page').style.display = 'none';Error 500 (Error del servidor)!!1*{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{color:#222;text-align:unset;margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px;}* > body{background:url("//www.google.com/images/errors/robot.png") 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}pre{white-space:pre-wrap;}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url("//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png") no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url("//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png") no-repeat 0% 0%/100% 100%;-moz-border-image:url("//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png") 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url("//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png") no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}500. Se trata de un error.Se ha producido un error. Inténtalo de nuevo más tarde. Esa es toda la información que tenemos.(function() {window.ERROR_PAGE = false; function replaceCurrentPageWithErrorPage() {if (!window.ERROR_PAGE) {var errorPage = document.getElementById('af-error-page2'); document.open('text/html'); document.close(); document.documentElement.setAttribute('lang', 'es'); document.documentElement.setAttribute('dir', 'ltr'); document.body.appendChild(errorPage); window.ERROR_PAGE = true;}}if (document.addEventListener) {document.addEventListener('DOMContentLoaded', replaceCurrentPageWithErrorPage, false); window.addEventListener('load', replaceCurrentPageWithErrorPage, false);} else {document.attachEvent('onreadystatechange', function() {if (document.readyState === 'complete') {replaceCurrentPageWithErrorPage();}}); window.attachEvent('onload', replaceCurrentPageWithErrorPage);}}()); |
| pausa | Ya no se propagará después de Halt. Los usuarios actualizados conservarán el nuevo paquete. | Se puede suspender por un total de 30 días, sin límite de veces. |
| Relación de retroceso | No se permite reducción, sólo cancelar o enviar nuevo paquete | No puede cambiar manualmente la proporción. Si deseas el importe total, sólo podrás liberarlo por adelantado. |
| País/Región | Puede limitar el país primero y no puede eliminar el país después de comenzar. | Seguir el alcance de ventas existente |
2. La tasa de accidentes debe escribirse como un control de acceso "deténgase si no puede pasar"
La mediana de la industria dada por el "Perspectiva de estabilidad de aplicaciones móviles 2025" de Luciq esTasa de sesión sin fallos 99,95%, el equipo principal puede llegar al 99,99%. La mayoría de los equipos establecen el umbral de volumen entre el 99,5% y el 99,9%, siendo mayor el de finanzas y atención médica. En la práctica, no mire sólo el valor absoluto, sino también compárelo con la versión anterior: si la tasa de accidentes se duplica en cualquier momento, o el ANR continúa superando el 0,5%, debería detenerlo en lugar de "observarlo para otra noche". Play también recuerda: los usuarios pueden escribir reseñas públicamente en etapas, y la ola de reseñas negativas dañará a la marca antes de la curva de colapso.
2.1 El paquete empresarial también tiene una capa de MDM
El uso de la versión de la tienda en escala de grises para consumidores no puede resolver el problema de "actualizar solo para ingenieros de campo". Hay tres formas comunes de distribución interna dentro de una empresa: la versión pública de la tienda utiliza la versión oficial en escala de grises; la versión para empleados utiliza TestFlight/pista de prueba interna; y el paquete de refuerzo in situ utiliza la versión obligatoria de MDM. El control de acceso debe establecerse según el seguimiento: la versión pública analiza los fallos y las puntuaciones, la versión interna analiza si los procesos clave se están ejecutando sin problemas y el paquete MDM también analiza los certificados, la vinculación de dispositivos y si se permiten degradaciones. Mezcle las tres pistas en un "empuje para todo el personal" y los problemas se informarán a los clientes, ventas y talleres al mismo tiempo.
document.getElementById('af-error-page').style.display = 'none';Error 500 (Error del servidor)!!1*{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{color:#222;text-align:unset;margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px;}* > body{background:url("//www.google.com/images/errors/robot.png") 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}pre{white-space:pre-wrap;}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url("//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png") no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url("//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png") no-repeat 0% 0%/100% 100%;-moz-border-image:url("//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png") 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url("//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png") no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}500. Se trata de un error.Se ha producido un error. Inténtalo de nuevo más tarde. Esa es toda la información que tenemos.(function() {window.ERROR_PAGE = false; function replaceCurrentPageWithErrorPage() {if (!window.ERROR_PAGE) {var errorPage = document.getElementById('af-error-page2'); document.open('text/html'); document.close(); document.documentElement.setAttribute('lang', 'es'); document.documentElement.setAttribute('dir', 'ltr'); document.body.appendChild(errorPage); window.ERROR_PAGE = true;}}if (document.addEventListener) {document.addEventListener('DOMContentLoaded', replaceCurrentPageWithErrorPage, false); window.addEventListener('load', replaceCurrentPageWithErrorPage, false);} else {document.attachEvent('onreadystatechange', function() {if (document.readyState === 'complete') {replaceCurrentPageWithErrorPage();}}); window.attachEvent('onload', replaceCurrentPageWithErrorPage);}}());
Para fallas nativas, modelos de permisos, SDK de pago y cambios en WebView del sistema, solo puede crear archivos binarios nuevos para su revisión. La capa empresarial JS/Dart del marco cruzado puede utilizar canales como EAS Update y CodePush para OTA. El límite de seguridad debe escribirse en el sistema, no el número de puerto:
- Permitir OTA: redacción publicitaria, diseño, lógica empresarial no crítica y modificadores que se han integrado previamente en el paquete de la tienda.
- Sin OTA: Declaración de permiso, lista de privacidad, kernel de pago e inicio de sesión, detección de jailbreak, fijación de certificados.
- Debe ser reprocesado: Capacidad para manejar fallos nativos, cambios en el comportamiento de la API del sistema y denominación de políticas de tienda.
Los clientes empresariales a menudo sobreestiman la remediación térmica. Si un "script push temprano en la mañana" cambia los campos de autenticación o recopilación, equivale a pasar por alto la tienda de aplicaciones y la revisión legal. El contrato y el manual de operación y mantenimiento deben indicar que la OTA tiene listado, auditorías y cierre con un clic; Después del cierre, el dispositivo debe poder volver a la versión confirmada del paquete de la tienda.
document.getElementById('af-error-page').style.display = 'none';Error 500 (Error del servidor)!!1*{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{color:#222;text-align:unset;margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px;}* > body{background:url("//www.google.com/images/errors/robot.png") 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}pre{white-space:pre-wrap;}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url("//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png") no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url("//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png") no-repeat 0% 0%/100% 100%;-moz-border-image:url("//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png") 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url("//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png") no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}500. Se trata de un error.Se ha producido un error. Inténtalo de nuevo más tarde. Esa es toda la información que tenemos.(function() {window.ERROR_PAGE = false; function replaceCurrentPageWithErrorPage() {if (!window.ERROR_PAGE) {var errorPage = document.getElementById('af-error-page2'); document.open('text/html'); document.close(); document.documentElement.setAttribute('lang', 'es'); document.documentElement.setAttribute('dir', 'ltr'); document.body.appendChild(errorPage); window.ERROR_PAGE = true;}}if (document.addEventListener) {document.addEventListener('DOMContentLoaded', replaceCurrentPageWithErrorPage, false); window.addEventListener('load', replaceCurrentPageWithErrorPage, false);} else {document.attachEvent('onreadystatechange', function() {if (document.readyState === 'complete') {replaceCurrentPageWithErrorPage();}}); window.attachEvent('onload', replaceCurrentPageWithErrorPage);}}());
No confíe en el sentimiento del grupo de chat el día del lanzamiento. Se recomienda crear una tarjeta de una página: porcentaje actual, tasa de ausencia de fallas, ANR, tiempo de inicio, conversiones clave, cantidad de reseñas negativas, persona a cargo y en qué consola está el botón de cancelar. En el lado de Play, recuerda esperar hasta que el material de la tienda esté al 100% antes de cambiarlo para evitar que la mitad de los usuarios vean capturas de pantalla inapropiadas. Si Apple decide vender completamente por adelantado, debe darse cuenta de que está renunciando irreversiblemente al resto del ritmo. Para fallas fatales que no pueden repararse con el paquete nativo, Apple proporciona un canal de revisión acelerado. La revisión periódica de Play suele ser más rápida, pero ambos canales requierenReenviar binario, el porcentaje de paquetes antiguos que han sido cancelados no se puede volver a ajustar.
document.getElementById('af-error-page').style.display = 'none';Error 500 (Error del servidor)!!1*{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{color:#222;text-align:unset;margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px;}* > body{background:url("//www.google.com/images/errors/robot.png") 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}pre{white-space:pre-wrap;}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url("//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png") no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url("//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png") no-repeat 0% 0%/100% 100%;-moz-border-image:url("//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png") 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url("//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png") no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}500. Se trata de un error.Se ha producido un error. Inténtalo de nuevo más tarde. Esa es toda la información que tenemos.(function() {window.ERROR_PAGE = false; function replaceCurrentPageWithErrorPage() {if (!window.ERROR_PAGE) {var errorPage = document.getElementById('af-error-page2'); document.open('text/html'); document.close(); document.documentElement.setAttribute('lang', 'es'); document.documentElement.setAttribute('dir', 'ltr'); document.body.appendChild(errorPage); window.ERROR_PAGE = true;}}if (document.addEventListener) {document.addEventListener('DOMContentLoaded', replaceCurrentPageWithErrorPage, false); window.addEventListener('load', replaceCurrentPageWithErrorPage, false);} else {document.attachEvent('onreadystatechange', function() {if (document.readyState === 'complete') {replaceCurrentPageWithErrorPage();}}); window.attachEvent('onload', replaceCurrentPageWithErrorPage);}}());
La esencia del control de acceso al lanzamiento de aplicaciones empresariales es admitir que "las nuevas versiones no son confiables por defecto". La escala de grises compra tiempo de observación, la tasa de accidentes compra el poder para detenerse y la solución rápida compra un canal de conexión en lugar de un lugar sin ley. Si todavía está debatiendo "si usar escala de grises" en la próxima reunión de versión, imprima esta tarjeta: quién tiene derecho a Detener, cuántos números se deben Detener y cuánto tiempo después de Detener se debe proporcionar un nuevo binario. Discutir claramente estas tres oraciones protegerá la escena más que agregar dos funciones más.