2016-04-07 3 views
3

私のアプリでは、7日間のオフラインでの無料使用を無料で許可したいが、 7日後にサブスクリプションを購入します。だから基本的に、私はインストールから7日後に彼をロックしたい。問題は、ユーザーが非常によくシステム時間を変更し、アプリを騙すことができるということです。また、サブスクリプションの購入時を除いて、アプリケーションが完全にオフラインで動作するはずなので、私はサーバーを権限として使用できません。Android:ユーザーが一定のサービスを実行せずにシステム時刻を変更したかどうかを検出する方法

私はバックグラウンドサービスを実行して、システムの時間変更を追跡することができますが、私はそれをやりたくありません。 デバイスが7日間完全にオフラインであっても機能するストレートなソリューションはありますか?

+1

[ユーザーがデバイスの時計時刻を変更したときに検出する方法はありますか?](http://stackoverflow.com/questions/15544996/is-there-a-way-to-detectユーザーが変更した時刻にデバイスを変更したとき) – F43nd1r

+0

このソリューションは機能しますが、基本的にデバイスで発生するすべての時間の変化を把握したくありません。また、デバイスがルートになっていて、コマンドラインからユーザを変更したり、ユーザがセーフモードでシステム時刻を変更したりすると、意図が受信されないことがあります。私が間違っていると私を訂正してください –

+0

根付いたデバイスに安全性がありません。期間。あなたが私を信じていないならば、xposedを見てください。 – F43nd1r

答えて

6

あなたが共有優先して現在の時間を節約することができますし、サンプリングし、それを毎回比較それ。古いサンプルを入手した場合、ユーザーは時間を逆方向に変更しました。

+1

これはとても悪い解決策です。ユーザーはアプリケーションデータをクリアして別の無料の7日間を取得できます。 – vilpe89

+1

@ vilpe89ユーザーがアプリケーションデータを消去した場合、アプリケーションの使用を続けるためには、オンラインにする必要があります(サーバーから開始日を取得する必要があります)。私にとっては良い考えです。 – Sevle

+0

私はそれがunbrekableであると言っているわけではない、SharedPreferencesは安全ではなく、操作することができます。それにもかかわらず、それは簡単な回避策です。 – Sevle

1

使用するリモートクロック、でもシンプルな所望の時間間隔でモバイルからサーバーの時間を読んで、あなたのアプリの時計のために、これらの番号を使用するため

+0

はい、これは良い解決策であり、それはそのようなユースケースに対して最初にできることです。問題は、ここでは、アプリはオフラインで作業する必要がありますが、ユーザーがオンラインになるために必要なのは、購読を購入する必要があるときだけです。だから、インターネットに接続していないユーザーは許可されたシナリオです –

1

このように私はこれを解決するつもりですが、これは解消できませんが、大半のユーザーにとっては有効です。

私はトライアルのためにサインインしている間、私はネットワーク時間を得て、プリファレンスでstart_timeとしてそれを保存します。次に各アプリの起動とアプリの再開で私はcurrent_timeを読んで、prefsに書き込みます。 prefのcurrent_timeがデバイスの時刻よりも大きくなると、アプリがロックされます。環境設定がないと、私は@Zachが提案したようにオンラインになるように頼みます。

私は、プリファレンスに暗号化された形式でデータを保存しています。

これはapkを逆コンパイルしてアルゴリズムと鍵を推測する難読化されたコードを読むことができますが、私はそのアプリのコンテンツの価値がそれほど高くないとは思えない。

関連する問題