2

質問:
iOS デバイスのどこに小さな情報 (私の場合はわずか数バイト、私の場合は 1 ビット) を保存して、アプリが電話から削除され、後で再度再インストールされた後もそれらの情報を利用できるようにすることができますか?

背景:
無料でアプリストアに入るアプリを開発しています。アプリと一緒に無料のテスト パッケージが付属しています。このテスト パッケージは、限られた期間、サーバー上の限られた数のアイテムにアクセスできるようにします。ユーザーが必要に応じて、より多くのアイテムとより長い期間の追加パッケージを購入できます。

このパッケージを使用するには、各ユーザーが自分のサーバーにアカウントを作成する必要があります。アカウントごとに 1 つの無料パッケージしか使用できないことを確認するのは簡単です。しかし、ユーザーが何百もの追加アカウントを作成できないようにする方法がわかりません。だから私はもっと欲しい:

私は、各ユーザー (各生存者) が作成するアカウントの数に関係なく、1 つの無料パッケージのみを使用できるようにしたいと考えています。

これをユーザー(生きている人)のレベルで制限することは不可能であることを私は知っています。しかし、同時に 2 つまたは 3 つ以上の iPhone を使用している人は多くないと私は信じているので、それを電話に制限することは許容されます。3 つの異なるアカウントで 3 つの無料パッケージを使用できるようにするためだけに、1 人のユーザーが 3 つの異なる iPhone で私のアプリを使用する場合、これは私には受け入れられます。

ただし、そのためには、アプリと一緒に配信された無料パッケージが既に使用されているという情報を電話のどこかに保存する必要があります。ただし、ユーザーがアプリをアンインストールして後で再インストールした場合、この情報は引き続きアプリで利用できる必要があります。そして、アプリが電話から削除された後も、この小さな 1 ビットの情報を保存する場所がわかりません。

手伝ってくれますか?

4

4 に答える 4

2

これを解決する最も簡単な方法は、iPhone の UniqueDeviceId をサーバーに保存することです。次に誰かがそのデバイスからアカウントを登録しようとしたときに、そのデバイスにすでにアカウントが作成されているかどうかを確認できます。

Apple は SDK から UDID を削除 (減価償却) したため、GitHub で入手できる OpenUDID を使用することもできます。これにより、デバイスを識別するための一意の ID が得られます。

OpenUDID-GitHub

于 2012-07-19T10:31:52.247 に答える
1

これは私がHubertSchölnastがしていることです:

  1. 私のアプリはログインが必要なので、誰もが有効なログインユーザー名とパスワードを持っている必要があります。

  2. アプリはUDIDまたはその他の代替手段の代わりにUUIDを使用しており、アプリがサーバーと通信するたびに、UUIDとユーザーのIDの両方をサーバーに送信します。

  3. サーバー側では、データベーステーブルにユーザーのIDとそのUUIDの両方を格納しています。

  4. サーバー側では、コードで、すべてのWebサービス呼び出しに対してユーザーとそのUUIDをチェックするロジックを適用します。それらがルールに違反している場合は、ルールに基づいてユーザーテーブルまたはデバイステーブルのいずれかでフラグを立てます。

それでも問題があります。アプリをアンインストールして再インストールし、毎回別のユーザー名で登録すると、識別が困難になります。しかし、それは彼らがあなたのシステムを悪用するために本当にどれだけの努力をしたいかに依存します。

私のアプリでは、ユーザーとしての登録は一般に公開されていないため、問題はありません。

お役に立てれば。

于 2012-07-19T15:00:43.000 に答える
1

私は自分で答えを見つけました。キーチェーンに保存されているデータは、アプリが削除されてもそこに残り、再インストール後に同じアプリからアクセスできます。これはまさに私が必要としているものです。
ファームウェアを完全に再インストールすることによってのみエントリを削除できますが、これにより、他のすべてのアプリの他のすべてのエントリも削除されます。人々はそれほど頻繁にそれをすることはありません、そして私は私のアプリのための追加の無料パッケージへのアクセスを得るためだけに本当にやり過ぎだと思います。これは私には受け入れられます。

Appleは、キーチェーンアクセス用のexample-appを提供しています。このexample-appの詳細は読んでいませんが、必要なものがすべて含まれていると思います:http ://developer.apple.com/library/ios/#samplecode/GenericKeychain/Introduction/Intro.html


編集:

情報を一般的なパスワードとして保存することが私の問題の最善の解決策ですが、Appleのexample-appにはバグがあります。このバグでは、一般的なパスワードを保存するための「一意のキー」として使用される間違った属性があります。キーチェーンアイテムを本当にユニークにする方法の詳細と方法については、この質問をご覧ください:キーチェーンアイテムをユニークにするもの(iOSの場合)は何ですか?

于 2012-07-19T17:30:22.633 に答える
1

iOSにはそのような場所はありません。キーチェーンを使用して、アプリが削除された場合に保持するデータを保存できます。ただし、ユーザーがデバイスをクリアすると、これらの設定が適用されます。

これを行う確実な方法はありません。フリーミアム アプリを作成する際には、時間内の使用を制限するのではなく、より多くの機能を制限する必要があります。

于 2012-07-19T10:26:47.210 に答える