iOS SDKのエラーを処理する

Adapty SDKはすべてのエラーをAdaptyErrorというラッパーで扱います。SDKから返されるエラーは基本的にすべてAdaptyErrorです。originalErroradaptyErrorCodeという2つの便利なプロパティがあります。詳細は以下をご覧ください。

originalErrorには元のエラーが含まれており、必要な場合に参照できます。SKErrorNSError、または一般的なSwiftのErrorのいずれかです。このプロパティはオプショナルです。SDKが直接生成するエラー(データの不整合や欠落など)の場合、ラッパーの元となった元エラーが存在しないことがあるためです。

adaptyErrorCodeを使うと、以下のような一般的な問題を処理できます。

  • 無効な認証情報
  • ネットワークエラー
  • 支払いのキャンセル
  • 請求の問題
  • 無効なレシート
  • その他多数

特定のエラーコードをチェックして適切に対応するのは非常に簡単です。

do {
    let info = try await Adapty.makePurchase(product: product)
} catch {
    if error.adaptyErrorCode == .paymentCancelled {
        // purchase was cancelled
        // you can offer discount to your user or remind them later
    }
}

デバッグ前に詳細ログを有効にしてください。 ほとんどのAdaptyErrorは、StoreKit、ネットワーク、またはバックエンドの基底エラーをラップしています。詳細ログを有効にすると(Adapty.logLevel = .verboseロギングを参照)、ラップされたエラーがコンソールに出力されるため、実際の原因を特定しやすくなります。originalErrorプロパティはログレベルに関係なく設定されますが、詳細ログを使うとコンソール上で確認できます。

これらの解決策で問題が解決しない場合は、サポートに連絡する前にその他の問題のセクションを確認してください。より迅速にサポートできるよう、事前の確認をお願いしています。

StoreKitエラー

エラーコード解決策
unknown0不明または予期しないエラーが発生したことを示すエラーコードです。
再試行するか、その他の問題セクションをご覧ください。
clientInvalid1クライアントが実行しようとしたアクションを許可されていないことを示すエラーコードです。
paymentCancelled2

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

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

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

オファーのidentifierが無効です。たとえば、App Storeでそのidentifierのオファーが設定されていないか、オファーが取り消されている場合などです。

App Store Connectで必要なオファーを設定し、有効なオファーidentifierを渡していることを確認してください。

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

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

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

productRequestFailed1002現時点で利用可能なプロダクトを取得できません。
cantMakePayments1003このデバイスではアプリ内課金が許可されていません。トラブルシューティングガイドを参照してください。
cantReadReceipt1005

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

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

productPurchaseFailed1006プロダクトの購入に失敗しました。これは基底のStoreKitエラーをラップしています。実際の原因を確認するにはoriginalErrorを参照するか、詳細ログを有効にしてコンソールで確認してください。ラップされたエラーは通常、上の表のStoreKitコード0〜14のいずれかで、最もよく見られるのはpaymentCancelledpaymentInvalidpaymentNotAllowedinvalidOfferPriceです。特定の原因を特定できない場合は、新しいサンドボックスプロファイルを試してください。それでも失敗する場合はAppleサポートにお問い合わせください。
refreshReceiptFailed1010レシートの更新操作に失敗しました。
fetchSubscriptionStatusFailed1020App Storeからサブスクリプションのステータスの取得に失敗しました。
unknownTransactionId1030トランザクションIDが不明です。
paymentPendingError1050支払いは現在保留中です。

ネットワークエラー

エラーコード解決策
notActivated2002Adapty SDKが有効化されていません。
スプラッシュ画面や初期のUIフックがAdapty.activateの完了前にAdaptyのメソッドを呼び出している場合に最もよく見られます。この症状は断続的に発生し、実機とシミュレーターではタイミングが異なるため再現しないことがあります。activateの完了ハンドラーまたは非同期結果を待ってから他のSDK呼び出しを行うようにしてください。詳細はiOS 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する(または完了ハンドラーを使用する)ようにしてください。詳細はiOS SDKの呼び出し順序を参照してください。
unsupportedData3007データフォーマットがSDKでサポートされていないことを示すエラーです。
unidentifiedUserLogout3020未識別ユーザーに対してlogoutメソッドを呼び出すことはできません。
fetchTimeoutError3101フェッチ操作がタイムアウトしたことを示すエラーです。
operationInterrupted9000この操作はシステムによって中断されました。

その他の問題

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

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