关于IAP程序类购买使用说明
配置产品详细见http://www.cocoachina.com/bbs/read.php?tid=69165
我们以the9edu plane为例
此程序不走服务器端
1.导入 StoreKit框架
新建MyStoreObserver 类
#import <Foundation/Foundation.h>
#import <StoreKit/StoreKit.h>
#import <StoreKit/SKPaymentTransaction.h>
@interface MyStoreObserver : NSObject
< SKPaymentTransactionObserver > {
}
- (void) paymentQueue:(SKPaymentQueue *)queue updatedTransactions:
(NSArray *)transactions;
- (void) PurchasedTransaction: (SKPaymentTransaction *)transaction;
- (void) completeTransaction: (SKPaymentTransaction *)transaction;
- (void) failedTransaction: (SKPaymentTransaction *)transaction;
- (void) paymentQueueRestoreCompletedTransactionsFinished:
(SKPaymentTransaction *)transaction;
- (void) paymentQueue:(SKPaymentQueue *) paymentQueue
restoreCompletedTransactionsFailedWithError:(NSError *)error;
@end
2 在程序中添加storeObsever,最好在applicationDidFinishLaunching中添加
//注册一个transaction observer到payment队列
//应用实例化一个transaction observer,并将其注册到payment队列。
MyStoreObserver *tempObserver = [[MyStoreObserver alloc] init];
self.observer = tempObserver;
[tempObserver release];
[[SKPaymentQueue defaultQueue] addTransactionObserver:self.observer];
3 发送付费请求,在相应的类中实现SKProductsRequestDelegate,别忘记定义自己产品的identifier
见:GameShop.h
//请求产品信息
#define kMyFeatureIdentifier yourProductIdentifiers (你自己的产品
identifiers)
SKProductsRequest *request= [[SKProductsRequest alloc]
initWithProductIdentifiers:
[NSSet setWithObject: kMyFeatureIdentifier]];
request.delegate = self;
[request start];
代理方法相关代码,如果请求成功的话就可以发送付费请求
#pragma mark request delegate
//!收到产品的消息
- (void)productsRequest:(SKProductsRequest *)request
didReceiveResponse:(SKProductsResponse *)response{
SKPayment *payment = [SKPayment
paymentWithProductIdentifier:kMyFeatureIdentifier];
[[SKPaymentQueue defaultQueue] addPayment:payment];
[request autorelease];
}
- (void)request:(SKRequest *)request didFailWithError:(NSError
*)error{
UIAlertView *alerView = [[UIAlertView alloc] initWithTitle:@"Alert"
message:[error localizedDescription] delegate:nil c
ancelButtonTitle:NSLocalizedString(@"Close",nil)
otherButtonTitles:nil]; [alerView show]; [alerView release];
}
4 接下来就是Apple自己的付费相关处理了,需要做是就是点击按钮来确定付费
5 交易完成后需要向Apple验证这次交易是否成功,要不然没成功就把产品给别人的话,那就亏了,在1中可以看到当交易成功时会调用自定义的
completeTransaction函数,在该函数中我们需要验证transactionReceipt 关于验证
SKPaymentTransaction的transactionReceipt transactionReceipt是只有当
SKPaymentTransaction完成时,即transactionState 被设置为
SKPaymentTransactionStatePurchased 或 SKPaymentTransactionStateRestored时
才被创建,因此只有这两种状态下能去验证transactionReceipt