1、首先验证是否能够支付
- (BOOL)checkCanMakePayment
{
if ([SKPaymentQueue canMakePayments]) {
return YES;
} else {
return NO;
}
}
2、其次
获取需要支付商品信息
- (void)purchaseProductWithInden
tifier:(NSString *)identifier
{
if (identifier == nil || [@"" isEqualToString:identifier]) {
if (self.delegate && [self.delegate respondsToSelector:@selector(AppStorePurchaseSuccess:)]
{
[self.delegate AppStorePurchaseSuccess:identifier];
}
return;
}
[[ITTActivityIndicator currentIndicator] displayActivity:@"获取商品信息中..."];
SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifie
rs:[NSSet setWithObject:identifier]];
request.delegate = self;
[request start];
}
3、接收来自App Store的回应
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
[[ITTActivityIndicator currentIndicator] hide];
NSArray *myProducts = response.products;
// Populate your UI from the products list.i
// Save a reference to the products list.
if (myProducts && [myProducts count] > 0) {
SKProduct *selectedProduct = [myProducts objectAtIndex:0];
SKPayment *payment = [SKPayment paymentWithProduct:selectedProduct];
[[SKPaymentQueue defaultQueue] addPayment:payment];
}
else {
[[ITTActivityIndicator currentIndicator] displayActivity:@"获取商品信息失败!"];
}
}
4、对支付进行相应的处理
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction *transaction in transactions)
{
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchasing:
[[ITTActivityIndicator currentIndicator] displayMessage:@"连接App Store..."];
break;
case SKPaymentTransactionStatePurchased:
[self completeTransaction:transaction];
break;
case SKPaymentTransactionStateFailed:
[self failedTransaction:transaction];
break;
case SKPaymentTransactionStateRestored:
[self restoreTransaction:transaction];
break;
default:
break;
}
}
}
另外:如何恢复产品,其实已经得到了,这里再详细描述下:
首先向AppStore请求恢复交易:
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
然后当用户输入正确的AppStore帐户,进入
![]()
然后再下面的函数处理就好了!
- (void) restoreTransaction: (SKPaymentTransaction *)transaction
{
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
PS: StoreKit不支持模拟器。。(^_^)
PPS:现在的模拟器已经可以支持内支付了。
原文地址:http://blog.sina.com.cn/s/blog_626e5d6901015fk7.html