使用IAP出售的每件物品都需要通过iTunesConnect注册,提供名称,描述,和价格
每个物品都有个product identifier,应用程序通过StoreKit连接到AppStore,就是通过这个product identifier来获得这个物品的信息的
将物品交付给用户,可以使用内置模式(Built-in Product Model)或者服务器模式(Server Product Model)
内置模式示意图
服务器模式示意图
采用这种模式,商品配置改变不需要更新程序,而且这种模式更加安全和更有弹性。
发送请求到App Store的流程示意图:
SKRequest:一个抽象类,负责发送请求到商店
SKRequestDelegate:一个protocol,提供了请求成功的处理函数接口,和发送失败的处理函数接口
查询商品信息的流程示意图:
SKProductsRequest:这个对象保存了需要查询的物品的标识字符串
SKProductsRequestDelegate:一个protocol,负责处理接受返回后的数据
SKProductsResponse:这个对象保存了SKProduct
SKProduct:这个对象保存了保存在AppStore的信息
加一个购买请求到购买队列的流程图:
SKPayment:包含了product identifier和需要购买的数目,可以将相同的物品放入到队列里多次。用户可以在设置中禁止购买功能,所以在使用这个功能的时候,需要调用队列的canMakePayments方法判断下是否可以使用。
SKPaymentQueue:负责与AppStore交互
SKPaymentTransaction:当每个payment被加到队列中的时候,都会创建出一个transaction对象,每个transaction对象保存了当前这次交易的状态,应用程序可以通过它查询状态。
SKPaymentTransactionObserver:是一个protocol.它负责检测交易是否完成,负责发送交易成功的物品并将这些交易移除出队列。它应该在程序加载的时候就应该创建,而不仅仅在用户要购买物品的时候才创建,这样应用程序上一次启动时候的交易,在这次启动的时候也会及时得获得信息。
一旦交易被处理并被移出交易队列中,应用程序就再也看不见这次交易了。StoreKit提供了一种内建机制来为非消耗品,自动刷新订阅,免费订阅等服务恢复交易信息。
通过调用队列的restoreCompletedTransactions方法就可以恢复这些交易。这样AppStore就会为每个完成后的交易产生新的交易对象,这些对象的originalTransaction属性保存了之前的交易数据。应用程序通过这些数据来解锁相应的购买内容。在AppStore恢复交易之后,它会通过调用购买队列监听者的paymentQueueRestoreCompletedTransactionsFinished:方法
iTunesConnect网址:https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa
登陆进去后(企业级账号需要用主开发账号才能进去),在主页里面点击ManageYourApplications按钮
然后创建一个App(按照提示一步步做就可以了)
创建好了之后,然后点击创建好的App,就会看见如下菜单
点击Manage In-App Purchases
一开始就只出现了Free Subscription的选项,这里需要去“Contracts,Tax,and Banking"去同意个协议就会出现其他的了
Contracts,Tax,and Banking:管理银行账号,联系人和税收
Manage Users:管理用户,比如主账号和测试付费的账号(测试App)
Manage Your Applications:管理应用程序的,所发布的应用和每个应用的状态都在这里
商品的类型一旦选定后就不可更改
Consumable:消耗品,每次下载都需要付费
Non-Consumable:非消耗品,只需要付费一次
AutoRenewableSubscriptions:自动订阅
FreeSubscriptions:免费订阅 只能在Newsstand-enabled app中使用
Non-RenewingSubscription:不自动更新的订阅,需要应用程序提示用户到期时间
后三种只适用与ios app,不能在OS X apps里面使用
FreeSubscriptions表格
Reference Name:商品的名字,不能超过255字符
ProductID:由数字和字母构成