1

iOSアプリを作成していて、アプリ内購入(非消耗品)を実装しようとしています。

すべてのバンドルIDなどが設定され、機能しており、AppleStoreサーバーを取得すると製品が有効であることがわかります。ただし、テスト中に、paymentQueueコールバックで失敗したトランザクションが発生します。

iOSシミュレーターでステップバイステップで何が起こるかを次に示します。

  1. 「0.99ドルで購入しますか?」というメッセージボックスが表示されます。どちらが正しい
  2. [はい]をクリックします。
  3. 約1秒後、すでに購入したと表示されます(正解です。デバッグ中に最初にテスト購入しました)。[OK]をクリックします。
  4. ログイン要件について文句を言います(MZFinance_LoginRequiredのようなものが表示されます。文字列識別子が欠落していると思います)。[OK]をクリックします。
  5. App Storeのログインボックスが表示され、テストアカウントのクレデンシャルを入力します。
  6. Xcodeのブレークポイントがヒットし、トランザクション状態がSKPaymentTransactionStateFailedになりました。

これが私のコードの関連部分です:

-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{
NSArray* arr = response.products;
for (int i = 0; i < arr.count; i++) {
    SKProduct* product = [arr objectAtIndex:i];
    if([product.productIdentifier isEqualToString:@"<<my in app purchase id which is correct and working>>"]){
        SKPayment *payment = [SKPayment paymentWithProduct:product];
        [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
        [[SKPaymentQueue defaultQueue] addPayment:payment];
    }
}

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions{
for (SKPaymentTransaction* ta in transactions) {
    switch (ta.transactionState) {
        case SKPaymentTransactionStatePurchased:
        case SKPaymentTransactionStateRestored:
            receipt = [ta transactionReceipt];
            [self performSelectorInBackground:@selector(validateFromServer) withObject:nil];
            break;
        case SKPaymentTransactionStateFailed:
            [self purchaseFailed];
            break;
    }

    if(!ta.transactionState == SKPaymentTransactionStatePurchasing){
        [[SKPaymentQueue defaultQueue] finishTransaction:ta];

    }
}

}}

[self purchaseFailed]常にヒットし、ユーザーに通知するだけです。ここで何が間違っている可能性がありますか?(私はiOSと-明らかに-アプリの購入においてiOSに不慣れです)。ありがとう。

更新:入力を間違えると別の(無効なログイン)メッセージが表示されるため、テストアカウントの資格情報は正しいです。

4

2 に答える 2

1

回答が遅れて申し訳ありません。あなたはすでにあなたの問題を解決していると思いますが、私もこの問題を抱えていました。私の解決策は、復元購入メソッドを自動的に実行することでした。

ありがとう

于 2013-10-12T23:17:49.193 に答える
0

しばらく苦労しましたが、本番環境で問題が発生していないことに気づきました。おそらくサンドボックスサーバーの問題でした。

于 2012-08-07T15:33:07.113 に答える