web-dev-qa-db-ja.com

アプリ内の自動更新可能なサブスクリプション

ITunesサブスクリプションに関する100万回目の質問で申し訳ありませんが、まだいくつか疑問があります。

基本的に、アプリに自動更新可能なサブスクリプションを実装していますが、正しく設定されていることを確認したいと思います。これが私が思いついたステップのリストです:

  • ユーザーがサブスクリプションを購入するたびに、レシートをサーバーに送信して検証します[.____]。
    • 領収書が有効な場合は、データベースに保存します
  • アプリケーションのロード時に、このUDIDのレシートが存在するかどうかをサーバーに確認します(これは、ユーザーが有効なサブスクリプションを持っているかどうかを確認するためです)
    • その場合は、サブスクリプションの開始日から有効期限までの日付範囲で新しいアイテムがストアに追加されているかどうかを確認してください[.____]。
      • もしあれば、それらのアイテムについて何らかの方法でユーザーに通知し、無料でダウンロードできるものとしてマークします

これらの手順は正しいですか?もしそうなら、なぜApple docは言う:

ほとんどの場合、iOSクライアントアプリケーションを変更する必要はありません。実際、非消費型製品を回復する場合と同じコードを使用して自動更新可能なサブスクリプションを回復できるため、クライアントアプリケーションがよりシンプルになりました。これについては、「トランザクションの復元」で説明しています。アプリケーションは、サブスクリプションが更新された期間ごとに個別のトランザクションを受け取ります。アプリケーションは、各領収書を個別に確認する必要があります。

私には、代わりに、私が言及したさまざまなケースすべてを処理するためのコードが必要なようです。または私はそれについて完全に間違っています。私ですか?

さらに、サブスクリプションの有効期限を知るにはどうすればよいですか?この情報をどこでも入手する方法が見つかりません。これを自分のデータベースに保存することになっていますか?

更新:

この質問を投稿してから、いくつかのことがわかりました。私が間違っている場合は、遠慮なく訂正してください。

まず第一に、私はサブスクリプションの長さを自分のデータベースのどこかに保存することになっていると思います。なぜなら、Appleのドキュメントに記載されているように、AppleのWebサービスからはサブスクリプションを取得できないからです。実際、サブスクリプションの長さごとに異なる製品IDがあるため、製品IDをサブスクリプションの長さに変換する方法が必要です。

また、Sylvian 投稿済み 自動更新可能なサブスクリプションの実装に関する詳細なので、少なくとも私の考えはそれほど欠陥がなかったと思います。

今、唯一の問題はこれです: ユーザーが有効なサブスクリプションを持っていることをどのように知ることができますか? この情報をサーバーに保存することはできますが、ユーザーを完了したトランザクションに関連付けるにはどうすればよいですか?デバイスのUDIDを保存する必要がありますか?

25
pt2ph8

私は解決策を見つけたと思います。追加のユーザー名/パスワードは必要なく、機能しているようです。

:これが不適切だと思われる場合は、コメントでその理由を説明してください。ありがとう。

基本的に、ユーザーがサブスクリプションを購入するたびに、サーバーに対してレシートを検証し、レシートデータをユーザーのデフォルトで保存します。次に、アプリを開いたとき、またはサブスクリプションがまだ有効かどうかを確認する必要があるときはいつでも、ユーザーのデフォルトから以前に保存したレシートデータを取得し、サーバーに対して検証します。

私のWebサービスは、サブスクリプションがまだ有効であるか期限切れであるか、およびサブスクリプションの長さなどの他の関連情報を返すだけです。これを行うには、通常どおりiTunesサーバーにクエリを実行し、ステータス応答がゼロ以外かどうかを確認します。 21006は、サブスクリプションの有効期限が切れていることを意味します。

8
pt2ph8

これが、アプリ内購入、特に私の会社での新しい自動再生可能製品の実装方法です。

アプリケーションはトランザクションレシートをWebサービスに送信します。正しく処理され、Appleで確認できた場合は、アプリケーションにOKを返します。その場合、ユーザーアカウント(つまりデータベース)を次のように更新しました。 「はい、彼は支払いました。彼のサブスクリプションはレシートの有効期限まで有効です」と言います。

このWebサービスのOKの後、アプリケーションは別のWebサービスを介してアカウント情報を再読み込みし、有効なサブスクリプションがあることを確認します。それはそれでした...自動再生可能な製品が登場するまで。

毎日実行されるいくつかのCRONジョブを実装する必要がありました。毎日、期限切れになるはずのパスのリストを作成し、Apple元のレシートがまだ有効かどうか:魔法彼らの答えには、フィールドlatest-receiptが埋め込まれているということです。 最新 領収書。所有しているものと同じでない場合は、サブスクリプションが自動的に更新されたことを理解し、次のcronチェックのために最新のレシートを保存し、ユーザーアカウントを更新して有効期限を延長します。

それが役に立てば幸い。

30
Sylvain

アプリにユーザー管理がある場合、つまりユーザー名/パスワードを使用してアプリを使用する場合は、現在ログインしているユーザーの購入/有効性を記録するサーバーを維持する必要があります。これは、通常のサブスクリプションおよび非消耗品の購入に適用されます。しかし...新しい自動更新可能なサブスクリプションを使用する場合、そのアプリで複数のユーザーを維持することはできません。なぜなら、同じApple IDで、この場合、つまりアプリに複数の子アカウントがあるが、同じApple-Idを使用して自動更新可能エネルギーを購入したい場合は、非常に煩わしく、より良い解決策を見つけることができました。アカウントごとのサブスクリプション。古いサブスクリプションモデルを使用する必要があると思います。新しい考えはありますか?

0
Tushar