一.簡介
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