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 コード
| エラー | コード | 解決策 |
|---|---|---|
| unknown | 0 | 不明または予期しないエラーが発生したことを示すエラーコードです。 再試行するか、その他の問題セクションを参照してください。 |
| clientInvalid | 1 | クライアントが試みた操作を実行する権限がないことを示すエラーコードです。 |
| paymentCancelled | 2 | ユーザーが支払いリクエストをキャンセルしたことを示すエラーコードです。 対応は不要ですが、ビジネスロジックの観点から、ユーザーに割引を提示したり、後でリマインドしたりすることができます。 |
| paymentInvalid | 3 | 支払いパラメーターのいずれかが App Store に認識されなかったことを示すエラーです。 |
| paymentNotAllowed | 4 | ユーザーが支払いの承認を許可されていないことを示すエラーコードです。 |
| storeProductNotAvailable | 5 | リクエストしたプロダクトがストアで販売されていないことを示すエラーコードです。 アプリを再インストールしてみてください。 |
| cloudServicePermissionDenied | 6 | ユーザーがクラウドサービス情報へのアクセスを許可していないことを示すエラーコードです。 |
| cloudServiceNetworkConnectionFailed | 7 | デバイスがネットワークに接続できなかったことを示すエラーコードです。 |
| cloudServiceRevoked | 8 | ユーザーがこのクラウドサービスの使用許可を取り消したことを示すエラーコードです。 |
| privacyAcknowledgementRequired | 9 | ユーザーがまだ Apple のプライバシーポリシーに同意していないことを示すエラーコードです。 |
| unauthorizedRequestData | 10 | アプリが、必要なエンタイトルメントを持たないプロパティを使用しようとしていることを示すエラーコードです。 |
| invalidOfferIdentifier | 11 | オファーの AppStore Connect で目的のオファーを設定し、有効なオファー識別子を渡していることを確認してください。 |
| invalidSignature | 12 | 支払い割引の署名が無効であることを示すエラーコードです。 |
| missingOfferParams | 13 | 支払い割引のパラメーターが不足していることを示すエラーコードです。 |
| invalidOfferPrice | 14 | App Store Connect で指定した価格が無効になったことを示すエラーコードです。オファーは常に割引価格である必要があります。 |
カスタム Android コード
| エラー | コード | 解決策 |
|---|---|---|
| adaptyNotInitialized | 20 | Adapty.activate メソッドを使用して Adapty SDK を適切に設定する必要があります。設定方法は Flutter の場合 をご覧ください。 |
| productNotFound | 22 | このエラーは、購入リクエストされたプロダクトがストアで利用できないことを示しています。 |
| invalidJson | 23 | ペイウォールの JSON が無効です。Adapty ダッシュボードで修正してください。修正方法の詳細については、リモートコンフィグによるペイウォールのカスタマイズ をご覧ください。 |
| currentSubscriptionToUpdateNotFoundInHistory | 24 | 更新が必要な元のサブスクリプションが見つかりません。 |
| pendingPurchase | 25 | このエラーは、購入状態が購入済みではなく保留中であることを示しています。詳細については、Android Developer ドキュメントの 保留中のトランザクションの処理 をご覧ください。 |
| billingServiceTimeout | 97 | このエラーは、Google Play が応答する前にリクエストが最大タイムアウトに達したことを示しています。これは、例えば Play Billing Library の呼び出しでリクエストされたアクションの実行が遅延した場合などに発生することがあります。 |
| featureNotSupported | 98 | リクエストされた機能は、現在のデバイスの Play ストアではサポートされていません。 |
| billingServiceDisconnected | 99 | この致命的なエラーは、BillingClient を介したクライアントアプリと Google Play ストアサービスとの接続が切断されたことを示しています。 |
| billingServiceUnavailable | 102 | この一時的なエラーは、Google Play Billing サービスが現在利用できないことを示しています。ほとんどの場合、クライアントデバイスと Google Play Billing サービス間のどこかでネットワーク接続に問題があることを意味します。 |
| billingUnavailable | 103 | このエラーは、購入プロセス中にユーザーの課金エラーが発生したことを示しています。発生する例としては以下が挙げられます: 1. ユーザーのデバイス上の Play ストアアプリが古い。 2. ユーザーがサポートされていない国にいる。 3. ユーザーがエンタープライズユーザーであり、エンタープライズ管理者がユーザーによる購入を無効にしている。 4. Google Play がユーザーの支払い方法に請求できない(例:クレジットカードの有効期限が切れているなど)。 5. ユーザーが Play ストアアプリにログインしていない。 |
| developerError | 105 | これは、API の不正な使用を示す致命的なエラーです。 |
| billingError | 106 | これは、Google Play 内部の問題を示す致命的なエラーです。 |
| itemAlreadyOwned | 107 | 消耗型アイテムはすでに購入済みです。 |
| itemNotOwned | 108 | このエラーは、アイテムに対してリクエストされたアクションが失敗したことを示しています。 |
カスタム StoreKit コード
| エラー | コード | 解決策 |
|---|---|---|
| noProductIDsFound | 1000 | このエラーは、ペイウォールでリクエストしたプロダクトがApp Storeに登録されているにもかかわらず、購入可能な状態になっていないことを示します。このエラーは このエラーが発生している場合は、コード1000 |
| productRequestFailed | 1002 | 現時点で利用可能なプロダクトを取得できません。 |
| cantMakePayments | 1003 | このデバイスではアプリ内課金が許可されていません。トラブルシューティングガイドを参照してください。 |
| noPurchasesToRestore | 1004 | Adapty Flutter SDK 4.0.4 で非推奨になりました:restorePurchases() はこのエラーを返さなくなりました。復元するものがない場合、メソッドは現在のプロファイルとともに正常に完了するため、その中のアクセスレベルのステータスを確認してください。それ以前のSDKバージョンでは、このエラーはGoogle Playが復元する購入を見つけられなかったことを示します。 |
| cantReadReceipt | 1005 | デバイスに有効なレシートがありません。これはサンドボックステスト中に発生することがあります。 サンドボックスでは、実際に購入を行うまで有効なレシートファイルが存在しないため、アクセスする前に必ず購入を行ってください。サンドボックステスト中は、有効なAppleサンドボックスアカウントでデバイスにサインインしていることも確認してください。 |
| productPurchaseFailed | 1006 | プロダクトの購入に失敗しました。これは内部のStoreKitエラーをラップしたものです。実際の原因を確認するには、ラップされたエラーを読み取るか(または詳細ログを有効にしてコンソールで確認してください)。ラップされたエラーは通常、上の表にあるStoreKitのコード0〜14のいずれかで、最も多いのは paymentCancelled、paymentInvalid、paymentNotAllowed、invalidOfferPrice です。特定の原因を特定できない場合は、新しいサンドボックスプロファイルを試してみてください。それでも失敗する場合はAppleサポートにお問い合わせください。 |
| refreshReceiptFailed | 1010 | レシートが受信されなかったことを示すエラーです。StoreKit 1 にのみ適用されます。 |
| receiveRestoredTransactionsFailed | 1011 | 購入の復元に失敗しました。 |
カスタムネットワークコード
| エラー | コード | 解決策 |
|---|---|---|
| notActivated | 2002 | Adapty SDK が有効化されていません。 スプラッシュ画面や早期の UI フックが Adapty().activate の完了前に Adapty のメソッドを呼び出している場合によく見られます。この症状は断続的に発生し、実機とエミュレーターではタイミングが異なるため、エミュレーターでは再現しないことがあります。他の SDK 呼び出しをスケジュールする前に activate の Future を await してください。詳細は Flutter SDK の呼び出し順序 を参照してください。 |
| badRequest | 2003 | リクエストが不正です。 App Store との連携 に必要なすべての手順を完了しているか確認してください。 |
| serverError | 2004 | サーバーエラーです。 しばらく時間をおいてから再試行してください。問題が解決しない場合は、Adapty サポートチームにお問い合わせください。 |
| networkFailed | 2005 | ユーザーのデバイスのネットワーク接続に問題があることを示すエラーです。 VPN を無効にするか、モバイルデータ通信から WiFi への切り替え(またはその逆)をお試しください。 |
| decodingFailed | 2006 | レスポンスのデコードに失敗したことを示すエラーです。 コードを見直し、送信しているパラメーターが有効であることを確認してください。たとえば、このエラーは無効な API キーを使用している場合に発生することがあります。 |
| encodingFailed | 2009 | リクエストのエンコードに失敗したことを示すエラーです。 |
| analyticsDisabled | 3000 | 外部アナリティクスを無効化 しているため、アナリティクスイベントを処理できません。 |
| wrongParam | 3001 | 一部のパラメーターが正しくないことを示すエラーです。 Adapty のペイウォールビルダーを使用していてこのエラーによりペイウォールが表示できない場合は、ペイウォールビルダーで Show on device をオンにしてください。 また、ローカルのフォールバックファイルのバージョンが SDK バージョンと一致していないことも原因として考えられます。ダッシュボードから新しいファイルをダウンロードしてください。 |
| activateOnceError | 3005 | .activate メソッドを複数回呼び出すことはできません。 |
| profileWasChanged | 3006 | 操作中にユーザープロファイルが変更されました。 Adapty().identify の処理中にメソッドが呼び出されると発生します。実行中の呼び出しが切り替え直前のプロファイルに対して行われ、SDK がそれを拒否します。ユーザーアクションの呼び出しを行う前に必ず identify を await してください。詳細は Flutter SDK の呼び出し順序 を参照してください。 |
| unsupportedData | 3007 | SDK がサポートしていないデータ形式であることを示すエラーです。 |
| fetchTimeoutError | 3101 | フェッチ操作がタイムアウトしたことを示すエラーです。 |
カスタム UI とプラグインコード
| エラー | コード | 解決策 |
|---|---|---|
| jsException | 4105 | ビルダーで作成されたペイウォールまたはオンボーディングの実行中に、JavaScript から例外がスローされました。詳細ログを有効化して、根本的な JavaScript エラーを確認してください。 |
| operationInterrupted | 9000 | この操作はシステムによって中断されました。 呼び出しを再試行してください。 |
| emptyResult | 10001 | Flutter プラグインがネイティブ SDK から空の結果を受け取りました。 呼び出しを再試行し、解決しない場合はその他の問題セクションを参照してください。 |
| internalPluginError | 10002 | Flutter プラグイン内部でエラーが発生しました。 その他の問題セクションを参照してください。 |
その他の問題
まだ解決策が見つかっていない場合は、次のステップを試してみてください。
- SDKを最新バージョンにアップグレードする: 最新のSDKバージョンは安定性が高く、既知の問題の修正も含まれているため、常に最新へのアップグレードをおすすめします。
- サポートチームに連絡するか、サポートフォーラムで開発者仲間に相談する
- support@adapty.io またはチャットからサポートチームに連絡する: SDKのアップグレードが難しい場合や、アップグレードしても解決しない場合は、サポートチームにお問い合わせください。詳細ログを有効にしてログをチームと共有すると、問題をより早く解決できます。関連するコードスニペットを添付することも可能です。