一.简介
1.功能
IAP可用于支付 内容,功能,服务,订阅。不能用来支付 实物,实体服务,虚拟货币,带有色情/仇恨/暴力/赌博等等性质的内容或服务
2.商品按类型可分为:
Consumable 每次都收费(消耗品)
Non-consumable 付费一次(非消耗品)
Auto-renewable subscriptions 自动同步订阅(服务有效期间内自动同步其他机器上的订阅)
Free subscriptions 免费订阅 仅用于 Newsstand-enabled apps.
Non-renewing subscriptions 非自动同步订阅,由开发者决定其他机器是否更新
3.交易模式
Built-in Product Model 內建product模式,这种方式写死了可以购买哪些物品,提供什么服务
Server Product Model 服务器提供product模式,这种方式就是比较灵活的通过自己的服务器控制提供哪些商品,购买后提供哪些东西
二.程序流程
1.程序添加
1)添加一个不带通配符的APP ID,在itunesconnect中添加程序
2)设置iap,添加商品(包括id,名称,详细描述,截图等)
3)添加测试帐号
2.程序内代码编写
1)检查用户是否关闭了程序内付费[SKPaymentQueue canMakePayments]
2)根据给定的标识集合取得商品列表
3)根据用户选择的商品显示支付页面
附:相关类
SKProduct 商品 // 本地化描述 @property(nonatomic, readonly) NSString *localizedDescription // 本地化标题 @property(nonatomic, readonly) NSString *localizedTitle // 价格 @property(nonatomic, readonly) NSDecimalNumber *price // 地域 @property(nonatomic, readonly) NSLocale *priceLocale // 标识符 @property(nonatomic, readonly) NSString *productIdentifier
SKProductsRequest 请求商品列表 @property(nonatomic, assign) id<SKProductsRequestDelegate> delegate - (id)initWithProductIdentifiers:(NSSet *)productIdentifiers SKProductsRequestDelegate 请求商品列表委托 - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response SKProductsResponse 商品列表返回 // 无效产品id列表 @property(nonatomic, readonly) NSArray *invalidProductIdentifiers // 产品列表 @property(nonatomic, readonly) NSArray *products
SKPayment 付款 // 产品标识 @property(nonatomic, copy, readonly) NSString *productIdentifier // 数量 @property(nonatomic, readonly) NSInteger quantity @property(nonatomic, copy, readonly) NSData *requestData
// 生成一个payment + (id)paymentWithProduct:(SKProduct *)product
SKPaymentQueue 付款队列 @property(nonatomic, readonly) NSArray *transactions // 检测是否可以内支付 + (BOOL)canMakePayments + (SKPaymentQueue *)defaultQueue // payment 必须有一个产品id并且quantity>0,否则异常,添加后就会依次显示支付窗口 - (void)addPayment:(SKPayment *)payment // 添加一个委托 - (void)addTransactionObserver:(id < SKPaymentTransactionObserver >)observer // 结束交易 - (void)finishTransaction:(SKPaymentTransaction *)transaction - (void)removeTransactionObserver:(id < SKPaymentTransactionObserver >)observer // 查看有哪些已经restored的交易 - (void)restoreCompletedTransactions
SKPaymentTransaction 交易流程 @property(nonatomic, readonly) NSError *error // 如果是restored的流程,他有个原始流程 @property(nonatomic, readonly) SKPaymentTransaction *originalTransaction @property(nonatomic, readonly) SKPayment *payment // 交易日期 @property(nonatomic, readonly) NSDate *transactionDate // 标识 @property(nonatomic, readonly) NSString *transactionIdentifier // 回执 @property(nonatomic, readonly) NSData *transactionReceipt // 状态:成功,失败,进行中,restored @property(nonatomic, readonly) SKPaymentTransactionState transactionState
参考:http://iamgarlic.blogspot.com/2011/04/ios-in-app-purchase-1.html
http://iamgarlic.blogspot.com/2011/04/ios-in-app-purchase-2.html