ドキュメント

AppleおよびGoogleの外部購入要件への準拠

AppleとGoogleでの外部購入に関するコンプライアンス責任と、それらを満たすためにUnityが提供するSDKとWebhookツールについて説明します。
読み終わるまでの所要時間 18 分最終更新 2ヶ月前

外部購入では、Apple や Google のアプリケーション内課金ではなく、独自のウェブアウト (支払いプロバイダーなど) を通じてデジタルコンテンツを販売します。AppleとGoogleは、一部の地域でのみ、また外部購入プログラム(Apple)や外部提供プログラム(google play)など、独自のプログラムルールの下でのみ、これを許可しています。適格性、手数料、開示、トランザクション レポートは、プラットフォーム、地域、アプリケーションによって異なります。地域によっては、これらの購入要件がほとんど必要ない場合もあります。
重要
Unity はお客様に代わってプラットフォームコンプライアンスを実行しません。資格の判断、各プラットフォームのテクニカル要件とポリシー要件の遵守、必要に応じてAppleとGoogleにトランザクションを報告する責任があります。外部購入を出荷する前に、Apple と Google に直接問い合わせ、プレリリース条件 を確認してください。
独自のコンプライアンスフローのビルドをヘルプするために、Unity は SDK フックと Webhook データを提供します。このページでは、責任の分担、コンプライアンス ステップのビルド順序モデル、実行できる具体的なアクションについて説明します。
このページは、D2C(Integrate Direct-to-コンシューマー)支払いプロバイダー ワークフローの一部です。ここで説明するコンプライアンス処理を追加する前に、支払いプロバイダー購入フローを設定します。

責任分担

Unity は技術的な支援のみを提供します。支払いプロバイダーは、支払い処理、税務、紛争に関する記録商として機能しますが、AppleやGoogleプラットフォームのレポートはハンドルしません。プラットフォーム コンプライアンスはお客様の責任であり、Unity がお客様をプラットフォーム プログラムに登録することはありません。

Unityの技術的な促進

支払いプロバイダーによる購入が完了すると、Unity がユーザーに代わってチェックアウト URL を開きます。デフォルトでは、デバイスの外部ブラウザーで開きます。アプリケーション内プレゼンテーション (
CheckoutPresentationMode.WebView
) を選択すると、Unity は代わりにそれをアプリケーション ブラウザーで開きます。Unity が注文を処理する仕組みの詳細については、Unity が注文を作成し開く方法を参照してください。
Unity は Apple の外部購入通知や Google の外部リンク API を呼び出しません。また、Unity がユーザーの適格性を判断することはありません。これらのプラットフォーム API は、役割の説明に従って自分で呼び出します。

お客様の責任

Unity は技術的な支援のみを提供します。以下のタスクを担当します。
  • アプリケーションと地域が各プラットフォームの外部購入プログラムの対象となるかどうかを決定します。
  • Appleの
    ExternalPurchaseClient
    とGoogleの
    ExternalBillingProgramClient
    により、購入の開始前に独自の適格性チェックと開示チェックを実行できます。
  • AppleまたはGoogleが必要とするトランザクション トークンを、各プラットフォーム独自のAPIでAcquireおよびレポートします。

Unity が注文を作成および開始する方法

通常、支払いプロバイダーの購入は
PurchaseProduct(catalogListingId)
という 1 回の呼び出しで開始します。
catalogListingId
リモートカタログでオファーを示します。購入には 2 つの基本的なステップがあり、最初のステップは自分で実行できます。
  • GenerateURL(catalogListingId, tokens)
    はオーダーを作成し、チェックアウト URL をオープンせずに返します。
  • PurchaseProduct(catalogListingId)
    によってチェックアウトが開きます。同じリストについてすでに
    GenerateURL
    を呼び出している場合は、その順序が再利用されます。そうでない場合は、トークンなしで注文自体を作成し、それを開きます。
GenerateURL
は、URL を正面から必要とする場合(開示または描画する場合)や、注文にレポートトークンをアタッチする必要がある場合にだけ必要です。それ以外の場合は、
PurchaseProduct
を直接呼び出します。

コンプライアンスフローに必要なものを決定する

残りのセクションは独立しています。以下の表に、アプリケーションとプラットフォームに適用する手順を示します。

必要な場合は

これを行います。

セクション

アプリケーション内での独自の適格性ルールの適用各購入の前に実行されるコンプライアンスコールバックの登録コンプライアンスチェックで購入をゲートする
購入が開く前にチェックアウト URL を表示または開示する
GenerateURL
を呼び出して URL を取得し、
PurchaseProduct
を呼び出して URL を開く
チェックアウト URL を表示または描画する
AppleまたはGoogleに外部トランザクションをレポート
GenerateURL
でトークンをアタッチ、設定、添付、オーダーWebhookから読み戻す
トランザクショントークンのアタッチ、設定、添付、レポート

コンプライアンスチェックによる購入のゲート

