Flutter SDKでエラーを処理する

SDKから返されるエラーはすべて AdaptyErrorCode です。以下に例を示します:

デバッグ前に詳細ログを有効にしてください。 ほとんどの AdaptyError は、StoreKit、Play Billing、ネットワーク、またはバックエンドのエラーをラップしています。詳細ログを有効にすると(await Adapty().setLogLevel(AdaptyLogLevel.verbose)ロギングを参照)、ラップされたエラーがコンソールに出力され、実際の原因が分かります。

これらの解決策で問題が解決しない場合は、サポートに連絡する前にその他の問題を参照して、より効率的にサポートできるよう手順をご確認ください。

    try {
      final result = await adapty.makePurchase(product: product);
    } on AdaptyError catch (adaptyError) {
      if (adaptyError.code == AdaptyErrorCode.paymentCancelled) {
        // Cancelled
      }
    } catch (e) {
    }

System StoreKit コード

エラーコード解決策
unknown0不明または予期しないエラーが発生したことを示すエラーコードです。
再試行するか、その他の問題セクションを参照してください。
clientInvalid1クライアントが試みた操作を実行する権限がないことを示すエラーコードです。
paymentCancelled2

ユーザーが支払いリクエストをキャンセルしたことを示すエラーコードです。

対応は不要ですが、ビジネスロジックの観点から、ユーザーに割引を提示したり、後でリマインドしたりすることができます。

paymentInvalid3支払いパラメーターのいずれかが App Store に認識されなかったことを示すエラーです。
paymentNotAllowed4ユーザーが支払いの承認を許可されていないことを示すエラーコードです。
storeProductNotAvailable5リクエストしたプロダクトがストアで販売されていないことを示すエラーコードです。
アプリを再インストールしてみてください。
cloudServicePermissionDenied6ユーザーがクラウドサービス情報へのアクセスを許可していないことを示すエラーコードです。
cloudServiceNetworkConnectionFailed7デバイスがネットワークに接続できなかったことを示すエラーコードです。
cloudServiceRevoked8ユーザーがこのクラウドサービスの使用許可を取り消したことを示すエラーコードです。
privacyAcknowledgementRequired9ユーザーがまだ Apple のプライバシーポリシーに同意していないことを示すエラーコードです。
unauthorizedRequestData10アプリが、必要なエンタイトルメントを持たないプロパティを使用しようとしていることを示すエラーコードです。
invalidOfferIdentifier11

オファーの identifier が無効です。たとえば、該当する識別子のオファーが App Store に設定されていない場合や、オファーが取り消されている場合などが該当します。

AppStore Connect で目的のオファーを設定し、有効なオファー識別子を渡していることを確認してください。

invalidSignature12支払い割引の署名が無効であることを示すエラーコードです。
missingOfferParams13支払い割引のパラメーターが不足していることを示すエラーコードです。
invalidOfferPrice14App Store Connect で指定した価格が無効になったことを示すエラーコードです。オファーは常に割引価格である必要があります。

カスタム Android コード

エラーコード解決策
adaptyNotInitialized20Adapty.activate メソッドを使って Adapty SDK を正しく設定する必要があります。設定方法については Flutter 向けの手順 をご覧ください。
productNotFound22購入しようとしたプロダクトがストアで見つからないことを示すエラーです。
invalidJson23ペイウォールの JSON が無効です。Adapty ダッシュボードで修正してください。修正方法については リモートコンフィグによるペイウォールのカスタマイズ を参照してください。
currentSubscriptionToUpdateNotFoundInHistory24更新が必要な元のサブスクリプションが見つかりません。
pendingPurchase25購入状態が「購入済み」ではなく「保留中」であることを示すエラーです。詳細については Android Developer ドキュメントの 保留中のトランザクションの処理 ページを参照してください。
billingServiceTimeout97Google Play が応答する前にリクエストが最大タイムアウトに達したことを示すエラーです。Play Billing Library の呼び出しで要求されたアクションの実行に遅延が発生した場合などに起こります。
featureNotSupported98現在のデバイス上の Play Store では、要求された機能がサポートされていません。
billingServiceDisconnected99BillingClient を介したクライアントアプリと Google Play ストアサービスの接続が切断されたことを示す致命的なエラーです。
billingServiceUnavailable102Google Play Billing サービスが現在利用できないことを示す一時的なエラーです。ほとんどの場合、クライアントデバイスと Google Play Billing サービス間のどこかでネットワーク接続の問題が発生しています。
billingUnavailable103

購入処理中にユーザーの課金エラーが発生したことを示すエラーです。発生する例としては以下が挙げられます:

1. ユーザーのデバイス上の Play ストアアプリが古い。

2. ユーザーがサポートされていない国にいる。

3. ユーザーが企業ユーザーであり、企業管理者が購入を無効にしている。

4. Google Play がユーザーの支払い方法に請求できない(クレジットカードの有効期限切れなど)。

5. ユーザーが Play ストアアプリにログインしていない。

developerError105API の誤った使用を示す致命的なエラーです。
billingError106Google Play 自体の内部的な問題を示す致命的なエラーです。
itemAlreadyOwned107消耗型アイテムはすでに購入済みです。
itemNotOwned108アイテムに対して要求されたアクションが失敗したことを示すエラーです。

カスタム StoreKit コード

エラーコード解決策
noProductIDsFound1000

