【发布时间】:2011-05-04 17:42:00
【问题描述】:
在我的 iPhone 应用中,我使用 StoreKit 让用户可以在应用中购买订阅。我遇到的问题是,每次我启动应用程序 SKPaymentTransactionStatePurchased 时都会突然发送给观察者,因此应用程序会一次又一次地尝试购买订阅。如果我尝试从应用程序的订阅列表中再次购买订阅,我会收到一条消息,提示“您已经购买了此应用内购买,但尚未下载。”然后使用 SKErrorPaymentCancelled 调用 failedTransaction。
编辑:我现在在 Apple 开发者论坛中找到了很多关于此的帖子,例如:https://devforums.apple.com/thread/73818 和 /thread/73572,似乎很多开发者都有同样的问题..
这是我正在使用的代码,你能看出它有什么问题吗?
-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction *transaction in transactions)
{
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
[self completeTransaction:transaction];
break;
case SKPaymentTransactionStateFailed:
[self failedTransaction:transaction];
break;
case SKPaymentTransactionStateRestored:
[self restoreTransaction:transaction];
default:
break;
}
}
}
-(void) failedTransaction: (SKPaymentTransaction *)transaction
{
if (transaction.error.code != SKErrorPaymentCancelled)
{
NSLog(@"Error");
} else {
NSLog(@"Cancel");
}
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
-(void) restoreTransaction: (SKPaymentTransaction *)transaction
{
[self subscribe:transaction];
}
-(void) completeTransaction: (SKPaymentTransaction *)transaction
{
[self subscribe:transaction];
}
-(void)subscribe: (SKPaymentTransaction*)transaction {
NSInteger errorCode = //Connects to my server that verifies receipt with Apple server etc..
if (errorCode==0) {
[self provideContent];
}
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
【问题讨论】:
标签: iphone in-app-purchase storekit