Одномесячное ограничение на бесплатное использование приложений

Требование:
В моем приложении я хочу разрешить пользователю бесплатно использовать все функции в течение одного месяца со дня первого запуска приложения. Для этого у меня есть первая дата запуска в базе данных приложения и сравнивается первая дата запуска с текущей датой каждый раз при запуске приложения.

Реализация:
Для получения текущей даты у нас есть несколько функций, таких как Calendar.getInstance(); Date date=new Date(); Эта функция вернет дату \ datetime стандартных «стенных» часов (время и дата). Согласно документу, Which can be set by the user or the phone network.

Проблема:
Кажется, что все работает нормально, но что делать, если пользователь меняет дату с « Setting и устанавливает ее на прошлую дату. Например, пользователь первым запускает приложение 7 июня 2013 года, поэтому после 6 июля 2013 года приложение должно показать, что он должен купить подписку, но если пользователь изменит дату устройства на 30 июня и т. Д., То ограничение не будет работать.
Итак, есть ли какие-нибудь причины для его правильной реализации?
Есть ли какие-либо причины для получения фактического времени устройства, которое не может быть изменено пользователем?
Редактировать:
Приложение может работать в автономном режиме, поэтому пользователь может отключить подключение к Интернету.

Как сохранить две даты – дату, когда приложение было впервые использовано, и дату последнего использования. 30 минус разница между двумя датами даст вам количество оставшихся дней, и если текущая дата предшествует последней используемой дате, вы знаете, что они изменили дату.

Просто идея – не пробовала, но теоретически она должна работать.

Сохраните первый день, когда он был использован, и последний день, когда он был использован, и выслушайте намерение ACTION_TIME_CHANGED. Также попробуйте использовать AlarmManager.

Если у вас есть сеть, храните ее в базе данных с телефона.

Но вы, вероятно, должны спросить себя, действительно ли кто-то изменит дату своего телефона, просто чтобы использовать ваше приложение. Это серьезно повредило бы многим вещам: тревоги, каландры, синхронизация с другими службами и так далее. Я не думаю, что это проблема на самом деле.

Если это возможно, вы можете использовать одноразовый запрос GPS, чтобы получить значение времени. Пользователь не может изменить время GPS, которое он получает. Добавление разрешения – это боль, если вам это не нужно, но это предотвратит плохое поведение, вызванное сбоем пользователя с датой / временем.

 Event(APP_INSTALL) -> storeOnServer(INSTALL_TIME_KEY,getTimeFromServer()); Event(APP_LAUNCH) -> IF(getTimeFromServer -getStoredTime(INSTALL_TIME_KEY) >30) -> showTrialPeriodEndedAlert() -> quitApp(); 
Intereting Posts
Можно ли делать настоящие HTTP-запросы с robolectric Могу ли я проверить, загружено ли мое устройство Android в безопасном режиме или нет программно Измените символ маски пароля EditText на звездочку (*) Экспорт проекта библиотеки Android для повторного использования без исходного кода GridView Получить элемент при касании Является ли IntentService реализацией Command Pattern? Android ListView в действии становится обновленным при изменении ориентации Как установить тайм-аут на ноль в HTTP Get действие Tasker? Обновление Android Studio Gradle до версии 0.5.0 – Gradle Migrating От 0,8 до 0,9 – Также обновление для Android Studio до 0.8.1 Загрузка значения измерения из res / values ​​/ dimension.xml из исходного кода TextView и цвет фона OnGestureListener # onScroll не вызывается из GestureDetector на Samsung Galaxy Note 10.1 RTMP против HLS против HDS Как измерить и улучшить использование батареи в iPhone / iPad (Android также) Счетчик Android TextView с анимацией Top / Down