Oto jak można częściowo osiągnąć to, czego pragniesz, bez użycia serwera:
Aktualizacja aplikacji z nową wersją, która będzie pisać unikalną wartość dla SharedPreferences. Ta wartość powinna być hashem identyfikatora, który jest unikalny dla urządzenia (lub co najmniej, że wiele innych urządzeń mogłoby współdzielić). Powodem, dla którego wartość powinna być względnie unikatowa, jest zapobieganie jej udostępnianiu późniejszym użytkownikom. Jeśli chcesz, aby przetrwał ponowną instalację, możesz również zapisać go w obszarze pamięci zewnętrznej użytkownika, który nie zostanie usunięty po zainstalowaniu aplikacji.
Zaczekaj wystarczająco dużo czasu, aby większość obecnych użytkowników zaktualizowała się do nowej wersji. W trakcie tego procesu nowi użytkownicy podczas tej fazy otrzymają unikalną wartość w swoich SharedPreferences.
wydania nowej wersji, która robi nie napisać unikatowy identyfikator, i który umożliwia funkcje, które chciałbyś ładować tylko jeśli albo identyfikator jest obecny, lub jeśli użytkownik zapłacił za pośrednictwem rozliczanie w aplikacji.
To nie jest idealne, ale może to pozwolić przynajmniej najbardziej Twoich obecnych użytkowników nadal dostęp do funkcji.
Nie wiem, czy naruszyłoby to Twoją umowę z Google Play, i sam musisz sprawdzić to zagadnienie. Fakt, że przedstawiłeś aplikację obecnym użytkownikom jako bezpłatną, a teraz chcesz pobierać opłaty za niektóre z jej funkcji, może być postrzegany jako wprowadzanie w błąd, chyba że dziadek w dotychczasowych użytkownikach, a podejście, które właśnie opisałem, nie gwarantuje tego wszystkim obecnym użytkownikom zostanie przyznany dostęp.
Należy zauważyć, że podejście zaproponowane w innej odpowiedzi wymagającej użycia własnego serwera wydaje się mieć te same problemy, ponieważ konieczne jest wydanie nowej wersji aplikacji z kodem umożliwiającym komunikację z serwerem. nie ma możliwości zmuszenia obecnych użytkowników do aktualizacji do nowej wersji w określonym przedziale czasu. W przeciwnym razie, w jaki sposób zbierzesz unikalne identyfikatory identyfikujące obecnych użytkowników w bazie danych Twojego serwera, ponieważ użytkownicy darmowych aplikacji nie są ogólnie znani programistom?
Czystsze podejście byłoby dodać nowych funkcje integrujące ściśle z istniejącymi funkcjami, czyniąc je bardziej wartościowe, a także podjęciem zawartości już wprowadzane za pomocą starych możliwości bardziej wartościowe. Możesz nadal udostępniać istniejące funkcje bezpłatnie, ale pobierać opłaty za nowe funkcje.
Dzięki temu podejściu żaden bieżący użytkownik nie zostałby pozbawiony funkcjonalności, a także mógł pobierać opłatę od aktualnych użytkowników (a nie tylko od nowych użytkowników) za funkcje o wartości dodanej. Korzystanie z tego podejścia może być nie tylko bardziej przyjemne dla użytkowników, ale także potencjalnie bardziej opłacalne dla Ciebie, ponieważ będziesz mieć całą obecną bazę użytkowników jako potencjalnie płacących klientów.
Być może uważasz, że obecna popularność Twojej aplikacji może wynikać z funkcji, które chcesz teraz obciążyć. Możesz więc nie przyciągać ciągłego strumienia nowych użytkowników, gdy te funkcje nie będą już darmowe.
Dziękuję za odpowiedź. Nie myślałem o zachowaniu unikalnego identyfikatora użytkownika. To świetny pomysł! Jednak nie jest to dla mnie przydatne, ponieważ aplikacja jest tylko klientem i nie mam czasu na wdrożenie strony serwera teraz. Przyjmuję twoją odpowiedź, ponieważ tak to powinno być zrobione. Rozwiązaniem dla mnie byłoby po prostu nie obciążać użytkowników, którzy dokonali aktualizacji, ale następnym razem, gdy zainstalują aplikację na innym urządzeniu, zostaną obciążeni. – liovka
w jaki sposób zamierzasz sprawdzić, czy użytkownik zaktualizował aplikację lub czy ją zainstalował, ponieważ kiedy użytkownik uaktualnia aplikację, pełny plik apk jest pobierany z Google Play i ponownie instaluje aplikację na urządzeniu w taki sam sposób jak nową instalację aplikacji? – Ankit
Jestem świadomy tego, o czym piszesz. Czy nie uważasz, że uczciwy kompromis może zacząć obciążać klientów za każdą nową instalację? – liovka