質問

しばらくしてから行動を起こす必要があるアプリがあります。たとえば、ユーザーが数週間でアプリ内にいなかった場合、ユーザーが最終的にアプリを起動するときに、このアプリをインストールしたときに与えられた特別なコードを入力するように依頼する必要があります。 (これは社内のアプリであり、セキュリティの懸念のためにこれを行う必要があります)

NSDate Date]メソッドを使用して、ユーザーがログインしてデータベースに保存する日付を取得しています。次回彼らがアプリを開いて、最後のログイン以来の期間を確認したときに、この保存された日付を比較します。問題は、[NSDATE日付]が、ネイティブ設定アプリのユーザーが手動で変更できる時間設定によって影響を受ける時間を与えることです。おそらくわかるように、これは私の状況に多くの問題を引き起こします。ユーザーが3週間の不活動の後に特別なコードを配置すると想定している場合、ネイティブ設定アプリまたはさらに悪いことに、アプリにこの画面を表示することができます。それは彼の活動から3週間以内になります。

「ユーザー時間」の代わりに「システム時間」を取得する方法はありますか? mach_absolute_time()を調べましたが、これはデバイスの再起動後にリセットされます。私が比較しているのは非常に大きいので、私が比較しているので、それまでにデバイスが再起動されていた可能性があります。また、ネットワーク接続を使用してアプリの外側のサーバーから時間を取得することも考えましたが、多くのユーザーがiPadを使用しているWiFiにアクセスできません。他に何も見つからない場合、それが私の最後のリゾートソリューションになります。使用中の位置のため、私はデバイス自体ですべてを使用しようとしています。

ここで何かシンプルなものを見落としていますか?これは、問題があまりにも単純すぎて答えを得ることができないようです。正しい方向に向かって私を導いてください。前もって感謝します。

役に立ちましたか?

解決

時間のためにリモートサーバーをクエリしてみませんか?多くのNTPサーバーについては、独自のサーバー上のPHPスクリプトに簡単なHTTP要求を行います。もちろん、アプリが問題になる可能性のあるインターネットに接続されていない可能性が高い場合は、サードパーティの時間があれば、ユーザーがクロックで再生しているかどうかを非常に簡単に推測できます。

他のヒント

これがInhouseアプリの場合(Applesの承認プロセスに制約されていないため)、アプリが常にアクティブになります。何らかの「未使用の」カウンターを更新することができます。 VoIPアプリは、デバイスの再起動後にOSによって再起動されます。

しかし、もちろん、それはいくらかバッテリーを排出します。

どちらか:実際の時間をアプリの重要な機能にする。このようにして、ユーザーはデバイスの時間を最新の状態に保ち、3週間戻ることができません

または:アプリがユーザーに通知する前に、有効期限が切れたようにコードをマークし、この情報を保存します。これにより、ほとんどのユーザーがタイムバックを設定することが止まります。ほとんどの人は1回か2回試みます。アプリが無効にしていることを確認し、あきらめます。

また、最後の成功した実行のタイムスタンプを保存することもできます。それが将来の合理的な時間枠以上である場合(夏/冬の時間を覚えておいてください)、それを「ハックの試み」と考えてください。そのタイムスタンプにCRCチェック(またはあなたが思いついたあいまいなアイデア)を入れて、それを保存すると、多数のスクリプトの子供を止めます。

アプリに入れたかもしれないあらゆるトリックを積極的に検索する頑固なハッカーを止めることはできません。 「平均的な」ユーザーに集中するだけです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top