关于IAP程序类购买使用说明

19 views
Skip to first unread message

linux agui

unread,
Feb 2, 2012, 9:35:46 PM2/2/12
to iOS development
Come From: JAZZ AK-47 404279523 童鞋

关于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

Reply all
Reply to author
Forward
0 new messages