アプリ内購入の追加に取り組んでおり、Store Kitを使用してアプリ内購入を作成およびテストできました(はい!)。テスト中、購入中にアプリがクラッシュするような方法でアプリを実行しました(したがって、paymentQueue:updatedTransactionsを受信してfinishTransactionを呼び出す通常のサイクルが中断されたと思います)。
現在、トランザクションを正常に完了できず、代わりにpaymentQueue:updatedTransactionsが呼び出されたときにtransactionState SKPaymentTransactionStateFailedのトランザクションのみを取得しています。
Transaction.error.codeは-1003であり、transaction.error.localizedDescriptionは「iTunes Storeに接続できません」です!
ITunesConnectからすべての製品を削除し、異なる識別子を使用してそれらを再構築しようとしましたが、助けにはなりませんでした。また、App Storeアプリを使用して実際のApp Storeに実際に接続し、いくつかのアプリをダウンロードして、接続できるようにしました。最後に、Settings:Storeアプリにアクセスして、通常のアプリストアアカウントからサインアウトしていることを確認しました。
私も同様の状況にあり、iPhoneのネットワークトラフィックをダンプして、何が起こっているのかを確認しました。私は、サンドボックスの代わりに通常の店に連絡したことがわかりました。デバイスからアプリを削除し、クリーンにし、再度ビルド/インストールするのに役立ちました。どうやら開発プロファイルに問題があったようです。
更新:ジェイルブレイクされていないiPhoneのネットワークトラフィックをダンプするには、Macでインターネット共有を使用し、iPhoneでMacのWiFiを使用するように設定します。その後、tcpdump -n -i en1
お使いのMacでトリックを行います。
エラー0「iTunes Storeに接続できません」(OPが尋ねたエラー-1003ではないが、エラー0のWeb検索もここにつながる)を受け取っている場合、これは2つの問題の可能性があります。
-[SKPaymentQueue addPayment:]
を呼び出した直後に、支払いの確認を求めるポップアップが表示される前に、エラー0が表示されます。問題#1を修正するには、正しい製品IDを渡します。問題#2を修正するには、iTunes Connectで新しいテストユーザーを作成し、オプションで古いテストユーザーを削除します。
アプリの新しいテストユーザーを追加します。
[設定]で正しい日付と時刻が設定されていることを確認してください。それ以外の場合、ストアへのSSL接続の作成に失敗します!!
同じエラーが発生し、 開発者フォーラム のいくつかのスレッドを読んだ後、デバイスの設定をリセットし(設定->一般->リセット->すべての設定をリセット)、それをクリアしました。それは劇的に見えたが、うまくいった。
どこからともなく現れると思われる同じエラーがありました(ある日は正常に機能していましたが、翌日、アプリ内購入をテストしようとした3回に約2回これらのエラーが発生しました)。
その後、App Storeにアクセスして(別の実際の購入を試みたとき)、彼らが私に確認してほしい新しいユーザー契約があることを知りました。それを行った後、自分のアプリに戻ってテスト購入をもう一度試したところ、正常に動作し、それ以来エラーはありませんでした。だから私は彼らが私に新しいユーザー同意書を検証してほしかったので私はエラーを受け取っていたのではないかと思う。
今私が疑問に思うのは、アプリ内購入でユーザーに不可解なエラーを表示する代わりにそのプロンプトを転送する方法があるかどうかです。
私のために働いたのは、テストデバイスからアプリをアンインストールしてから、Xcodeから新しいコピーをインストールすることでした。
In SKPaymentTransactionState
は、リクエストがサーバーキューに追加される前にSKPaymentTransactionStateFailed
であることを示します。
@class SKPayment;
enum {
SKPaymentTransactionStatePurchasing, // Transaction is being added to the server queue.
SKPaymentTransactionStatePurchased, // Transaction is in queue, user has been charged. Client should complete the transaction.
SKPaymentTransactionStateFailed, // Transaction was cancelled or failed before being added to the server queue.
SKPaymentTransactionStateRestored // Transaction was restored from user's purchase history. Client should complete the transaction.
};
typedef NSInteger SKPaymentTransactionState;
そして、SKPaymentTransaction
クラス参照エラーの議論には次のように書かれています。
TransactionStateがSKPaymentTransactionStateFailed
に設定されている場合を除き、エラープロパティは未定義です。アプリケーションは、エラープロパティを読み取って、トランザクションが失敗した理由を判断できます。
transaction.error.localizedDescription is "Cannot connect to iTunes Store"!は一般的なエラーメッセージです。InAppPurchasesのテスト中にもこのエラーメッセージが定期的に表示されます。
あなたができるいくつかのヒントは、
SKProductsRequest
を使用してアプリストアからすべての製品を取得し、response.products
には、要求されたproductIdentifier
が含まれます。この用途のために、
SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithArray:[objProducts allKeys]]];
//pass product identifier array as argument
[request start];
応答をキャッチ:
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{
NSArray *myProduct = response.products;
}
あなたが決めることができるように、あなたはアプリストアと通信することができます。製品IDがあります。
ありがとう
私は2日間立ち往生しています、ここに私の解決策があります:
重要性はサンドボックステスターアカウントだと思います。常にエラー0が発生するので、これを使用したことはありません。
私の場合、インターネットですべてを試しましたが、何も機能しませんでした。
Appleは実際に本番支払いシステムとサンドボックスを壊しました。私は2日間待たなければならなかった、とそれが動作し始めました。
XCodeのすべてのターゲットを削除し、デバイスからアプリケーションを手動で削除し、XCodeからビルドして実行し、同様の問題を修正しました(同じエラーメッセージですが、異なるエラーコード:-1009)
ここでスレッドで提供されるすべてのソリューションを試しましたが、役に立ちませんでした。私の場合、アプリ内購入プロビジョニングプロファイルのバンドル識別子を作成するときに使用したものと同じドメイン名で始まるワイルドカードバンドル識別子がありました。
ここに私が問題を修正した方法があり、あなたの修正に役立つかもしれません(添付を参照):
1)iPhoneをMacに接続します。
2)[デバイス]([Xcode]> [ウィンドウ]メニュー> [オーガナイザー]ウィンドウ)で、iPhoneの[プロビジョニングプロファイル]オプションを選択します。 iPhoneに現在存在するすべてのプロビジョニングプロファイルが表示されます。
3)バンドル識別子の特定のドメイン名(com.MYDOMAIN。*)で始まるすべてのプロビジョニングプロファイル、特に、アプリ内購入を実行できる機能で特別に作成したものを除くワイルドカードを使用するもの(com .MYDOMAIN.inappidentifier)。
4)アプリを新たにインストールし、新しいiTunes接続テストユーザー(サンドボックス)で実装をテストします
スクリーンショット:
In-App Purchase FAQ のコメント:
iTunes Storeに接続できません
「iTunes Storeに接続できません」問題は、次の1つ以上の理由による可能性があります。
- サンドボックスに到達できない可能性があります。
- アプリにバンドルバージョン(CFBundleVersion)がありません。詳細については、バージョン番号とビルド文字列の設定を参照してください。
- アプリはシミュレータで実行されていますが、シミュレータはアプリ内購入をサポートしていません。
- 販売できない製品を購入しようとしています。詳細については、アプリのストアUIを表示する前に、製品情報をApp Storeに照会するをご覧ください。
私の場合、Xcodeシミュレーターを使用していたためエラーが発生しました。デバイスを使用すると動作し始めました。
In-App Purchase Programming Guide でも、開発iOSデバイスを使用するように言われているに推奨されるテスト手順があります。
ITunesアカウントをログアウトするだけで(今すぐテストアカウントにログインしないでください!)、プログラムを開始します。アプリ内購入時にログインの詳細を尋ねる場合、テストアカウント情報を入力する必要があります。
残念ながら、ここに記載されていない問題に遭遇しました。アプリ内購入およびアプリ内購入に関連するすべての契約を承認するまで、アプリ内購入は機能しません。 iTunesConnectですべての契約を適切に設定していることを確認してください。must「Contracts In Effect」セクションに表示され、購入が機能します。
問題は、iTunes Connectで間違ったバンドルIDがあったことです。誰かが事前にアプリを作成していたので、アプリを編集し、appIdを新しいものに設定する必要がありました。
App Storeに行ってから、設定/ストアに戻ってサインアウトしました。これを3回行い、毎回アプリを再訪し、NSLog出力のデバッグを追加しましたが、エラー-1003なしでアプリ内購入コードのテストを続行できます。これが再び動作する正確な理由はわかりませんが、NSLogsを追加してアプリを再実行するだけで、コードの変更ではないことは確かです。
はい、iPad/iPhoneを最初に別のコンピューターに接続し、別のコンピューターで使用している場合は、iPadでストアからログアウトし、MACのiTunesに通常のアカウントでサインインしてから同期する必要があります。
また、iPadの「WIFI」がオンになっていることを確認してください...
これを引き起こす2つの問題がありました。
1)別の(動作している)アプリからIAPコードをコピーしましたが、オブザーバーの設定ができませんでした:
observer = [[IAPHelper alloc] init]; [[SKPaymentQueue defaultQueue] addTransactionObserver:observer];
2)デバイスの設定でiTunesにログインしました。サンドボックスで使用できるのはテストユーザーのみです。ログアウトすると、再び機能しました。