Unity SDKのエラーを処理する
SDKから返されるエラーはすべて AdaptyErrorCode 形式です。以下に例を示します。
デバッグ前に詳細ログを有効にしてください。 AdaptyError のほとんどは、StoreKit、Play Billing、ネットワーク、またはバックエンドのエラーをラップしています。詳細ログを有効にすると(Adapty.SetLogLevel(AdaptyLogLevel.Verbose, ...) — ログ記録を参照)、ラップされたエラーがコンソールに出力され、実際の原因を特定しやすくなります。
これらの解決策で問題が解決しない場合は、サポートチームがより効率的にサポートできるよう、その他の問題セクションで事前に確認すべき手順をご覧ください。
Adapty.MakePurchase(product, (profile, error) => {
if (error != null && error.Code == Adapty.ErrorCode.PaymentCancelled) {
// payment cancelled
}
});
システム 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 で必要なオファーを設定し、有効なオファーIDを渡すようにしてください。 |
| invalidSignature | 12 | 支払い割引のシグネチャーが有効ではないことを示すエラーコードです。 |
| missingOfferParams | 13 | 支払い割引のパラメーターが不足していることを示すエラーコードです。 |
| invalidOfferPrice | 14 | App Store Connect で指定した価格が無効になったことを示すエラーコードです。オファーは常に割引価格である必要があります。 |
Android カスタムコード
| エラー | コード | 解決策 |
|---|---|---|
| adaptyNotInitialized | 20 | Adapty.activate メソッドで Adapty SDK を適切に設定する必要があります。Unity の場合の設定方法をご確認ください。 |
| productNotFound | 22 | 購入リクエストされたプロダクトがストアで利用できないことを示すエラーです。 |
| invalidJson | 23 | ペイウォールの JSON が無効です。Adapty ダッシュボードで修正してください。修正方法については、リモートコンフィグでペイウォールをカスタマイズするトピックをご参照ください。 |
| currentSubscriptionToUpdateNotFoundInHistory | 24 | 更新が必要な元のサブスクリプションが見つかりません。 |
| pendingPurchase | 25 | 購入状態が「購入済み」ではなく「保留中」であることを示すエラーです。詳細については、Android デベロッパードキュメントの保留中のトランザクションの処理ページをご参照ください。 |
| billingServiceTimeout | 97 | Google Play が応答する前にリクエストが最大タイムアウトに達したことを示すエラーです。たとえば、Play Billing Library の呼び出しでリクエストされたアクションの実行に遅延が生じた場合などに発生します。 |
| featureNotSupported | 98 | リクエストされた機能は、現在のデバイスの Play ストアでサポートされていません。 |
| billingServiceDisconnected | 99 | BillingClient 経由でのクライアントアプリと Google Play ストアサービス間の接続が切断されたことを示す重大なエラーです。 |
| billingServiceUnavailable | 102 | Google Play の課金サービスが現在利用できないことを示す一時的なエラーです。多くの場合、クライアントデバイスと Google Play 課金サービス間のどこかでネットワーク接続の問題が発生しています。 |
| 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 | Google Play が復元対象の購入履歴を見つけられなかったことを示すエラーです。 |
| cantReadReceipt | 1005 | デバイスに有効なレシートがありません。サンドボックステスト中に発生することがあります。 対応は不要ですが、ビジネスロジックの観点から、ユーザーに割引を提供したり、後でリマインドしたりすることができます。 |
| productPurchaseFailed | 1006 | プロダクトの購入に失敗しました。これは基盤となる StoreKit エラーをラップしています — 実際の原因を確認するには、ラップされたエラーを読むか、詳細ログを有効にしてコンソールで確認してください。ラップされたエラーは通常、上記の表にある StoreKit コード 0〜14 のいずれかで、最も多いのは paymentCancelled、paymentInvalid、paymentNotAllowed、invalidOfferPrice です。特定の原因が特定できない場合は、新しいサンドボックスプロファイルで試してみてください。それでも失敗する場合は Apple サポートにお問い合わせください。 |
| refreshReceiptFailed | 1010 | レシートを受信できなかったことを示すエラーです。StoreKit 1 にのみ適用されます。 |
| receiveRestoredTransactionsFailed | 1011 | 購入の復元に失敗しました。 |
ネットワークカスタムコード
| エラー | コード | 解決策 |
|---|---|---|
| notActivated | 2002 | Adapty SDK が有効化されていません。 スプラッシュスクリーンや早期のスクリプトフックが Adapty.Activate の完了前に Adapty メソッドを呼び出している場合によく見られます。実機ではタイミングが異なるため、エディターでは再現しないことがあります。他の SDK 呼び出しをスケジュールする前に、Activate の完了コールバックを待機してください。詳細な呼び出し順序については、Unity SDK の呼び出し順序をご参照ください。 |
| badRequest | 2003 | リクエストが不正です。 App Store との連携に必要なすべての手順が完了していることを確認してください。 |
| serverError | 2004 | サーバーエラーです。 しばらく待ってから再試行してください。問題が解決しない場合は、Adapty サポートチームにお問い合わせください。 |
| networkFailed | 2005 | ユーザーのデバイスのネットワーク接続に問題があることを示すエラーです。 VPN を無効にするか、モバイルデータ通信から WiFi(またはその逆)に切り替えてみてください。 |
| decodingFailed | 2006 | レスポンスのデコードに失敗したことを示すエラーです。 コードを確認し、送信しているパラメーターが有効であることを確認してください。たとえば、無効な API キーを使用している場合にこのエラーが発生することがあります。 |
| encodingFailed | 2009 | リクエストのエンコードに失敗したことを示すエラーです。 |
| missingURL | 2010 | リクエストされた URL が nil です。 |
| analyticsDisabled | 3000 | アナリティクスをオプトアウトしているため、アナリティクスイベントを処理できません。 |
| wrongParam | 3001 | パラメーターの一部が正しくないことを示すエラーです。 Adapty のペイウォールビルダーを使用していてこのエラーでペイウォールを表示できない場合は、ペイウォールビルダーで Show on device をオンにしてください。 また、ローカルのフォールバックファイルのバージョンが SDK バージョンと一致していない場合にも発生することがあります。ダッシュボードから新しいファイルをダウンロードしてください。 |
| activateOnceError | 3005 | .activate メソッドを複数回呼び出すことはできません。 |
| profileWasChanged | 3006 | 操作中にユーザープロファイルが変更されました。Adapty.Identify の処理中に別のメソッドが呼び出されると、進行中の呼び出しが切り替わる前のプロファイルに作用し、SDK がそれを拒否します。ユーザーアクションの呼び出しを行う前に、Identify の完了コールバックを待機してください。Unity SDK の呼び出し順序をご参照ください。 |
| unsupportedData | 3007 | データ形式が SDK でサポートされていないことを示すエラーです。 |
| persistingDataError | 3100 | データの保存中にエラーが発生しました。 |
| fetchTimeoutError | 3101 | フェッチ操作がタイムアウトしたことを示すエラーです。 |
その他の問題
まだ解決策が見つからない場合は、次の手順をお試しください。
- SDK を最新バージョンにアップグレードする: 最新の SDK バージョンはより安定しており、既知の問題の修正が含まれているため、常にアップグレードをお勧めします。
- サポートチームに問い合わせるか、サポートフォーラムで他の開発者に相談する。
- [email protected] またはチャットでサポートチームに連絡する: SDK のアップグレードが難しい場合や、アップグレードしても解決しない場合は、サポートチームにお問い合わせください。詳細ログを有効にしてチームとログを共有すると、問題の解決が早まります。関連するコードスニペットも添付できます。