在最近的这个项目中做到了应用内购买钻石功能,在这个功能点上之前也是没有任何经验 通过百度得到了答案,这里博主就不把应用内购买的代码列出来
网上有很多,难度并不大,但是应用内购买应注意的事项我认为有以下几点:
1.在ituns connect主页里保证税务,协议和银行业务的功能项已经开通好了,否则是无法注册购买的产品的信息
2.注册购买产品的product id需要用到程序代码里,所以程序代码中product id 就是注册的产品id.
3.在程序代码中拿到产品信息后支付完成后需要拿到一个叫做SKPaymentTransaction对象里边的一个属性:transactionReceipt 返回的是一个nsdata类型
但是我们应该用字符串接收,因为这些数据是要发送给自己的服务器进行验证的(verifyReceipt)一句代码如下:
NSString *templeTransactionRe = [[NSString alloc] initWithData:transaction.transactionReceipt encoding:NSUTF8StringEncoding];
获得收据后需要发送给服务器验证,因为这里涉及到测试服务器和正式服务器两个地址,所以我当时是通过判断收据中是否包含关键字“sandbox”(也可以通过返回的code码) 如果有这个value 说明是测试环境下拿到的收据 这时我们需要服务器选择测试地址进行验证,否则是正式环境的地址
博主当初在第三步花了比较长的时间 没经验没办法。所以现在特意写下来
4.缓存:这是第三步涉及到的缓存 是因为苹果扣钱在先 本地服务器验证收据在后!如果苹果已经扣走了用户的钱,而在本地服务器请求验证时突然间网络断了或是别的原因导致验证失败而没有返回给用户相应的虚拟币或钻石之类的(这种情况很严重的),这时需要把收据和交易单号存到本地数据库,在用户下一次进入到此界面应及时调出数据库中的收据再一次请求本地服务器返回给用户相应的虚拟币或钻石!这样不会让用户白白损失“几个亿”(切记这里的缓存的重要性)