すべての記事
Deep dive読了まで 8 分

Family Sharing の返金は 1 件の支払いを取り消すだけですが、ほかの 5 人はアプリを使い続けられます。その人たちを止められるのはあなたのサーバーだけです

Family Sharing の返金は 1 件の支払いを取り消しますが、最大 5 人の家族が有料機能を使い続けられる場合があります。Apple は REVOKE を送信し、そのアクセスを終了させるのはあなたのサーバーだと想定しています。ここでは家族共有の返金の仕組みと、その 1 件がいくらかかるのかを説明します。

6 人分にセットされたダイニングテーブルの中央に置かれた 1 枚の紙のレシート。Family Sharing の返金の背後にある 1 件の支払いが 6 人分をカバーしうることを表しています

要点

  • Apple はすべての家族共有トランザクションに FAMILY_SHARED の inAppOwnershipType を、すべての直接購入に PURCHASED を付与します。このフィールドは非消耗型アプリ内課金と自動更新サブスクリプション、つまり Family Sharing が対応する 2 つの製品タイプにのみ現れます。
  • 1 件の家族共有可能な購入は最大 6 人、購入者本人と 5 人の家族に権利を与えられるため、1 件の支払いが、製品の提供にあなたが費やす計算資源、API 呼び出し、ストレージ、支払いの 6 人分を動かすことになります。
  • 共有購入を買った本人に Apple が返金すると、REVOKE の App Store Server Notification が送信されます。そして、そのアクセスを、家族共有されたすべてのコピーを含めて取り消すのは、あなたのサーバーの仕事です。Apple はお金を返しますが、権利を終了させてはくれません。
  • REVOKE の中の FAMILY_SHARED トランザクションが revocationDate を持つのは、その取り消しが購入者への返金によって引き起こされた場合だけです。家族メンバーが単にグループを抜けただけなら、同じ REVOKE が revocationDate なしで届きます。これは Apple 自身のエンジニアによる説明です。
  • Apple は新しい家族共有の購入を、家族メンバーに届くまで意図的に約 1 時間遅らせます。これは、ほかの誰かがアクセスを得る前に、購入者が共有を無効化する時間を確保するためです。
  • App Store Connect でアプリ内課金の Family Sharing を有効にすると、それを元に戻すことはできません。いったん製品が共有可能になると共有可能なままになり、以降あなたの返金処理は FAMILY_SHARED トランザクションを考慮しなければなりません。
  • 消耗型は家族共有されることが決してないため、家族メンバーが CONSUMPTION_REQUEST を引き起こしたり、あなたの消費レポートに現れたりすることはありません。Family Sharing の返金に関わるのは、非消耗型と自動更新サブスクリプションだけです。

Family Sharing グループでの 1 件の購入は、あなたのアプリを 6 人に手渡すことがあります。支払ったのはそのうちの 1 人です。残りの 5 人は財布を開いてもいないのに、Apple はそれでもあなたのアプリが全員に対して動くことを期待します。それが、アプリ内課金で Family Sharing をオンにした瞬間にあなたが同意する取り決めです。それがまた、Family Sharing の返金が通常の返金とは別物である理由でもあります。購入者にお金が戻るとき、その 1 つのアカウントについては販売が取り消されますが、あなたが最大 5 人の他の人に与えたアクセスは、ひとりでにオフになったりはしません。それをするのはあなたのサーバーであり、購入者だけを監視するように書かれていたなら、そうはなりません。

全体像をひとつにまとめます。ここでは、Apple が共有購入をどう印付けするか、購入者を家族と区別する唯一のフィールド、Apple が REVOKE を送るのは正確にいつでどう読むか、返金と単なる家族からの離脱を分ける静かな細部、そして一度も支払っていない人たちにすでに費やした計算資源を数え入れたときに、共有の返金が実際にいくらかかるのかを見ていきます。

Family Sharing が配るもの、そして何人に配るのか

製品の Family Sharing をオンにすると、誰があなたの有料顧客なのかが変わります。Apple の家族グループは最大 6 人、1 人の主催者と最大 5 人のメンバーを含められます。グループの誰かが家族共有可能な製品を買うと、グループ全員がそれにアクセスできるようになります。彼らは支払いません。あなたの売上には現れません。彼らはただ、有効な権利を持ってあなたのアプリに現れます。Apple が全員に、同じ購入を指し示すトランザクションを発行するからです。

共有できる製品タイプは 2 つだけで、消耗型はその 1 つではありません

Family Sharing が対象とするアプリ内課金はちょうど 2 種類、非消耗型と自動更新サブスクリプションです。消耗型、つまりコインやクレジットの製品は決して共有されません。だからこそ家族メンバーが CONSUMPTION_REQUEST を引き起こしたり、あなたの消費レポートに現れたりすることはありません。あなたのアプリが消耗型しか売っていないなら、Family Sharing の返金はあなたの問題ではありません。買い切りのロック解除や定期プランを売っているなら、それはあなたの問題です。

