2012-07-14 6 views
7

こんにちは、私はInapp-購入で復元機能を実装する必要がありながら、これはボタン「復元」呼び出しているメソッドpaymentQueue:(SKPaymentQueue *)キューupdatedTransactions:restoreCompletedTransactions

をしたため(NSArrayの*)トランザクションは、呼び出されません
-(void)restorePurchasedProductsWithProductId:(NSString*)prodID 
{ 
    _productIdsArray = [[NSMutableArray alloc] init]; 
    productID = [prodID retain]; 
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 
} 

リンゴidのパスワードを入力するためのポップアップが表示されます。それ以降は何も起こりません。

私はそれは私がこの

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 
{ 
    NSLog(@"paymentQueue"); 
    for (SKPaymentTransaction *transaction in transactions) 
    { 
     switch (transaction.transactionState) 
     { 
      case SKPaymentTransactionStatePurchased: 
       [self completeTransaction:transaction]; 
       break; 
      case SKPaymentTransactionStateFailed: 
       [self failedTransaction:transaction]; 
       break; 
      case SKPaymentTransactionStateRestored: 
       NSLog(@"restored"); 
       [self restoreTransaction:transaction]; 
       break; 
      default: 
       break; 

     } 
    } 
} 

のようでしたが、問題は上記の方法は、この

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue 

どちらを呼び出していないです

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 

を呼び出すことをどこかで読ん

-(void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error 

私はまた、必要なプロトコルが含まれているこれらのデリゲートメソッドは、復元プロセスのために呼び出しされていない理由を

いくつかの体は私を助けることができます。 私はテストアカウントで試しています。

答えて

11

paymentQueueRestoreCompletedTransactionsFinished:paymentQueue: restoreCompletedTransactionsFailedWithError:を実装するクラスが支払いキューのオブザーバーとして登録されていることを確認する必要があります。

あなたはUIViewControllerにこのコードを書いた場合は、お使いのviewDidLoadでこれを追加してみてください:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 

viewDidDisappear中を:

[[SKPaymentQueue defaultQueue] removeTransactionObserver:self]; 
1
私はまた、1つのような問題に直面しています

研究&修正した後、私は気づい:

[[SKPaymentQueue defaultQueue] finishTransaction:transaction] 

方法をすぐに実装されていません。

通常、私はtransaction.transactionReceiptをチェックし、それを私のサーバに送ります。それ以降は、トランザクションを終了するコールバックを送信します。最後に、私は問題をすぐに終了取引を呼び出さないことを理解した。私のコードを変更すると、私のアプリが動作します。

興味深い部分は、私がサンドボックス環境でテストすると、すべて正常に動作します。しかし、AppStoreアプリでうまく動作しませんでした。私がこの変更を加えたとき、私の問題は解決されました。

関連する問題