Mam aplikację, która chce trafić na rynek jako aplikacja płatna. Chciałbym mieć inną wersję, która byłaby wersją „próbną” z ograniczeniem czasowym powiedzmy 5 dni?
Jak mam to zrobić?
Mam aplikację, która chce trafić na rynek jako aplikacja płatna. Chciałbym mieć inną wersję, która byłaby wersją „próbną” z ograniczeniem czasowym powiedzmy 5 dni?
Jak mam to zrobić?
Odpowiedzi:
Obecnie większość programistów dokonuje tego za pomocą jednej z trzech poniższych technik.
Pierwsze podejście można łatwo obejść, przy pierwszym uruchomieniu aplikacji zapisz datę / godzinę w pliku, bazie danych lub wspólnych preferencjach i za każdym razem, gdy uruchomisz aplikację po tym sprawdzeniu, czy okres próbny dobiegł końca. Można to łatwo obejść, ponieważ odinstalowanie i ponowna instalacja pozwoli użytkownikowi na kolejny okres próbny.
Drugie podejście jest trudniejsze do obejścia, ale nadal można je obejść. Użyj zakodowanej bomby zegarowej. Zasadniczo dzięki temu podejściu ustalisz na stałe datę zakończenia okresu próbnego, a wszyscy użytkownicy, którzy pobierają i używają aplikacji, przestaną być w stanie korzystać z aplikacji w tym samym czasie. Użyłem tego podejścia, ponieważ jest ono łatwe do wdrożenia i przeważnie nie miałem ochoty przechodzić przez kłopoty związane z trzecią techniką. Użytkownicy mogą to obejść, ręcznie zmieniając datę w telefonie, ale większość użytkowników nie będzie miała problemu z zrobieniem czegoś takiego.
Trzecia technika to jedyny sposób, o jakim słyszałem, aby naprawdę móc osiągnąć to, co chcesz. Będziesz musiał skonfigurować serwer, a następnie za każdym razem, gdy Twoja aplikacja jest uruchamiana, aplikacja wysyła unikalny identyfikator telefonu do serwera. Jeśli serwer nie ma wpisu dla tego identyfikatora telefonu, tworzy nowy i zapisuje godzinę. Jeśli serwer ma wpis dla identyfikatora telefonu, wykonuje proste sprawdzenie, czy okres próbny wygasł. Następnie przekazuje wyniki sprawdzenia wygaśnięcia okresu próbnego z powrotem do aplikacji. Tego podejścia nie można obejść, ale wymaga skonfigurowania serwera internetowego i tym podobnych.
Zawsze dobrze jest przeprowadzać te sprawdzenia w onCreate. Jeśli wygaśnięcie zakończyło się wyskakujące okienko AlertDialog z linkiem rynkowym do pełnej wersji aplikacji. Dołącz tylko przycisk „OK”, a gdy użytkownik kliknie „OK”, wywołaj funkcję „finish ()”, aby zakończyć działanie.
źródło
Opracowałem Android Trial SDK, który możesz po prostu wrzucić do swojego projektu Android Studio i zajmie się całym zarządzaniem po stronie serwera (w tym okresami prolongaty offline).
Aby z niego skorzystać, po prostu
Dodaj bibliotekę do głównego modułu
build.gradle
Zainicjuj bibliotekę w
onCreate()
metodzie swojego głównego działaniaDodaj moduł obsługi wywołań zwrotnych:
Aby rozpocząć okres próbny, zadzwoń do
mTrialy.startTrial("YOUR_TRIAL_SKU", mTrialyCallback);
swojego klucza aplikacji, a wersję próbną SKU można znaleźć na pulpicie programisty Trialy .źródło
To stare pytanie, ale może komuś to pomoże.
Jeśli chcesz zastosować najbardziej uproszczone podejście (które się nie powiedzie, jeśli aplikacja zostanie odinstalowana / ponownie zainstalowana lub użytkownik ręcznie zmieni datę urządzenia), może to wyglądać następująco:
źródło
getTime
nie jestgetTimeInMillis
.To pytanie i odpowiedź snctln zainspirowały mnie do pracy nad rozwiązaniem opartym na metodzie 3 jako moja praca licencjacka. Wiem, że obecny status nie służy do produktywnego użytku, ale chciałbym usłyszeć, co o nim myślisz! Czy użyłbyś takiego systemu? Czy chciałbyś widzieć to jako usługę w chmurze (nie masz problemu z konfiguracją serwera)? Martwisz się o kwestie bezpieczeństwa lub przyczyny związane ze stabilnością?
Zaraz po zakończeniu procedury licencjackiej chcę kontynuować pracę nad oprogramowaniem. Więc teraz czas na twoją opinię!
Kod źródłowy jest hostowany na GitHub https://github.com/MaChristmann/mobile-trial
Kilka informacji o systemie: - System składa się z trzech części, biblioteki Android, serwera node.js i konfiguratora do zarządzania wieloma aplikacjami próbnymi i kontami wydawcy / programisty.
Obsługuje tylko okresowe wersje próbne i używa konta (sklepu Play lub innego) zamiast identyfikatora telefonu.
W przypadku biblioteki Android jest ona oparta na bibliotece weryfikacji licencji Google Play. Zmodyfikowałem go, aby połączyć się z serwerem node.js i dodatkowo biblioteka próbuje rozpoznać, czy użytkownik zmienił datę systemową. Buforuje również pobraną licencję próbną w preferencjach wspólnych z szyfrowaniem AES. Za pomocą konfiguratora możesz skonfigurować aktualny czas pamięci podręcznej. Jeśli użytkownik „wyczyści dane”, biblioteka wymusi sprawdzenie po stronie serwera.
Serwer używa protokołu HTTPS, a także podpisuje cyfrowo odpowiedź sprawdzającą licencję. Posiada również API dla aplikacji próbnych CRUD i użytkowników (wydawcy i programisty). Podobnie jak w przypadku Biblioteki weryfikacji licencji, programiści mogą testować implementację swojego zachowania w aplikacji próbnej z wynikiem testu. Dlatego w konfiguratorze możesz jawnie ustawić odpowiedź licencji na „licencjonowana”, „nie licencjonowana” lub „błąd serwera”.
Jeśli zaktualizujesz swoją aplikację za pomocą niesamowitej nowej funkcji, możesz chcieć, aby wszyscy mogli spróbować ponownie. W konfiguratorze możesz odnowić licencję próbną dla użytkowników z wygasłymi licencjami, ustawiając kod wersji, który powinien to wywołać. Na przykład użytkownik uruchamia Twoją aplikację z kodem wersji 3 i chcesz, aby wypróbował funkcje kodu wersji 4. Jeśli zaktualizuje aplikację lub ją ponownie zainstaluje, będzie mógł ponownie skorzystać z pełnego okresu próbnego, ponieważ serwer wie, na której wersji ostatnio ją wypróbował czas.
Wszystko jest objęte licencją Apache 2.0
źródło
Najłatwiejszym i najlepszym sposobem na to jest zaimplementowanie BackupSharedPreferences.
Preferencje są zachowywane, nawet jeśli aplikacja zostanie odinstalowana i ponownie zainstalowana.
Po prostu zapisz datę instalacji jako preferencję i gotowe.
Oto teoria: http://developer.android.com/reference/android/app/backup/SharedPreferencesBackupHelper.html
Oto przykład: Kopia zapasowa SharedPreferences systemu Android nie działa
źródło
Podejście 4: użyj czasu instalacji aplikacji.
Od poziomu 9 interfejsu API (Android 2.3.2, 2.3.1, Android 2.3, GINGERBREAD ) istnieją firstInstallTime i lastUpdateTime w
PackageInfo
.Więcej informacji: Jak uzyskać czas instalacji aplikacji z Androida
źródło
Teraz, w najnowszej wersji bezpłatnej subskrypcji próbnej Androida, możesz odblokować wszystkie funkcje aplikacji dopiero po wykupieniu subskrypcji w aplikacji na bezpłatny okres próbny. Pozwoli to użytkownikowi korzystać z Twojej aplikacji przez okres próbny, jeśli aplikacja będzie nadal odinstalowana po okresie próbnym, pieniądze z subskrypcji zostaną przesłane do Ciebie. Nie próbowałem, po prostu dzielę się pomysłem.
Oto dokumentacja
źródło
Moim zdaniem najlepszym sposobem na to jest po prostu skorzystanie z bazy danych czasu rzeczywistego Firebase:
1) Dodaj obsługę Firebase do swojej aplikacji
2) Wybierz „Uwierzytelnianie anonimowe”, aby użytkownik nie musiał się rejestrować ani nawet wiedzieć, co robisz. To gwarantuje połączenie z aktualnie uwierzytelnionym kontem użytkownika i będzie działać na różnych urządzeniach.
3) Użyj interfejsu API bazy danych czasu rzeczywistego, aby ustawić wartość parametru „installed_date”. W czasie uruchamiania po prostu pobierz tę wartość i użyj jej.
Zrobiłem to samo i działa świetnie. Udało mi się to przetestować podczas odinstalowywania / ponownej instalacji, a wartość w bazie danych czasu rzeczywistego pozostaje taka sama. W ten sposób okres próbny działa na wielu urządzeniach użytkowników. Możesz nawet ustawić wersję swojej install_date, aby aplikacja `` resetowała '' datę wersji próbnej dla każdej nowej wersji głównej.
AKTUALIZACJA : po przeprowadzeniu dalszych testów wydaje się, że wydaje się, że Firebase anonimowo przydziela inny identyfikator w przypadku, gdy masz różne urządzenia i nie ma gwarancji między kolejnymi instalacjami: / Jedynym gwarantowanym sposobem jest użycie Firebase, ale powiązanie go z ich Google konto. To powinno działać, ale wymagałoby dodatkowego kroku, w którym użytkownik musi najpierw zalogować się / zarejestrować.
Jak dotąd skończyłem z nieco mniej eleganckim podejściem, polegającym na prostym sprawdzaniu kopii zapasowej preferencji i daty zapisanej w preferencjach podczas instalacji. Działa to w przypadku aplikacji zorientowanych na dane, w przypadku których nie ma sensu ponowne instalowanie aplikacji i ponowne wprowadzanie wszystkich wcześniej dodanych danych, ale nie działa to w przypadku prostej gry.
źródło
Po przejrzeniu wszystkich opcji w tym i innych wątkach, oto moje ustalenia
Wspólne preferencje, baza danych Można wyczyścić w ustawieniach Androida, utracić po ponownej instalacji aplikacji. Można zarchiwizować za pomocą mechanizmu tworzenia kopii zapasowych Androida i zostanie przywrócona po ponownej instalacji. Kopia zapasowa może nie zawsze być dostępna, chociaż powinna znajdować się na większości urządzeń
Pamięć zewnętrzna (zapis do pliku) Nie dotyczy wyczyszczenia ustawień lub ponownej instalacji, jeśli nie zapisujemy w prywatnym katalogu aplikacji . Ale: wymaga, abyś poprosił użytkownika o pozwolenie w czasie wykonywania w nowszych wersjach Androida, więc jest to prawdopodobnie możliwe tylko wtedy, gdy i tak potrzebujesz tego uprawnienia. Można również zarchiwizować.
PackageInfo.firstInstallTime jest resetowany po ponownej instalacji, ale stabilny między aktualizacjami
Zaloguj się na jakieś konto Nie ma znaczenia, czy jest to konto Google przez Firebase, czy jedno na Twoim własnym serwerze: wersja próbna jest powiązana z kontem. Utworzenie nowego konta spowoduje zresetowanie okresu próbnego.
Anonimowe logowanie do Firebase Możesz zalogować użytkownika anonimowo i przechowywać jego dane w Firebase. Ale najwyraźniej ponowna instalacja aplikacji i być może inne nieudokumentowane zdarzenia mogą dać użytkownikowi nowy anonimowy identyfikator , resetując jego czas próbny. (Same Google nie dostarczają dużo dokumentacji na ten temat)
ANDROID_ID Może być niedostępny i może ulec zmianie w pewnych okolicznościach , np. Przywrócenie ustawień fabrycznych. Opinie na temat tego, czy warto używać tego do identyfikacji urządzeń, wydają się różne.
Identyfikator reklamowy Play Może zostać zresetowany przez użytkownika. Może zostać wyłączone przez użytkownika poprzez rezygnację ze śledzenia reklam.
Reset ID instancji podczas ponownej instalacji . Zresetuj w przypadku zdarzenia związanego z bezpieczeństwem. Można zresetować za pomocą aplikacji.
To, która (kombinacja) metod działa w Twoim przypadku, zależy od Twojej aplikacji i od tego, ile wysiłku, według Ciebie, przeciętny Jan włoży w uzyskanie kolejnego okresu próbnego. Zalecałbym unikanie używania tylko anonimowych identyfikatorów Firebase i Advertising ID ze względu na ich niestabilność. Wydaje się, że podejście wieloczynnikowe przyniesie najlepsze rezultaty. Dostępność dostępnych czynników zależy od aplikacji i jej uprawnień.
W przypadku mojej własnej aplikacji okazało się, że wspólne preferencje + firstInstallTime + kopia zapasowa preferencji są najmniej uciążliwą, ale także wystarczająco skuteczną metodą. Musisz upewnić się, że zażądasz kopii zapasowej tylko po sprawdzeniu i zapisaniu czasu rozpoczęcia okresu próbnego we wspólnych preferencjach. Wartości we wspólnych prefs muszą mieć pierwszeństwo przed firstInstallTime. Następnie użytkownik musi ponownie zainstalować aplikację, uruchomić ją raz, a następnie wyczyścić dane aplikacji, aby zresetować wersję próbną, co jest dość dużo pracy. Jednak na urządzeniach bez zapasowego transportu użytkownik może zresetować wersję próbną, po prostu przeinstalowując.
Udostępniłem to podejście jako rozszerzalną bibliotekę .
źródło
Z definicji wszystkie płatne aplikacje na Androida dostępne na rynku można oceniać przez 24 godziny od zakupu.
Dostępny jest przycisk „Odinstaluj i zwróć środki”, który po 24 godzinach zmienia się na „Odinstaluj”.
Twierdzę, że ten przycisk jest zbyt widoczny!
źródło
Natknąłem się na to pytanie, szukając tego samego problemu, myślę, że możemy skorzystać z darmowego interfejsu API dat, takiego jak http://www.timeapi.org/utc/now lub innego interfejsu API do sprawdzania daty wygaśnięcia aplikacji. ten sposób jest skuteczny, jeśli chcesz dostarczyć wersję demonstracyjną i martwisz się o płatność i potrzebujesz wersji demo z ustalonym okresem zatrudnienia. :)
znajdź kod poniżej
jego działające rozwiązanie .....
źródło
Oto jak poszedłem do mojego, stworzyłem 2 aplikacje, jedną z próbną aktywnością, a drugą bez,
przesłałem ten bez aktywności próbnej do sklepu Play jako płatną aplikację,
i ten z aktywnością próbną jako darmową aplikacją.
Bezpłatna aplikacja przy pierwszym uruchomieniu ma opcje zakupu wersji próbnej i zakupu w sklepie, jeśli użytkownik wybierze zakup w sklepie, przekierowuje do sklepu, aby użytkownik mógł dokonać zakupu, ale jeśli użytkownik kliknie wersję próbną, przeniesie go do aktywności próbnej
NB: użyłem opcji 3, jak @snctln, ale z modyfikacjami
po pierwsze , nie zależałem od czasu urządzenia, mam swój czas z pliku php, który wykonuje próbną rejestrację do bazy danych,
po drugie , użyłem numeru seryjnego urządzenia, aby jednoznacznie zidentyfikować każde urządzenie,
wreszcie aplikacja zależy od wartości czasu zwróconej z połączenia z serwerem, a nie od własnego czasu, więc system można obejść tylko wtedy, gdy numer seryjny urządzenia zostanie zmieniony, co jest dość stresujące dla użytkownika.
więc oto mój kod (dla działania próbnego):
Mój plik php wygląda następująco (jest to technologia REST-slim):
następnie w głównym działaniu używam preferencji współdzielonych (installDate utworzona w działaniu próbnym), aby monitorować liczbę pozostałych dni, a jeśli dni się skończyły, blokuję główny interfejs aktywności za pomocą komunikatu, który prowadzi ich do sklepu w celu zakupu.
Jedyną wadą, jaką tutaj widzę, jest to, że jeśli użytkownik Rogue kupi płatną aplikację i zdecyduje się udostępnić ją aplikacjom takim jak Zender, udostępnić plik lub nawet hostować plik apk bezpośrednio na serwerze, aby ludzie mogli go pobrać za darmo. Ale jestem pewien, że wkrótce edytuję tę odpowiedź, podając rozwiązanie tego problemu lub link do rozwiązania.
Mam nadzieję, że to uratuje duszę ... któregoś dnia
Miłego kodowania ...
źródło
@snctln opcję 3 można łatwo zrobić, dodając plik php do serwera internetowego z zainstalowanymi php i mysql, tak jak wiele z nich ma.
Ze strony Androida identyfikator (identyfikator urządzenia, konto Google lub cokolwiek chcesz) jest przekazywany jako argument w adresie URL za pomocą HttpURLConnection, a php zwraca datę pierwszej instalacji, jeśli istnieje w tabeli lub wstawia nowy wiersz i zwraca aktualną datę.
U mnie działa dobrze.
Jeśli będę miał czas, wyślę kod!
Powodzenia !
źródło