转载自:http://blog.liuhongwei.cn/iphone/in-app-purchase_tips/
前些天想把内容拆开买,apple却不允许了,而是推荐使用In App Purchase把内容组合到一起。
找到一个超详细的In App Purchase攻略
http://troybrant.net/blog/2010/01/in-app-purchases-a-full-walkthrough/
苹果官方的IAP编程指南也可以参考。
app必须使用非通配符的ID。本来有几个程序是使用通配符的App ID,试了一下,不是返回invalid purchase,就是返回SKError: Cannot connect to iTunes Stor。申请了一个新的唯一App ID,然后用于测试app,再申请一个IAP的product id,一切正常了。
测试中还看到device console中的一条错误信息,iTouch中的浏览器直接访问没问题,原因不明,网上也查不到,设置了一个代理服务器就不显示该错误信息了。后来又测试了一下,发现该消息不准确,取消代理服务器后,使用正确app id的app发送正确product id,一切正常。
Fri Jul 30 11:18:49 iPod-touch /System/Library/PrivateFrameworks/iTunesStore.framework/Support/itunesstored[4180] <Error>: URL: http://sandbox.itunes.apple.com/bag.xml?ix=2> Heuristics Failed, NOT PIPELINING
某product买了以后再买non-consumable的product,iTune会自动弹出消息,告知用户已经买过了但没下载,可以点击确定下载,点击确定后,iTune会给程序一个transaction complete的消息,然后界面会自动弹出消息,购买成功。所谓的下载应该指的是再次返回一个transaction complete消息,让app有机会处理购买成功。可见
- iTunes会记录每个用户购买了哪些IAP product
- 购买过还可以再次购买non-consumable的product,但iTunes不会重复扣钱,却仍会返回成功消息。
例子和教程上,正常的IAP流程是,发送product id列表,接受所有有效product列表;然后,用户购买某个product。但是,经过测试,用户可以省略发送接收有效product列表这个步骤,直接购买某个product,当然这样会有些风险,比如product被苹果移除了,但是正常情况下问题不大。