Unity SDKでモバイルアプリ内で購入を行う
モバイルアプリ内にペイウォールを表示することは、ユーザーにプレミアムコンテンツやサービスへのアクセスを提供するための重要なステップです。ただし、ペイウォールビルダーを使ってペイウォールをカスタマイズしている場合は、ペイウォールを表示するだけで購入処理が完結します。
ペイウォールビルダーを使用しない場合は、.makePurchase() という別のメソッドを使って購入を完了し、対象のコンテンツをアンロックする必要があります。このメソッドは、ユーザーがペイウォールを操作して購入を進めるための入口となります。
ペイウォールに購入しようとしているプロダクトに対して有効なプロモーションオファーが設定されている場合、Adaptyは購入時に自動的にそのオファーを適用します。
初回オファーが自動的に適用されるのは、ペイウォールビルダーで設定されたペイウォールを使用している場合のみです。
それ以外の場合は、iOS での初回オファーの適用資格をユーザーごとに確認する必要があります。このステップを省略すると、リリース時にアプリが審査でリジェクトされる可能性があります。また、初回オファーの対象となるユーザーに通常価格が請求されてしまう場合もあります。
初期設定をすべてのステップを漏らさず完了していることを確認してください。設定が完了していないと、購入の検証ができません。
購入を行う
ペイウォールビルダーを使用していますか? 購入は自動的に処理されるため、このステップは省略できます。
ステップバイステップのガイドをお探しですか? エンドツーエンドの実装手順については、クイックスタートガイドをご確認ください。
using AdaptySDK;
void MakePurchase(AdaptyPaywallProduct product) {
Adapty.MakePurchase(product, (result, error) => {
switch (result.Type) {
case AdaptyPurchaseResultType.Pending:
// handle pending purchase
break;
case AdaptyPurchaseResultType.UserCancelled:
// handle purchase cancellation
break;
case AdaptyPurchaseResultType.Success:
var profile = result.Profile;
// handle successfull purchase
break;
default:
break;
}
});
}
リクエストパラメーター:
| パラメーター | 必須/任意 | 説明 |
|---|---|---|
| Product | 必須 | ペイウォールから取得した AdaptyPaywallProduct オブジェクト。 |
レスポンスパラメーター:
| パラメーター | 説明 |
|---|---|
| Profile | リクエストが成功した場合、このオブジェクトがレスポンスに含まれます。AdaptyProfile オブジェクトは、ユーザーのアクセスレベル、サブスクリプション、アプリ内の買い切り購入に関する包括的な情報を提供します。 アクセスレベルのステータスを確認して、ユーザーが必要なアクセス権を持っているかどうかを判断してください。 |
注意: Apple の StoreKit バージョンが v2.0 未満、かつ Adapty SDK バージョンが v2.9.0 未満の場合は、代わりに Apple App Store 共有シークレットを提供する必要があります。この方法は現在 Apple によって非推奨とされています。
購入時にサブスクリプションを変更する
ユーザーが現在のサブスクリプションを更新する代わりに新しいサブスクリプションを選択する場合、動作はアプリストアによって異なります。
- App Storeでは、サブスクリプショングループ内でサブスクリプションが自動的に更新されます。ユーザーがあるグループのサブスクリプションを購入した際に、別のグループのサブスクリプションがすでに有効な場合、両方のサブスクリプションが同時に有効になります。
- Google Playでは、サブスクリプションは自動的に更新されません。以下に説明するように、モバイルアプリのコードで切り替え処理を管理する必要があります。
Androidで別のサブスクリプションに切り替えるには、追加パラメーターを指定して .makePurchase() メソッドを呼び出します。
// Create subscription update parameters
var subscriptionUpdateParams = new AdaptySubscriptionUpdateParameters(
"old_product_id", // Product ID of the current subscription
AdaptySubscriptionUpdateReplacementMode.WithTimeProration
);
Adapty.MakePurchase(product, subscriptionUpdateParams, (profile, error) => {
if(error != null) {
// Handle the error
return;
}
// successful cross-grade
});
追加のリクエストパラメーター:
| パラメーター | 必須/任意 | 説明 |
|---|---|---|
| subscriptionUpdateParams | 必須 | AdaptySubscriptionUpdateParameters オブジェクト。 |
サブスクリプションと置き換えモードの詳細については、Google Developerのドキュメントをご参照ください。
- 置き換えモードについて
- 置き換えモードに関するGoogleの推奨事項
- 置き換えモード
CHARGE_PRORATED_PRICE。注意: このメソッドはサブスクリプションのアップグレードにのみ使用できます。ダウングレードはサポートされていません。 - 置き換えモード
DEFERRED。注意: 実際のサブスクリプション変更は、現在のサブスクリプションの請求期間が終了した時点でのみ発生します。
iOSでオファーコードを利用する
オファーコードについて
オファーコードを使うと、特定のユーザーに割引や無料トライアルを提供できます。自動適用される通常のオファーとは異なり、オファーコードはメールキャンペーン、SNS、印刷物などアプリの外で配布されます。ユーザーはApp Storeでコードを入力するか、引き換えURLにアクセスするか、アプリ内ダイアログを通じて利用できます。
オファーコードを設定するには、App Store ConnectでサブスクリプションをのページにあるOpening a subscription, Offer Codes セクションを開きます。オファーコードには3種類あります:
- Free — 一定期間サブスクリプションが無料になり、次の更新から通常料金が適用されます。
- Pay as you go — 一定期間、各請求サイクルごとに割引価格で支払い、その後は通常料金で更新されます。
- Pay up front — オファー期間全体に対して割引価格を一括で支払い、その後は通常料金で更新されます。
オファーコードをAdaptyに追加する必要はありません。Appleはオファー期間中のすべてのトランザクションにオファーコードカテゴリのタグを付けます。これには最初の引き換えとその後の割引更新がすべて含まれます。Adaptyはそのタグを検出し、各トランザクションをオファーカテゴリ offer_code として記録します。オファー期間が終了してサブスクリプションが通常料金で更新されると、タグは付かなくなります。Adapty ダッシュボードの Offer Code オファータイプでアナリティクスをフィルタリングできます。
収益の差異のトラブルシューティング
オファーコードのトランザクションが割引後の価格ではなく定価でAdaptyに記録されている場合は、App Store Connectで以下を確認してください:
- ユーザーが引き換え可能なすべての地域に対して、オファーコードに正しい価格が設定されているか。
- ユーザーの特定の国や地域に対してオファー価格が設定されているか。Appleはトランザクションに地域ごとの価格を含めて送信します。オファーに地域価格が設定されていない場合、Appleは定価を送信することがあります。
Adapty ダッシュボードで Offer Code オファータイプと Offer Discount Type フィルターを使って、オファーコードのトランザクションをフィルタリングして確認できます。
従来のプロモコード(廃止済み)
Appleは2026年3月にアプリ内課金のプロモコードを廃止しました。オファーコードはより多くの機能を備えた代替手段です:対象者の設定、有効期限の指定、1四半期あたり最大100万コードの発行が可能です。アプリ内課金にプロモコードを使用していた場合は、App Store Connectでオファーコードに移行してください。
従来のプロモコード(アプリのバージョンごとに最大100枚)はサブスクリプションへの無料アクセスを付与するものでした。オファーコードとは異なり、Appleはプロモコードのトランザクションに割引情報を含めず、レシートには定価が送信されていました。そのため、Adaptyはこれらのトランザクションを定価で記録しており、Adaptyアナリティクスとインターネット Store Connectの間で収益の差異が生じていました。
定価で記録されているが本来は無料であるべき過去のトランザクションが見つかった場合、それらは従来のプロモコードによるものと考えられます。これらのコードは廃止されたため、正確な収益トラッキングのためにオファーコードに移行してください。
アプリでコード引き換えシートを表示するには:
Adapty.PresentCodeRedemptionSheet((error) => {
// handle the error
});
私たちの観察によると、一部のアプリではオファーコード引き換えシートが正常に動作しないことがあります。ユーザーをApp Storeに直接リダイレクトすることをお勧めします。
そのためには、以下の形式のURLを開く必要があります:
https://apps.apple.com/redeem?ctx=offercodes&id={apple_app_id}&code={code}
App Storeからのアプリ内課金
プロモーションされたアプリ内課金は、SDKバージョン4.1以降でサポートされており、iOS 16.4以降が必要です。iOS 16.4未満のデバイスでは、アプリに届きません。
ユーザーがApp Storeのプロダクトページから購入を開始し、そのトランザクションがアプリに引き継がれると、SDKが自動的に完了させます。Appleの購入システム画面がすぐに表示され、Adaptyはそのトランザクションをほかのアプリ内課金と同様に処理します。
プロモートされたプロダクトにサブスクリプションオファーが含まれている場合、SDKは購入時に自動的にそのオファーを適用します。オファーはApp Storeの購入インテントから読み取られ、iOS 18.0以降で公開されます。iOS 16.4〜17.xでは、購入は通常価格で処理されます。
コードでプロモート購入を処理するために、IAdaptyEventListenerには必要なOnReceivePromotedPurchase(AdaptyPromotedProduct)メソッドが含まれており、受け取った購入を完了するためのAdapty.MakePromotedPurchaseと組み合わせて使用します:
public void OnReceivePromotedPurchase(AdaptyPromotedProduct product) {
Adapty.MakePromotedPurchase(product, (result, error) => {
// process the purchase result
});
}
SDK はまだこのメソッドにプロモート購入を渡しません。代わりに自動的に完了させるため、カスタム画面を先に表示するためにプロモート購入を遅らせることはできません。インターフェースで必須のため、メソッドは実装してください。空の本体でも有効な実装です。
プリペイドプランを管理する(Android)
アプリユーザーがプリペイドプラン(例: 数か月分の非更新型サブスクリプションを購入する)を利用できる場合、プリペイドプランに対して保留中のトランザクションを有効にできます。
using UnityEngine;
using AdaptySDK;
var builder = new AdaptyConfiguration.Builder("YOUR_API_KEY")
.SetGoogleEnablePendingPrepaidPlans(true);
Adapty.Activate(builder.Build(), (error) => {
if (error != null) {
// handle the error
return;
}
});