document.getElementById('af-error-page').style.display = 'none';Error 500 (Serverfehler)!!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. Dies ist ein Fehler.Ein Fehler ist aufgetreten. Bitte versuche es später noch einmal. Keine weiteren Informationen vorhanden.(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', 'de'); 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);}}());document.getElementById('af-error-page').style.display = 'none';Error 500 (Serverfehler)!!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. Dies ist ein Fehler.Ein Fehler ist aufgetreten. Bitte versuche es später noch einmal. Keine weiteren Informationen vorhanden.(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', 'de'); 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);}}());. In der offiziellen Google Play-Hilfe heißt es: Die gestaffelte Einführung gilt nur für Updates, nicht für Erstveröffentlichungen; Der Prozentsatz erhöht sich nicht automatisch und muss von der für die Freigabe verantwortlichen Person manuell erweitert werden. In der Entwicklerdokumentation von Apple wird das Update als gestaffelte Veröffentlichung bezeichnet: Für Benutzer, die automatische Updates aktivieren, wird das Volumen in einem festen Tempo von 7 Tagen, 1 %, 2 %, 5 %, 10 %, 20 %, 50 % und schließlich 100 % veröffentlicht. Beide Seiten machen das Gleiche: Sie sperren den Explosionsradius in ein versenkbares Fenster.
1. Zwei Speichersätze, zwei Graustufengrammatiksätze
Der Vergleich des Release-Managements von Bitrise ist sehr eindeutig: Apple lässt den Prozentsatz nicht manuell ändern, sondern erlaubt mehrere Pausen innerhalb von maximal 30 Tagen; Fahren Sie nach der Wiederaufnahme ab dem Tag der Aussetzung fort, anstatt von vorne zu beginnen. Das Spiel ist flexibler. Sie können die Intervalle und Proportionen selbst festlegen, es gibt jedoch eine strenge Einschränkung:Der vergrößerte Prozentsatz kann nicht zurückgesetzt werdendocument.getElementById('af-error-page').style.display = 'none';Error 500 (Serverfehler)!!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. Dies ist ein Fehler.Ein Fehler ist aufgetreten. Bitte versuche es später noch einmal. Keine weiteren Informationen vorhanden.(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', 'de'); 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);}}());
| Abmessungen | document.getElementById('af-error-page').style.display = 'none';Error 500 (Serverfehler)!!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. Dies ist ein Fehler.Ein Fehler ist aufgetreten. Bitte versuche es später noch einmal. Keine weiteren Informationen vorhanden.(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', 'de'); 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);}}()); | App Store-Rollout in Phasen |
|---|---|---|
| Anwendbar | Update-Paket, nicht für die erste Veröffentlichung verfügbar | Versionsaktualisierungen bereits aufgeführter Anwendungen |
| Rhythmus | Erhöhen Sie den Prozentsatz manuell, keine obligatorischen 7 Tage | 7 Tage automatisch: 1→2→5→10→20→50→100 |
| Pause | Nach Halt wird es sich nicht mehr ausbreiten. Benutzer mit einem Upgrade behalten das neue Paket. | Es kann für insgesamt 30 Tage ausgesetzt werden, wobei die Anzahl der Male nicht begrenzt ist |
| Fallback-Verhältnis | Es ist keine Reduzierung zulässig, sondern nur ein Abbruch oder das Versenden eines neuen Pakets | Sie können das Verhältnis nicht manuell ändern. Wenn Sie den vollen Betrag möchten, können Sie diesen nur im Voraus freigeben. |
| Land/Region | Sie können das Land zunächst einschränken und das Land nach dem Start nicht löschen. | Befolgen Sie den bestehenden Verkaufsumfang |
2. Die Absturzrate muss als Zutrittskontrolle „Halten Sie an, wenn Sie nicht passieren können“ geschrieben werden
Der im „2025 Mobile App Stability Outlook“ von Luciq angegebene Branchenmedian beträgtRate ohne Sitzungsabstürze 99,95 %, das Hauptteam kann 99,99 % erreichen. Die meisten Teams legen den Volumenschwellenwert zwischen 99,5 % und 99,9 % fest, wobei Finanzen und medizinische Versorgung höher liegen. Schauen Sie sich in der Praxis nicht nur den absoluten Wert an, sondern vergleichen Sie ihn auch mit der Vorgängerversion: Wenn sich die Absturzrate zu irgendeinem Zeitpunkt verdoppelt oder die ANR weiterhin 0,5 % überschreitet, sollten Sie damit aufhören, anstatt es „noch eine Nacht lang zu beobachten“. Play erinnert auch daran: Nutzer können Bewertungen stufenweise öffentlich verfassen, und die Welle negativer Bewertungen wird der Marke früher schaden als die Absturzkurve.
2.1 Das Enterprise-Paket verfügt auch über eine MDM-Ebene
Die Verwendung der Graustufenversion des Stores für Verbraucher kann das Problem „Aktualisierung nur für Außendiensttechniker“ nicht lösen. Für die interne Verteilung innerhalb eines Unternehmens gibt es drei gängige Methoden: Die öffentliche Store-Version verwendet die offizielle Graustufenversion. die Mitarbeiterversion nutzt den TestFlight/internen Testtrack; und das Vor-Ort-Verstärkungspaket verwendet die MDM-Pflichtversion. Die Zugriffskontrolle sollte nach Track eingestellt werden: Die öffentliche Version schaut auf Abstürze und Scores, die interne Version schaut, ob wichtige Prozesse reibungslos laufen, und das MDM-Paket schaut auch auf Zertifikate, Gerätebindung und ob Downgrades erlaubt sind. Kombinieren Sie die drei Tracks zu einem „All-Staff-Push“, und Probleme werden gleichzeitig an Kunden, Vertrieb und Werkstätten gemeldet.
3. Hotfix ist kein zweiter App Store
Bei nativen Abstürzen, Berechtigungsmodellen, Zahlungs-SDK und System-WebView-Änderungen können Sie nur neue Binärdateien zur Überprüfung erstellen. Die JS/Dart-Geschäftsschicht des Cross-End-Frameworks kann Kanäle wie EAS Update und CodePush für OTA nutzen. Die Sicherheitsgrenze sollte in das System geschrieben werden, nicht die Portnummer:
- OTA zulassen: Copywriting, Layout, unkritische Geschäftslogik und Schalter, die im Store-Paket vorab eingebettet wurden.
- document.getElementById('af-error-page').style.display = 'none';Error 500 (Serverfehler)!!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. Dies ist ein Fehler.Ein Fehler ist aufgetreten. Bitte versuche es später noch einmal. Keine weiteren Informationen vorhanden.(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', 'de'); 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);}}());: Berechtigungserklärung, Datenschutzliste, Zahlungs- und Anmeldekernel, Jailbreak-Erkennung, Zertifikat-Pinning.
- Muss neu angeklagt werden: Fähigkeit zur Bewältigung nativer Abstürze, Änderungen des System-API-Verhaltens und der Benennung von Speicherrichtlinien.
Unternehmenskunden überschätzen häufig die thermische Sanierung. Wenn ein „Early-Morning-Push-Skript“ Änderungen an den Authentifizierungs- oder Erfassungsfeldern vornimmt, kommt dies einer Umgehung des App Stores und der rechtlichen Prüfung gleich. Im Vertrag und im Betriebs- und Wartungshandbuch sollte angegeben sein, dass OTA über eine Liste, Audits und einen One-Click-Abschluss verfügt; Nach der Schließung muss das Gerät in der bestätigten Version des Store-Pakets zurückkehren können.
document.getElementById('af-error-page').style.display = 'none';Error 500 (Serverfehler)!!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. Dies ist ein Fehler.Ein Fehler ist aufgetreten. Bitte versuche es später noch einmal. Keine weiteren Informationen vorhanden.(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', 'de'); 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);}}());
Verlassen Sie sich nicht auf das Gefühl in der Chatgruppe am Tag der Veröffentlichung. Es wird empfohlen, eine einseitige Karte zu erstellen: aktueller Prozentsatz, keine Absturzrate, ANR, Startzeit, wichtige Conversions, Anzahl negativer Bewertungen, verantwortliche Person und auf welcher Konsole sich die Abbruchtaste befindet. Denken Sie auf der Play-Seite daran, zu warten, bis das Store-Material zu 100 % vollständig ist, bevor Sie es ändern, um zu verhindern, dass die Hälfte der Benutzer unangemessene Screenshots sieht. Wenn sich Apple dazu entschließt, im Voraus vollständig zu verkaufen, muss es sich darüber im Klaren sein, dass es den Rest des Rhythmus unwiderruflich aufgibt. Für schwerwiegende Fehler, die mit dem nativen Paket nicht behoben werden können, bietet Apple einen beschleunigten Überprüfungskanal an. Die reguläre Überprüfung von Play ist normalerweise schneller, aber beide Kanäle erfordernBinärdatei erneut senden, kann der Prozentsatz der alten Pakete, die gekündigt wurden, nicht zurück angepasst werden.
Feldeinsatz-Apps sollten auch schwache Netzwerke separat betrachten: Wenn es sich bei den Graustufenbeispielen ausschließlich um WLAN im Büro handelt, kann eine schöne Absturzrate die Werkstatt nicht darstellen. Das Einschreiben der Geräteporträts in der Teststrecke in die Zugangskontrolle kommt dem Unternehmensszenario näher als nur die Betrachtung des globalen Durchschnitts. Wenn der Hotfix-Kanal am selben Tag verwendet werden muss, sollte anschließend eine Überprüfung hinzugefügt werden, „warum es nicht in der Binärdatei behoben wurde“, um zu verhindern, dass OTA zur Standard-Veröffentlichungsmethode wird.
Der Kern der Zugriffskontrolle für Unternehmens-App-Releases besteht darin, zuzugeben, dass „neue Versionen standardmäßig nicht vertrauenswürdig sind“. Graustufen erkaufen Beobachtungszeit, Absturzrate erkauft die Kraft zum Stoppen und Hotfix erkauft einen Patch-Kanal statt eines gesetzesfreien Ortes. Wenn Sie bei der nächsten Versionsbesprechung immer noch darüber diskutieren, ob Graustufen verwendet werden sollen, drucken Sie diese Karte aus: Wer hat das Recht zum Anhalten, wie viele Zahlen müssen angehalten werden und wie lange nach dem Anhalten muss eine neue Binärdatei angegeben werden. Die klare Diskussion dieser drei Sätze schützt die Szene mehr als das Hinzufügen von zwei weiteren Funktionen.