アプリ内購入を機能させるのに問題があります。新しいテストユーザーを作成し、パスワードでOKを押した後、iPhoneでデバッグするたびに、「これは既に購入しましたが、ダウンロードされていません」というメッセージが自動的に表示されます。
これをviewDidLoadに追加しました:
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
私の購入機能は次のようになります。
- (IBAction)purchaseProduct:(id)sender {
SKProduct *product = [productArray objectAtIndex:0];
SKPayment *payment = [SKPayment paymentWithProduct:product];
[[SKPaymentQueue defaultQueue] addPayment:payment];
}
私も持っています:
-(void) paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction *transaction in transactions) {
if ([transaction transactionState] == SKPaymentTransactionStatePurchased) {
[self transactionDidComplete:transaction];
} else if ([transaction transactionState] == SKPaymentTransactionStateFailed) {
[self transactionDidFail:transaction];
} else if ([transaction transactionState] == SKPaymentTransactionStateRestored) {
[self transactionDidRestore:transaction];
} else {
NSLog(@"Unhandled case: %@", transaction);
}
}
}
テストユーザーアカウントのパスワードを入力せずに購入ボタンを押すとすぐに、次のエラーが発生します。
Unhandled case: <SKPaymentTransaction: 0x25a9a0>
つまり、パスワードを入力して[OK]をクリックして購入する前に、支払いキューが呼び出されていると想定しています。
関数「transactionDidComplete、transactiondidFail、transactionDidRestore」に以下のコードがあります
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];