購入者と受益者を区別するフィールド

Apple が発行するすべてのトランザクションは inAppOwnershipType を持ちます。値は 2 つです。PURCHASED は、このアカウントが製品の代金を支払い、キャンセルや返金の要求を含めてそれを管理できることを意味します。FAMILY_SHARED は、このアカウントが誰か他の人の購入を通じてアクセスを得ている家族メンバーであることを意味します。どちらもその人にあなたの製品を使う権利を与えます。支払ったのは片方だけです。このフィールドは StoreKit トランザクション、レシート、そして App Store Server API にあるので、あなたがすでに権利を確認している場所ならどこでも読み取れます。

inAppOwnershipTypeどのアカウントか購入を管理・返金できるか支払ったか
PURCHASED製品を購入したアカウントはいはい
FAMILY_SHARED共有アクセスを持つ家族メンバーいいえいいえ

Family Sharing の返金があなたのサーバーに届くまで

共有購入の返金は、あらゆる Apple の返金と同じように始まります。それができる唯一の人である購入者が、Apple にお金を返すよう求めます。Apple が決定します。Apple が認めると、購入者の購入は取り消され、Apple はあなたのサーバーに REVOKE の App Store Server Notification を送ります。この通知は V1 と V2 のどちらもそれを伝えます。REVOKE は、その背後にある権利が、そして家族共有されたすべてのコピーが、今や無効になったという唯一の合図です。

1 件のトランザクションを取り消すのではなく、履歴全体を読み直す

REVOKE に関する Apple の指針ははっきりしています。それを単一のスイッチとして扱ってはいけません。REVOKE を受け取ったら、その顧客のトランザクション履歴全体をたどり、権利をゼロから再構築してください。1 人が、同じまたは別の製品を与える複数のトランザクションを持ちうるからです。通知に名前が挙がったトランザクションだけを取り消すと、返金された家族メンバーに有効なアクセスを残してしまうか、まだ有効な 2 つ目の権利を持つ人を締め出してしまうか、どちらかになりえます。毎回、全体像を再構築してください。

6 本の同じ真鍮の鍵が並ぶリングから 1 本の真鍮の鍵を持ち上げている手。Family Sharing の返金の後に、1 人の家族メンバーの共有アクセスを取り消すことを表しています

返金と家族の解散を分ける唯一の細部

ここに、チームがデバッグに午後をまるごと費やす落とし穴があります。REVOKE は FAMILY_SHARED トランザクションについて 2 つのまったく異なる意味を持ちえます。そしてそれらを見分ける方法は、ときに単に存在しないフィールドです。購入者が返金を受けると、FAMILY_SHARED トランザクションには revocationDate が付いてきます。家族メンバーが単にグループを抜けただけのときは、同じ種類の REVOKE が revocationDate を一切伴わずに届きます。Apple の商取引エンジニアが開発者フォーラムで直接そう述べています。どちらの場合もアクセスは取り消しますが、日付付きのものだけが返金であり、返金だけが支払いも取り消したものです。

共有の返金が実際にあなたにいくらかかるのか

お金の流れをたどってください。ここが Family Sharing がひそかに計算を変える場所だからです。通常の返金は 1 件の販売を取り消します。Apple は代金を購入者に返し、手数料を戻すので、ストア側はほぼ差し引きゼロになります。決して戻ってこないのは、あなたが製品を提供するためにすでに費やしたものです。Family Sharing では、あなたはそれを 1 回分だけ費やしたのではありません。最大 6 人分を費やしたのです。購入者と最大 5 人の家族が、それぞれあなたの計算資源を動かし、あなたの API を呼び、あなたのストレージを埋め、あなたが資金を出す支払いを引き出しました。すべては 1 件の支払いを頼りにしてです。

さて、購入者が返金します。その 1 件の支払いが取り消されます。家族メンバー全員のアクセスも同じ瞬間に終わるべきです。彼らに提供することを正当化していたもの、つまり 1 件の有料購入がなくなったからです。あなたのサーバーが PURCHASED トランザクションだけを取り消して FAMILY_SHARED のものを有効なまま残すと、最大 5 人があなたの有料機能を無料で使い続け、あなたは彼らに提供するために支払い続け、しかも請求できるものはシステムに何も残っていません。それは丸め誤差ではありません。あなたが今返したばかりの販売の、5 倍の提供コストです。

共有の返金で何を取り消すか誰がアクセスを失うか何に払い続けるか
トランザクション履歴全体購入者と家族メンバー全員何もなし、全員のアクセスが終わる
PURCHASED トランザクションだけ購入者ひとりだけ最大 5 人の家族メンバー、依然としてあなたの計算資源、API、ストレージ、支払いを使う
何もなし、REVOKE を見逃したから誰も失わない購入者と最大 5 人のメンバー、全員無料

