前言:最近项目需要切换到iOS平台做一些提交审核和支付对接相关的工作,上一篇刚分享了最新的iOS10提交审核的一些坑,这篇分享一些内购相关的流程。
Unity iOS内购
思路:
Unity调用iOS内购代码实现
效果图:
重要提示:
测试一定要用沙盒账号,否则无效!
流程
这里就不重复写了,直接上截图
OC代码:
IAPInterface(主要是实现Unity跟OC的IAP代码的一个交互作用,等于是一个中间桥梁)
1 | #import <Foundation/Foundation.h> |
1 | #import "IAPInterface.h" |
IAPManager(真真的iOS的购买功能)
1 | #import <Foundation/Foundation.h> |
1 | #import "IAPManager.h" |
Unity中调用的C#代码
1 | using UnityEngine; |
Git地址点击下载
欢迎关注我的围脖
==================== 迂者 丁小未 CSDN博客专栏=================
MyBlog:http://dingxiaowei.cn MyQQ:1213250243
Unity QQ群:375151422
====================== 相互学习,共同进步 ===================
iOS 内购验证
如果我们不做任何处理的话,越狱机是可以直接绕过支付验证直接获得结果的,这样对于我们辛辛苦苦的开发者来说简直噩耗,所以我们有必要了解一下内购验证相关的知识,以及知道如何去预防这样的事情。
校验文章
http://www.cnblogs.com/zhaoqingqing/p/4597794.html
相关资料
- https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ReceiptFields.html#//apple_ref/doc/uid/TP40010573-CH106-SW1
- http://hpique.github.io/RMStore-presentation-for-NSBarcelona
- http://asciiwwdc.com/2014/sessions/305
本地验证:
优点:
- 无需服务器验证
缺点:
- 项目里需要引入 OpenSSL
链接:
- http://stackoverflow.com/a/20039394/656428
- https://github.com/robotmedia/RMStore#receipt-verification
- https://github.com/robotmedia/RMStore/wiki/Receipt-verification
服务器验证:
优点:
- server-side verification over SSL is the most reliable way to determine the authenticity of purchasing records
缺点:
- 需要部署服务器,服务器和 App 之间的数据交换可能更容易被破解
链接:
双重验证:
先本地验证一次,后服务器再验证一次(感觉没必要)
其他:
- http://receigen.etiemble.com Mac App,直接生成代码,Xcode 集成
常见的破解方法:
- http://blog.hussulinux.com/2013/04/apple-ios-in-app-purchase-hacking-how-to-prevent-specially-com-zeptolab-ctrbonus-superpower1-hacks/
- http://stackoverflow.com/a/17687827/656428
总的来说:
- 服务器验证更适合有自己账号系统的 App,直接可以对 IAP 破解免疫,否则一样很简单就被破解
- 本地验证使用下面的方法来增强验证
- Check that the SSL certificate used to connect to the App Store server is an EV certificate.
- Check that the information returned from validation matches the information in the SKPayment object.
- Check that the receipt has a valid signature.
- Check that new transactions have a unique transaction ID.