このステップは任意です。アプリケーション内で独自の適格性ルールを適用する場合にのみ追加します。
購入に進む前に、コンプライアンスコールコールバックを登録して独自の適格性ルールを適用します。
PurchaseProduct
(または
Purchase
) を呼び出すと、Unity はまずコールバックを実行し、購入する
Cart
を公開する
PaymentProviderComplianceContext
を渡します。コールバックが
false
を返す (またはスローする) と、購入は
PurchasingUnavailable
で失敗し、注文は作成されません。
  1. プレイヤーがコンプライアンス チェックに合格したかどうかを示す
    Task<bool>
    を返す関数を定義します。
    Task<bool> RunComplianceCheckAsync(PaymentProviderComplianceContext context){ const ブーリアン allow = true; return Task.FromResult(allow);}
  2. Payment Providers 購入サービスに機能を登録し、購入が開始されたときに Unity が機能を呼び出すようにします。
    m_PurchasingService.PaymentProviders?.SetComplianceCheck(RunComplianceCheckAsync);
  3. チェック内のプラットフォーム クライアントを使用して、各プラットフォームが準拠するために必要な API を呼び出します。
    • Apple:
      ExternalPurchaseClient
      を使用してAppleの外部購入APIにアクセスします。
    • Google:
      ExternalBillingProgramClient
      を使用して Google の外部課金 API にアクセスします。
コンプライアンス コールバックは、
PurchaseProduct
Purchase
に対してのみ実行されます。
GenerateURL
はコールバックによってゲートされず、即座にオーダーを作成します。そのため、開示またはトークンの
GenerateURL
を呼び出す場合は、その呼び出しの前に適格性チェックを実行します。

チェックアウト URL を表示または描画する

プラットフォームによっては、プレイヤーが先に進む前に外部購入 URL をディスプレイまたは開示する必要がある場合や、独自のウェブビューでチェックアウトを描画する場合があります。いずれの場合も、
GenerateURL
を呼び出して URL を開かずに取得します。
string url = await m_PurchasingService.PaymentProviders.GenerateURL(catalogListingId);// Display or disclose the URL, then call PurchaseProduct to open the checkout.
その後、
PurchaseProduct(catalogListingId)
は複製を作成する代わりに、すでに作成済みの注文
GenerateURL
を再利用します。
購入の事前準備のために
GenerateURL
を呼び出さないでください。URL またはトークンが必要ない場合は、
PurchaseProduct
を直接呼び出します。注文を作成して開きます。冗長な
GenerateURL
(特に忘れた
await
) はレースウィンドウを追加するだけです。

トランザクショントークンのアタッチ、設定、添付とレポート

このステップは、Apple または Google が外部トランザクションのレポートを要求している場合に必要です(これはプログラムと地域によって異なります)。
Apple と Google では、各外部トランザクションをサーバ API を通じてレポートする必要があります。プラットプラットフォームから不透明な透明なトランザクショントークンを取得し、Unity の注文にアタッチ、設定、添付し、ウェブフックで受け取り、レポートを提出できます。トークンは自分で生成します。Appleトークンは
ExternalPurchaseClient
から取得され、Googleトークンは
ExternalBillingProgramClient
から取得されます。
PurchaseProduct
はトークンを受け付けないため、独自のオーダーを作成する購入にはトークンは添付されません。トークンを注文に取り込むには、まず
GenerateURL(catalogListingId, tokens)
を呼び出します。その後、同じリストに対する後続の
PurchaseProduct
では、そのトークンを持つ順序が使用されます。
await m_PurchasingService.PaymentProviders.GenerateURL(catalogListingId, tokenList);m_PurchasingService.PurchaseProduct(catalogListingId);
Unity はトークンを検査や検証を行わずに順序とともに保存し、Webhook の順序でトークンを表示します。Order API 反応では返されません。
レポート トークンをアタッチ、設定、添付すると、Unity がトークンを返す場所は注文 Webhook のみになります。購入処理用のWebhookまたはCloud Codeモジュールの設定を参照してください。

Webhook ペイロードのトークン

注文 Webhook には、
data
の下に
externalTransactionTokens
配列が含まれます。各エントリーには、トークンと、それがターゲットとするストアが含まれます。
{ "eventType": "order.paid", "data": { "id": "...", "playerId": "...", "status": "paid", "externalTransactionTokens": [ { "store": "apple", "token": "opaque-apple-transaction-token", "type": "acquisition" }, { "store": "google", "token": "opaque-google-transaction-token" } ] }}

store

string
必須
アプリストアします。
apple
または
google
のいずれか。トランザクションのレポート先を指定します。

token

string
必須
外部の購入トークンまたはトランザクショントークン。Unity は検査せずにそれを格納および転送します。

type

string
Apple専用トークンのカテゴリ。
acquisition
services
、または
linkOut
のいずれか。Google では省略。
1 回の Apple 外部購入で、地域に応じて 2 つのトークンタイプ (EU (
acquisition
トークン) と
linkOut
トークン (日本) など) が必要になる可能性があるため、注文ごとに最大 2 つのトークンを提供できます。関連するプログラムに従って各トークンをレポートします。Unity は
type
には作用しません。
これらのトークンを使用して、各プログラムで必要に応じてAppleの外部Purchase Server APIまたはGoogleの
externalTransactions
APIを通じてトランザクションを自己レポートします。

次のステップ

このページは、IAPでD2C支払いプロバイダーを設定するワークフローの一部です。このワークフローを続行するには、以下のオプションのいずれかを選択します。