サブスクリプションは漏れを継続的にする

非消耗型なら、取り消されなかった家族メンバーは、あなたが気づくまで続く一度きりの損失です。自動更新サブスクリプションではもっと悪くなります。権利がすでに継続的だったからです。サブスクリプション注文の返金は、グループ全体の共有を終わらせるべきですが、有効なまま残された家族メンバーは、あなたが締め出しに失敗したすべての請求期間で有料ティアを保ち続けます。修正方法は同じで、すべての REVOKE で履歴全体から権利を再構築することですが、それを怠るコストは積み重なっていきます。

正しく実装し、実際の返金が起きる前にテストする

ここに作るべき凝ったものは何もありません。仕事の全体は、アクセスを購入者ではなく権利に紐づけること、そしてすべての REVOKE でそのアクセスを再構築することです。

  • アクセスを、単一の購入者アカウントではなく、トランザクションとその inAppOwnershipType に紐づけて保存してください。そうすれば FAMILY_SHARED トランザクションはそれ自体でアクセスを与え、それ自体で取り消せます。
  • どの REVOKE 通知でも、名前の挙がった 1 件のトランザクションをオフにするのではなく、顧客のトランザクション履歴全体を読み直し、権利を再計算してください。
  • revocationDate を持つ FAMILY_SHARED トランザクションは返金として扱い、そのメンバーのアクセスを終了させてください。revocationDate を持たないものは家族の離脱として扱い、それも終了させてください。
  • 真新しい共有購入を急いで提供に回さないでください。Apple は購入者が引き返せるように約 1 時間それを保留するので、購入のタップで付与するのではなく、Apple が実際に発行するトランザクションを尊重してください。
  • 予行演習してください。Apple の Testing Family Sharing ツールは共有トランザクションをシミュレートでき、サンドボックスの返金は本番サーバーが受け取るのと同じ REVOKE を発火させます。

そうすれば Family Sharing の返金は取るに足らない出来事になります。購入者はお金を受け取り、グループ全体が同じ拍子でアクセスを失い、あなたは一度も支払っていなかった人たちに提供するために払い続けるのをやめられます。

よくある質問

inAppOwnershipType とは何で、その値は何ですか?
inAppOwnershipType は、Apple がすべてのアプリ内課金トランザクションに付けるフィールドで、2 つの値を持ちます。製品を購入したアカウントには PURCHASED、誰か他の人の購入を通じてアクセスを得ている家族メンバーには FAMILY_SHARED です。これは非消耗型と自動更新サブスクリプション、つまり Family Sharing が対応する製品タイプにのみ現れます。
購入者が返金を受けたとき、Apple は家族メンバーのアクセスを自動的に取り消しますか?
いいえ。Apple は購入者の支払いを取り消し、あなたのサーバーに REVOKE の App Store Server Notification を送りますが、その権利を、家族共有されたすべてのコピーを含めて取り消すのはあなたのサーバーの仕事です。REVOKE に対して行動しなければ、家族メンバーは返金の後もアクセスを保ち続けます。
Family Sharing の返金を、家族メンバーがグループを抜けたのと、どう見分けますか?
FAMILY_SHARED トランザクションに revocationDate があるかを確認してください。取り消しが購入者への返金によって引き起こされた場合、そのトランザクションは revocationDate を持ちます。家族メンバーが単にグループを抜けただけのときは、REVOKE が revocationDate なしで届きます。どちらの場合も権利は終了しますが、支払いを取り消したのは日付付きのものだけです。
1 件の家族共有された購入は何人まで使えますか?
最大 6 人、主催者と最大 5 人の家族メンバーです。したがって 1 件の支払いが 6 人にあなたの製品への権利を与えられるため、購入者のトランザクションだけを取り消すと、共有の返金は最大 5 人をあなたの有料機能に取り残しかねません。
アプリ内課金の Family Sharing を有効にした後で無効にできますか?
いいえ。App Store Connect でアプリ内課金の Family Sharing を有効にすると、それを元に戻すことはできません。いったん製品が共有可能になると共有可能なままなので、あなたの返金処理はその時点から FAMILY_SHARED トランザクションを考慮しなければなりません。
消耗型の購入は家族と共有されますか?
いいえ。Family Sharing が対象とするのは非消耗型と自動更新サブスクリプションだけです。消耗型は決して共有されないので、家族メンバーが CONSUMPTION_REQUEST を引き起こしたり、あなたの消費レポートに現れたりすることはありません。

出典と参考資料

RefundHalt

App Store と Google Play の返金を自動処理

続きを読む

次の返金リクエストは、すでに向かってきています。

異議を申し立てられなかった返金について、もう 1 通のサポートメールを読む時間で RefundHalt を設定できます。