请求成功,就能获取Products,一个NSArray,里面就是SKProduct 对象的产品信息了。产品信息有名称,价格,等等,很容易找到。这些东西只是在显示信息时有用,购买时不需要,只要用SKProduct就行了
Step 7:购买
SKPayment *payment = [SKPaymentpaymentWithProduct:product];
[[SKPaymentQueuedefaultQueue] addPayment:payment];
代码如上。然后就开始连接App Store了。主要看下面
#pragma mark - SKPaymentTransactionObserver
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction *transactionin transactions) {
switch (transaction.transactionState) {
caseSKPaymentTransactionStatePurchased:
[selfcompleteTransaction:transaction];
break;
caseSKPaymentTransactionStateFailed:
[selffailedTransaction:transaction];
break;
caseSKPaymentTransactionStateRestored:
[selfrestoreTransaction:transaction];
default:
break;
}
}
}
这里说一下上面的第三种交易状态Restore,恢复。这个是这样的。如果有些人在iPhone上用一个账号购买了一个产品,那么在iPad上又下载了这个应用,还要再重新购买吗?不用了,通过Restore在App Store中检测你这个账号的购买记录,如果有购买记录存在,那就不用再次购买了,直接restoreTransaction。
接下来就是根据购买的状态分别进行处理
- (void) completeTransaction: (SKPaymentTransaction *)transaction { // Your application should implement these two methods. [self recordTransaction:transaction]; [self provideContent:transaction.payment.productIdentifier]; // Remove the transaction from the payment queue. [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; } 一般我们用NSUserDefaults来进行交易的记录就行了。
注意程序中finishTransaction这一行代码,这样TransactionObserver就不再监测这个交易了。
其他状态Restore,failed都是差不多的处理,这些代码在开发文档中有。
当然,对于restore,还有一个Method要注意
- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error
如果restore失败,可以显示相应的信息提示毕业论文
Step 8:附加
在整个购买过程中,我们一般要给用户一下提示信息,比如等待,比如正在连接,比如交易已完成。要实现这些功能,就应该用notification,在上面的交易环节加入postNotification,然后对notification进行有效处理。本文只讲In-App Purchase,关于notification的编程不做介绍。
基本上,通过上面的环节就能完成整个应用内购买了。当然,从安全性上考虑,Apple在交易完成后会发送验证信息,通过发送验证信息给App Store来判断这笔交易是否出自App Store,从而确认交易的合法性。
关于这方面,Apple 有一个代码包提供了validationController来实现很方便的验证。 上一页 [1] [2]
|