我在使用应用内购买时遇到问题。每次我创建一个新的测试用户并在我使用密码点击确定后在我的 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>
这意味着,我假设在我输入密码并点击确定进行购买之前调用了支付队列!
我在函数“transactionDidComplete、transactiondidFail、transactionDidRestore”中确实有下面的代码
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
最佳答案
你需要处理SKPaymentTransactionStatePurchasing
类似于:
-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions{
//NSLog(@"updatedTransactions %@",transactions);
NSNumber *paymentOk = [NSNumber numberWithBool:NO];
for(SKPaymentTransaction *t in transactions){
//transaction failed
if(t.transactionState == SKPaymentTransactionStateFailed){
//[self doTransactionFailure:t.error.localizedDescription];
[[SKPaymentQueue defaultQueue] finishTransaction:t];
continue;
}
if(t.transactionState == SKPaymentTransactionStatePurchasing){
continue;
}
//transaction type here is success or restored
//extract the app object
if([t.payment.productIdentifier caseInsensitiveCompare:self.inAppPurchaseIdentifier]== NSOrderedSame){
NSLog(@"Got payment for %@",t.payment.productIdentifier);
paymentOk = [NSNumber numberWithBool:YES];
}
[[SKPaymentQueue defaultQueue] finishTransaction:t];
}
if([paymentOk boolValue]==YES){
[self.delegate didPurchaseWithIdentifier:self.inAppPurchaseIdentifier];
}
else{
[self.delegate didFailPurchaseWithIdentifier:self.inAppPurchaseIdentifier andReason:@"Unknown"];
}
}
关于ios - 应用内购买测试用户不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11961077/