React Native SDKでストアメッセージを制御する
App StoreやGoogle Playでは、サブスクリプションに関するメッセージをユーザーに表示することがあります。
- App Store: 価格値上げへの同意リクエスト、請求に関するお知らせ、またはウィンバックオファー。デフォルトでは、アプリが開いている間、StoreKit がこれらのメッセージを自動的に表示します。
- Google Play: サブスクリプションの支払いが拒否され、支払い方法の更新が必要であるというお知らせ。デフォルトでは、Adapty SDK はアプリの
Activityが起動するたびにこれらのメッセージをリクエストします。
いずれの場合も、メッセージはフロー、オンボーディング、またはチェックアウトの上に表示されることがあります。表示のタイミングを自分で制御するには、Adapty SDK を手動メッセージ処理モードに切り替え、ユーザーの操作を妨げないタイミングで showStoreMessages を呼び出してください。
手動モードでは、ストアが独自にメッセージを表示することはありません。アプリが showStoreMessages を一度も呼び出さない場合、ユーザーは価格変更の同意リクエスト、支払い情報の問題に関する通知、または決済失敗の通知を一切受け取れません。
始める前に
以下が必要です:
- Adapty React Native SDK 4.3.0 以降:それより古いバージョンにはストアメッセージ API がありません。
- iOS 16 以降(App Store メッセージ用):StoreKit はそれより古いバージョンの iOS ではアプリにメッセージを配信しません。iOS 15 では、
getPendingStoreMessageTypesとshowStoreMessagesはエラーをスローするため、アプリが iOS 15 をサポートしている場合は、iOS 16 以降でのみこれらを呼び出してください。
手動処理を有効にする
showStoreMessages を呼び出したときだけストアのメッセージを表示するには、SDK を有効化する際に storeMessagesHandling を 'manual' に設定してください:
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
storeMessagesHandling: 'manual', // 'auto' is the default
});
iOSでは、SDKが各App Storeメッセージを現在のアプリセッションの保留リストに追加します。Androidでは、SDKがGoogle Playメッセージの取得を自動的に停止します。デフォルトの'auto'値では、SDKはApp Storeメッセージをキャプチャしないため、iOSではgetPendingStoreMessageTypesとshowStoreMessagesは返すものも表示するものもありません。
保留中のメッセージタイプを取得する
iOS では、App Store のメッセージが待機中かどうかを確認するには、getPendingStoreMessageTypes を呼び出します。保留中のメッセージのタイプを、表示も削除もせずに返します:
const pendingTypes = await adapty.getPendingStoreMessageTypes();
if (pendingTypes === null) {
// Android: Google Play decides whether a message applies when you show it
} else if (pendingTypes.includes('billing_issue')) {
// For example, skip the upsell and show the billing message first
}
Androidでは、このメソッドはnullを返します。Google Playは保留中のメッセージを報告せず、アプリがリクエストしたときにのみそのメッセージが適用されるかどうかを判断します。空の配列は、iOS上で保留中のメッセージがないことを意味します。
各App Storeメッセージには、次のいずれかのタイプがあります:
| タイプ | メッセージ |
|---|---|
generic | App Storeの一般的なメッセージ。 |
price_increase_consent | サブスクリプションの値上げへの同意リクエスト。 |
billing_issue | サブスクリプションの請求に関する通知。iOS 16.4以降で利用可能。 |
win_back_offer | 対象となるウィンバックオファー。iOS 18以降で利用可能。 |
SDKが認識できないメッセージタイプの値は storekit_<number> となります。
メッセージの表示
ユーザーの操作を妨げないタイミング(フローを閉じた後やオンボーディングが完了した後など)で、showStoreMessages を呼び出してください:
try {
await adapty.showStoreMessages();
} catch (error) {
// handle the error
}
- iOS: SDKは保留中のメッセージを順番に表示します。StoreKitがメッセージを表示した後、SDKはそのメッセージを保留リストから削除します。StoreKitがメッセージの表示に失敗した場合、SDKはAdaptyログにエラーを記録し、次回の呼び出しのためにメッセージを保持して、残りのメッセージの処理を続けます。
- Android: SDKは現在の
Activityに対してGoogle Playのメッセージをリクエストします。Google Playがメッセージをそのユーザーに適用するかどうかを判断するため、リクエストしても必ずしもメッセージが表示されるわけではありません。ユーザーがメッセージから支払い方法を修正した場合、SDKはユーザーの購入情報をAdaptyと同期し、プロファイルリスナーが更新されたアクセスレベルを受け取ります。
デフォルトの 'auto' モードでは、Android で showStoreMessages を呼び出すこともできます。たとえば、すでに実行中の Activity でメッセージを再リクエストする場合などに使用します。
特定のメッセージタイプのみを表示する
保留中の App Store メッセージの一部のみを表示するには、ios.filter にタイプを指定します。指定しなかったメッセージは保留状態のまま残ります:
await adapty.showStoreMessages({
ios: { filter: ['billing_issue', 'price_increase_consent'] },
});
filter を指定しない場合、SDK は認識できないタイプも含めて保留中のすべてのメッセージを表示します。Android は filter を無視し、すべての Google Play メッセージをリクエストします。
エラー
showStoreMessages は以下のコードのいずれかを持つ AdaptyError をスローします:
| コード | 名前 | 原因 |
|---|---|---|
| 3201 | operationInProgress | 別の showStoreMessages の呼び出しがまだメッセージを表示中です。完了するまで待ってから再試行してください。 |
| 3202 | resolverFailure | iOS のみ:SDK がメッセージを表示するためのフォアグラウンドのアクティブなウィンドウシーンを見つけられませんでした。アプリがフォアグラウンドにある状態でメソッドを再度呼び出してください。 |