web-dev-qa-db-ja.com

Appleアプリ内購入(IAP)の払い戻しをiOSアプリに通知する方法は?

Apple iOS IAPがアプリに正常に実装され、サンドボックスでテストされています。問題なく動作します。

ユーザーがIAPで何かを購入し、それをアプリにダウンロードして、Apple=にクレームして払い戻しを受ける)ことができるのではないかと心配しています。払い戻しがアプリに報告される明確な方法はありません。 「復元」操作中に受け取る製品のリストから単に除外するだけですか?払い戻しが発生したときにSKPaymentTransactionObserverに非同期的に表示される、文書化されていないトランザクションタイプはありますか?

現在、私は復元を行う前にユーザーのIAPトランザクションを削除する必要があること、および払い戻しされたものは復元されたトランザクションのリストに含まれないことを前提として操作しています。これは正しい方法ですか?サンドボックスでこれをテストする方法はありますか?

運用環境で払い戻しを見た人はいますか?

47
Craig

アプリ内購入ガイド は、サブスクリプションの「キャンセル」の概念について説明しています。これは私がこの話題について話し合っているのを見た唯一の場所です。

詳細 キャンセル日フィールドについては、App Storeのレシート検証ドキュメントにも記載されています。

cancellation_date

領収書をデコードした後、次のことを伝えるキャンセル日を取得できます。

Appleカスタマーサポートによってキャンセルされた取引の場合、キャンセルの日時。

9
aradil

Apple Developer Relations本日(2018年12月6日)から返信がありました):

ヨハネスこんにちは

質問への回答として、残念ながら、ユーザーがApple Careに連絡し、消耗品のアプリ内購入の払い戻しを受け取ったことを検出するためのサポートされた手段はありません。唯一のオプションアプリ内購入のユーザーに払い戻しが提供されたことを検出するために、アプリで使用できるようにするAPIのAPI拡張リクエストを送信することをお勧めします。現在、このサポートは現実的には、自動更新可能なサブスクリプションのアプリ内購入を提供します。

Apple Developer Bug Report Web page-http // bugreport.Apple.comを使用して、機能強化リクエストを送信できます。

これは拡張リクエストタイプの問題であるため、今後の問題で使用するために、このインシデントがアカウントから請求解除されるように手配します。

だから我々はそれを持っています。

6

戦略は次のとおりです。

  1. ユーザーアカウントに関連付けられたDBにlatest_receipt( "MIIUJgYJKoZIhvc ..." base64)フィールドを保存します。

  2. 保存したlatest_receiptフィールドからbase64レシートを送信することにより、毎日Appleをクエリしてすべてのレシートを検証します。

  3. 領収書で、cancellation_dateフィールドがあるかどうかを確認します。見つかった場合は、 documentation に従って扱います。

キャンセルされたレシートは、購入したことがない場合と同じように扱います。

サブスクリプションの更新もチェックするのと同じ方法(expires_date_msフィールドをチェック)。

4
Kirill Groshkov

払い戻しは行われますが、アプリはそれらの通知をまったく受け取りません。アプリ内購入、アプリのダウンロード、その他のiTunesコンテンツのいずれであっても、ユーザーは払い戻しを要求してもコンテンツを使用できます。

4
Benjamin Mayo