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