このエラーは、ペイウォールでリクエストしたプロダクトがApp Storeに登録されているにもかかわらず、購入できる状態にないことを示します。このエラーにはInvalidProductIdentifiersの警告が伴う場合があります。エラーなしで警告だけが表示される場合は無視してください。

このエラーが発生している場合は、コード1000 noProductIDsFound エラーの修正方法セクションの手順に従ってください。

noProductsFound1001このエラーは、購入しようとしたプロダクトがストアで利用できないことを示します。
productRequestFailed1002現在、利用可能なプロダクトを取得できません。
cantMakePayments1003このデバイスではアプリ内課金が許可されていません。トラブルシューティングガイドをご覧ください。
noPurchasesToRestore1004このエラーは、App Storeが復元すべき購入を見つけられなかったことを示します。
cantReadReceipt1005

デバイス上に有効なレシートがありません。これはサンドボックステスト中に発生することがあります。

サンドボックスでは実際に購入を行うまで有効なレシートファイルが存在しないため、アクセスする前に必ず1回購入してください。また、サンドボックステスト中は有効なAppleサンドボックスアカウントでデバイスにサインインしていることを確認してください。

productPurchaseFailed1006プロダクトの購入に失敗しました。このエラーは内部のStoreKitエラーをラップしています。ラップされたエラーを確認するか(または詳細ログを有効にしてコンソールで確認するか)、実際の原因を特定してください。ラップされたエラーは通常、上記の表にあるStoreKitコード0〜14のいずれかで、特にpaymentCancelledpaymentInvalidpaymentNotAllowedinvalidOfferPriceが多いです。原因を特定できない場合は新しいサンドボックスプロファイルを試してください。それでも失敗する場合はAppleサポートにお問い合わせください。
missingOfferSigningParams1007

このエラーはAdaptyのインテグレーションまたはオファーに問題があることを示します。

設定方法については、App Storeインテグレーションの設定オファーをご参照ください。

refreshReceiptFailed1010このエラーはレシートが受信されなかったことを示します。StoreKit 1にのみ適用されます。
receiveRestoredTransactionsFailed1011購入の復元に失敗しました。

カスタムネットワークコード

エラーコード解決策
notActivated2002Adapty SDK が有効化されていません。
スプラッシュスクリーンや初期の UI フックが Adapty().activate の完了前に Adapty のメソッドを呼び出している場合によく見られます。実機とエミュレーターでタイミングが異なるため、症状が断続的に発生し、エミュレーターでは再現しないことがあります。他の SDK 呼び出しをスケジュールする前に activate の Future を await してください。詳細な順序については Flutter SDK の呼び出し順序 を参照してください。
badRequest2003リクエストが不正です。
App Store との連携 に必要なすべての手順が完了していることを確認してください。
serverError2004サーバーエラーです。
しばらく経ってから再試行してください。問題が解決しない場合は、Adapty サポートチームにお問い合わせください。
networkFailed2005ユーザーのデバイスのネットワーク接続に問題があることを示すエラーです。
VPN を無効にするか、モバイル通信から Wi-Fi に切り替えるか、またはその逆を試してください。
decodingFailed2006レスポンスのデコードに失敗したことを示すエラーです。
コードを確認し、送信するパラメーターが有効であることを確かめてください。たとえば、このエラーは無効な API キーを使用している場合に発生することがあります。
encodingFailed2009リクエストのエンコードに失敗したことを示すエラーです。
analyticsDisabled3000オプトアウト しているため、アナリティクスイベントを処理できません。
wrongParam3001一部のパラメーターが正しくないことを示すエラーです。
Adapty のペイウォールビルダーを使用していてこのエラーでペイウォールを表示できない場合は、ペイウォールビルダーの Show on device をオンにしてください。
もう一つの原因として、ローカルのフォールバックファイルのバージョンが SDK バージョンと一致していないことが考えられます。ダッシュボードから新しいファイルをダウンロードしてください。
activateOnceError3005.activate メソッドを複数回呼び出すことはできません。
profileWasChanged3006処理中にユーザープロファイルが変更されました。
Adapty().identify の実行中に別のメソッドを呼び出すと発生します。進行中の呼び出しが間もなく切り替わるプロファイルに対して処理を行い、SDK がそれを拒否します。ユーザー操作に関わる呼び出しを行う前に必ず identifyawait してください。詳しくは Flutter SDK の呼び出し順序 を参照してください。
unsupportedData3007SDK がサポートしていないデータ形式であることを示すエラーです。
persistingDataError3100データの保存中にエラーが発生しました。
fetchTimeoutError3101フェッチ操作がタイムアウトしたことを示すエラーです。

その他の問題

まだ解決策が見つかっていない場合は、次のステップを試してみてください。

  • SDKを最新バージョンにアップグレードする: 最新のSDKバージョンは安定性が高く、既知の問題の修正も含まれているため、常に最新へのアップグレードをおすすめします。
  • サポートチームに連絡するか、サポートフォーラムで開発者仲間に相談する
  • support@adapty.io またはチャットからサポートチームに連絡する: SDKのアップグレードが難しい場合や、アップグレードしても解決しない場合は、サポートチームにお問い合わせください。詳細ログを有効にしてログをチームと共有すると、問題をより早く解決できます。関連するコードスニペットを添付することも可能です。