Mam aplikację w sklepie Google Play. Gdy dostępna jest wersja aktualizacyjna, starsza wersja stanie się bezużyteczna - to znaczy, jeśli użytkownicy nie zaktualizują aplikacji, nie wejdą do aplikacji. Jak zmusić użytkowników do zaktualizowania aplikacji, gdy pojawi się nowa wersja?
102
Odpowiedzi:
Zgadzam się z punktem Scotta Helme w innej odpowiedzi tutaj. Jednak w niektórych ekstremalnych sytuacjach (problemy z bezpieczeństwem, zmiany powodujące zerwanie interfejsu API ...), w których użytkownicy muszą koniecznie zaktualizować aplikację, aby nadal korzystać z aplikacji, można zapewnić prosty interfejs API do obsługi wersji. Interfejs API wyglądałby następująco:
versionCheck API:
Parametry żądania:
int appVersion
Odpowiedź
boolean forceUpgrade
boolean recommendUpgrade
Po uruchomieniu aplikacji możesz wywołać ten interfejs API, który przekazuje bieżącą wersję aplikacji, i sprawdzić odpowiedź na wywołanie interfejsu API do obsługi wersji.
Jeśli
forceUpgrade
taktrue
, pokaż wyskakujące okno dialogowe z opcjami umożliwiającymi użytkownikowi zamknięcie aplikacji lub przejdź do sklepu Google Play, aby zaktualizować aplikację.W przeciwnym razie , jeśli
recommendUpgrade
taktrue
, pokaż wyskakujące okno dialogowe z opcjami aktualizacji lub kontynuowania korzystania z aplikacji.Nawet przy tej wymuszonej możliwości aktualizacji powinieneś nadal obsługiwać starsze wersje, chyba że jest to absolutnie konieczne.
źródło
spróbuj tego: Najpierw musisz wykonać żądanie połączenia z linkiem do sklepu playstore, pobrać stamtąd aktualną wersję, a następnie porównać ją z aktualną wersją.
źródło
Nie należy przerywać obsługi starszej wersji, gdy tylko pojawi się nowa wersja. Spowoduje to straszne wrażenia użytkownika. Nie znam żadnego dostawcy oprogramowania, który to robi, nie bez powodu.
Co się stanie, jeśli użytkownik nie może zaktualizować lub nie chce w tym czasie? Po prostu nie mogą korzystać z Twojej aplikacji, co jest złe.
Google nie zapewnia żadnej opcji śledzenia wersji, więc trzeba by było stworzyć własną. Prosta usługa internetowa zwracająca aktualną wersję na żywo, którą może sprawdzić Twoja aplikacja, byłaby wystarczająca. Następnie możesz zaktualizować wersję, a aplikacja będzie wiedzieć, że jest nieaktualna. Zalecam używanie tego tylko po to, aby poinformować użytkowników, że aktualizacja jest dostępna szybciej niż w przypadku Google Play. Tak naprawdę nie należy go używać do uniemożliwienia działania aplikacji, a jedynie do wezwania użytkownika do aktualizacji.
źródło
Rozwiązanie od zespołu Google
Począwszy od Androida 5.0, można to łatwo osiągnąć dzięki nowemu mechanizmowi aktualizacji Google Play w aplikacji. Wymagane jest posiadanie biblioteki Play Core w wersji 1.5.0+ i używanie idstribution pakietów aplikacji zamiast apek.
Biblioteka zapewnia 2 różne sposoby powiadamiania użytkowników o aktualizacji:
Elastyczny, gdy użytkownicy mogą nadal korzystać z aplikacji, gdy jest ona aktualizowana w tle.
Natychmiastowy - ekran blokujący, który nie pozwala użytkownikowi wejść do aplikacji, dopóki jej nie zaktualizują.
Istnieją kolejne kroki, aby to wdrożyć:
Wszystkie implementacje tych kroków są szczegółowo opisane na oficjalnej stronie: https://developer.android.com/guide/app-bundle/in-app-updates
źródło
Odpowiedzi Scotta i Michaela są poprawne. Hostuj usługę, która zapewnia minimalny obsługiwany numer wersji i porównaj go z wersją zainstalowaną. Miejmy nadzieję, że nigdy nie powinieneś tego używać, ale to ratuje życie, jeśli jest jakaś wersja, którą absolutnie musisz zabić z powodu poważnej usterki.
Chciałem tylko dodać kod, co dalej. Oto sposób, w jaki możesz następnie uruchomić zamiar Google Play i przenieść je do nowej wersji w sklepie po monitowaniu użytkownika, że musi dokonać aktualizacji.
Powinieneś ponownie rozważyć swój projekt, jeśli musisz wymusić aktualizacje w każdym wydaniu.
źródło
Google wprowadził bibliotekę aktualizacji w aplikacji ( https://developer.android.com/guide/app-bundle/in-app-updates ), działa na Lollipop + i daje możliwość poproszenia użytkownika o aktualizację z ładnym dialog (ELASTYCZNY) lub z obowiązkowym komunikatem pełnoekranowym (NATYCHMIAST).
Musisz wdrożyć to drugie. Oto jak to będzie wyglądać:
Omówiłem cały kod w tej odpowiedzi: https://stackoverflow.com/a/56808529/5502121
źródło
Oficjalnie Google zapewnia w tym celu interfejs API systemu Android.
Update API jest już dostępny - https://developer.android.com/guide/app-bundle/in-app-updates
źródło
W tym celu zdecydowanie polecam sprawdzenie funkcji Zdalnej konfiguracji Firebase .
Zaimplementowałem to za pomocą parametru - app_version_enabled - z warunkiem „Disabled Android Versions”, który wygląda następująco:
Wartość domyślna parametru to „prawda”, ale wyłączone wersje systemu Android mają wartość fałsz. W moim wyrażeniu regularnym dla wyłączonych wersji Androida możesz dodać więcej wyłączonych wersji po prostu z inną
|{version name}
w tych nawiasach.Następnie sprawdzam tylko, czy konfiguracja mówi, że wersja jest włączona, czy nie - uruchamiam działanie, które zmusza użytkownika do aktualizacji. Sprawdzam tylko dwa miejsca, z których można uruchomić aplikację zewnętrznie (moja domyślna aktywność programu uruchamiającego i aktywność związana z obsługą intencji). Ponieważ Remote Config działa na zasadzie pamięci podręcznej, nie przechwytuje natychmiast „wyłączonych” wersji aplikacji, jeśli nie upłynął wymagany czas na unieważnienie pamięci podręcznej, ale jest to maksymalnie 12 godzin, jeśli zamierzasz ich zalecana wartość wygaśnięcia pamięci podręcznej.
źródło
sprawdź kod wersji lokalnego i Play Store apk
implementacja klasy do sprawdzania wersji
okno dialogowe do aktualizacji
układ okna dialogowego
źródło
Lepiej jest zdefiniować nasz własny proces aktualizacji.
Android i iOS: jeśli dostępna jest najnowsza wersja aplikacji, pojawi się komunikat „Najnowsza dostępna wersja z większą liczbą funkcji. Aby zaktualizować, kliknij przycisk aktualizacji” (Powiadomienie z przyciskiem „Upgarde” i „Nie, dziękuję”). Następnie aplikacja przekieruje do playstore / Appstore i otworzy najnowszą wersję.
Przed aktualizacją upewnij się, że przeprowadziłeś prawidłowy proces migracji bazy danych, jeśli nastąpiła zmiana schematu bazy danych.
źródło
Aby zmusić użytkownika aplikacji do aktualizacji, jeśli aktualizacja jest dostępna na rynku, należy najpierw sprawdzić wersję aplikacji na rynku i porównać ją z wersją aplikacji na urządzeniu. Jeśli są różne, może to być aktualizacja. W tym poście spisałem kod do pobrania aktualnej wersji marketu i aktualnej wersji na urządzenie i porównałem je razem. Pokazałem również, jak wyświetlić okno aktualizacji i przekierować użytkownika na stronę aktualizacji. Odwiedź ten link: https://stackoverflow.com/a/33925032/5475941 Po prostu upewnij się, że w oknie dialogowym jest wyświetlany tylko przycisk aktualizacji użytkownika i nie pokazuj mu przycisku anulowania. W takim przypadku będzie zmuszony do aktualizacji, zanim będzie mógł korzystać z aplikacji.
źródło
Zdecydowanie należy tutaj wspomnieć o wkrótce udostępnionym interfejsie API aktualizacji w aplikacji .
źródło
Dobrym pomysłem jest użycie zdalnej konfiguracji dla wersji aplikacji i zawsze sprawdzaj podczas uruchamiania, czy aktualna wersja aplikacji jest taka sama jak wersja zdalna, czy nie, jeśli nie wymuszono aktualizacji ze sklepu z aplikacjami.
Prosta logika szczęśliwego kodowania.
https://firebase.google.com/docs/remote-config/android
źródło
Aby temu zaradzić, możesz skorzystać z aktualizacji Play Core Library w aplikacji. Możesz sprawdzić dostępność aktualizacji i bezproblemowo je zainstalować.
Aktualizacje w aplikacji nie są zgodne z aplikacjami, które używają plików rozszerzeń APK (plików .obb). Możesz wybrać elastyczne pobieranie lub natychmiastowe aktualizacje, które Google Play zajmie się pobieraniem i instalowaniem aktualizacji.
Skorzystaj z tej odpowiedzi https://stackoverflow.com/a/58212818/7579041
źródło
możesz to zrobić, porównując numer wersji przechowywany w aplikacji w zmiennej i podobnie aktualna wersja aplikacji jest przechowywana po stronie serwera i za każdym razem, gdy użytkownik otwiera aplikację, należy wysłać pierwsze żądanie, aby sprawdzić, czy się znajdzie dopasowywanie nic nie robi, po prostu pozwól użytkownikowi korzystać z Twojej aplikacji w inny sposób wywołać zamiar w sklepie Google Play lub otwórz okno widoku internetowego Twojej aplikacji (window.open („ https://play.google.com/store/apps/details?id= nazwa_pakietu ", '_system', 'location = yes');) i tam automatycznie pojawią się przycisk z prośbą o aktualizację, to właśnie robi Google Playstore, jeśli nie masz włączonych automatycznych aktualizacji.
źródło
Możesz powiadomić użytkowników, że dostępna jest nowa wersja bieżącej aplikacji do aktualizacji. Ponadto, jeśli ten warunek jest prawdziwy, możesz zablokować logowanie w aplikacji.
Sprawdź, czy to zapewnia rozwiązanie.
źródło
Cóż, może być wiele rozwiązań tego problemu, takich jak zeskrobanie kodu wersji ze strony aplikacji (strona aplikacji Google Play) itp.
Ale pokażę wam ostateczne rozwiązanie, które nie kosztuje ani grosza i będzie działać jak magia.
panelu Firebase Remote Config
Porównaj go z aktualnym kodem wersji aplikacji, który można uzyskać za pomocą poniższego kodu
}
Jeśli pobrany kod wersji jest większy niż bieżąca wersja, pokaż AlertDialog z prośbą o zaktualizowanie aplikacji. W przeciwnym razie aplikacja jest już zaktualizowana.
Dlatego za każdym razem, gdy wprowadzasz nową wersję, musisz umieścić kod nowej wersji w panelu konfiguracji Firebase Remote
Możesz przeczytać cały samouczek o tym, jak zmusić użytkowników do zaktualizowania aplikacji za pomocą Firebase Remote Config
źródło
Firma Google udostępniła aktualizacje w aplikacji dla biblioteki Play Core.
Zaimplementowałem lekką bibliotekę, aby łatwo wdrażać aktualizacje w aplikacji. W poniższym linku można znaleźć przykład dotyczący wymuszenia na użytkowniku wykonania aktualizacji.
https://github.com/dnKaratzas/android-inapp-update#forced-updates
źródło
var activeVersion = "3.9.2";
var currentVersion = "3.9.1";
var activeVersionArr = activeVersion.split ("."); var currentVersionArr = currentVersion.split (".");
var compareArray = JSON.stringify (activeVersionArr) == JSON.stringify (currentVersionArr);
if (compareArray) {return false; }
if (! compareArray) {for (var i = 0; i <activeVersionArr.length; i ++) {
if (activeVersionArr [i]! == currentVersionArr [i]) {
if (activeVersionArr [i]> currentVersionArr [i]) { powrót prawda; } else {return false; }
}}}
źródło