2

要件:
私のアプリケーションでは、アプリケーションの最初の実行日から 1 か月間、ユーザーがすべての機能を無料で使用できるようにしたいと考えています。このために、アプリケーションデータベースに最初の実行日を保存し、アプリケーションを起動するたびに最初の実行日を現在の日付と比較します。

実装:現在の日付を取得するために、標準の「ウォール」クロック (時間と日付) の date\datetime を返す
関数など、いくつかの関数があります。資料Calendar.getInstance(); Date date=new Date();によると Which can be set by the user or the phone network.

問題:
すべてが正常に動作しているように見えますが、ユーザーが日付を変更Settingして過去の日付に設定するとどうなるでしょうか。たとえば、ユーザーが最初にアプリケーションを実行したのは 2013 年 6 月 7 日であるため、2013 年 7 月 6 日以降、アプリケーションはサブスクリプションを購入する必要があることを示す必要がありますが、ユーザーがデバイスの日付を 6 月 30 日などに変更した場合、制限は機能しません。
それで、それを正しく実装する理由はありますか?
ユーザーが編集できないデバイスの実際の時間を取得する理由はありますか?
編集:
アプリケーションはオフラインで動作できるため、ユーザーはインターネット接続をオフにすることができます。

4

4 に答える 4

1

アプリが最初に使用された日付と最後に使用された日付の 2 つの日付を保存するのはどうでしょうか。30 から 2 つの日付の差を引くと、残りの日数がわかり、現在の日付が最後に使用された日付よりも古い場合は、日付が変更されたことがわかります。

単なるアイデア - 試したことはありませんが、理論的にはうまくいくはずです。

于 2013-08-07T12:38:05.080 に答える
1

可能であれば、ワンショット GPS リクエストを使用して時間値を取得できます。ユーザーは、受信する GPS 時刻を変更できません。許可を必要としない場合、許可を追加するのは面倒ですが、これにより、ユーザーが日付/時刻をいじることによって引き起こされる悪い動作を防ぐことができます。

于 2013-08-07T12:49:32.827 に答える
1

使用された最初の日と最後に使用された日を保存し、ACTION_TIME_CHANGED インテントをリッスンします。また、AlarmManager を使用してみてください。

または、ネットワークがある場合は、電話のデータベースに保存します。

しかし、誰かがあなたのアプリを使用するためだけに携帯電話の日付を本当に変更するかどうかを自問する必要があるでしょう. アラーム、カレンダー、他のサービスとの同期など、多くのことがひどく混乱するでしょう。現実には問題ないと思います。

于 2013-08-07T12:46:46.177 に答える
0
Event(APP_INSTALL) -> storeOnServer(INSTALL_TIME_KEY,getTimeFromServer());

Event(APP_LAUNCH) -> IF(getTimeFromServer -getStoredTime(INSTALL_TIME_KEY) >30)
  -> showTrialPeriodEndedAlert()
  -> quitApp();
于 2013-08-07T12:53:54.133 に答える