开发者在游戏中通过iap让玩家支付,实际开发中遇到的问题:
1.StoreKit和AppStore之间的通信
一开始有担心游戏内部和AppStore通信的中间环节,其实这个完全不用考虑,StoreKit和AppStore之间的通信完全是有苹果内部处理的,不存在任何问题,我们所需要关心的就是返回给我们支付结果后(购买成功、失败、取消...)等环节的处理
Store Kit代表App和App Store之间进行通信。程序将从App Store接收那些你想要提供的产品的信息(网站后台配置的),并将它们显示出来供用户购买。
当用户需要购买某件产品时,程序调用StoreKit来处理购买信息。下图即为基本的store kit 模型:
2.本地购买和服务器购买
交付方式
苹果的购买交付机制有两种:内置类型(Built-in model)和服务器类型(Server model)通俗点就是本地模式和服务器模式。 不管使用那种模型,你都需要维护产品列表(从网站后台配置的产品列表),并保证当用户购买后,成功的交付产品。
(一)内置购买(本地/单机模式购买)
需要交付的产品已经在程序内部配置好(单机模式) eg.om.mtt.happbird.gold1 对应着商店金币道具1的购买。
注意:In App Purchase不提供购买补丁的功能。 如果需要更改app的bundle,你必须向App Store提交新的app版本。
通俗点就是设置好bundle id等信息后,不要瞎改...
单机模式购买流程如下:
上图显示了交付内置型产品的流程。
1. 程序通过bundle存储的plist文件得到产品标识符的列表。(从苹果网站后台下载产品列表,这个必须有)
2. 程序向App Store发送请求,得到产品的信息。
3. App Store返回产品信息。
4. 程序把返回的产品信息显示给用户(App的store界面)
5. 用户选择某个产品
6. 程序向App Store发送支付请求
7. App Store处理支付请求并返回交易完成信息。
8. App获取信息并提供内容给用户。
整个流程都是安全的,都是StoreKit和AppStore通信,你需要的做的就是设置和回调接受结果就好。
上面的过程已经OK了,如果从安全(游戏更加健壮)角度出发,在过程【8】之后,还应该有个向苹果服务器验证购买账单receipt的过程,不管是单机购买还是服务器验证购买。
(二)服务器类型
通俗点介绍:就是单机流程购买成功后,游戏客户端会获得购买结果:购买结果和账单receipt,如果你是单机模式并不考虑安全的情况下,就可以直接给玩家发放道具了。由于现在黑客猖狂,完全可以模拟苹果的回馈结果。我们需要做的就是:
购买成功 => AppStore回馈结果和receipt => 发送给服务器(我们自己的服务器非苹果服务器) => 服务器发送账单给苹果服务器 =>苹果服务器收到并验证 =>服务器收到账单检测结果 => 服务器处理结果(eg.加钱...) =>回馈客户端处理
这么做的安全性就是:不是你客户端说啥就是啥,等我验证了才知道你是真是假。
服务器类型的购买过程
1. 程序向服务器发送请求,获得一份产品列表。
2. 服务器返回包含产品标识符的列表。
3. 程序向App Store发送请求,得到产品的信息。
4. App Store返回产品信息。
5. 程序把返回的产品信息显示给用户(App的store界面)
6. 用户选择某个产品
7. 程序向App Store发送支付请求
8. App Store处理支付请求并返回交易完成信息。
9. 程序从信息中获得数据,并发送至服务器。
10. 服务器纪录数据,并进行审(我们的)查。
11. 服务器将数据发给App Store来验证该交易的有效性。
12. App Store对收到的数据进行解析,返回该数据和说明其是否有效的标识。
13. 服务器读取返回的数据,确定用户购买的内容。
14. 服务器将购买的内容传递给程序。
3.游戏内道具的信息配置和或获取
There are two possible methods to retrieve the products to display to the user: 1) hard-code the products into the app or 2)
get a list of products from a server. The second option is highly recommended as it allows you to modify products and pricing without having to update the iOS app. The first option may be appropriate if you only have products that unlock functionality locally
within the app and don’t need to be updated often.
如上,道具信息的配置有两种方式,一种是游戏内直接配置,第二种是从苹果服务器获取道具信息,是被强烈建议的,因为你可以从苹果网站后台修改信息,而不需要更新游戏版本(审核流程非常耗费时间)。不管使用那种模型,你都需要维护产品列表(从网站后台配置的产品列表),都需要嵌入StoreKit.framework
但这个不是死的,需要根据你游戏的情况而定:
1.游戏不需要经常换道具信息。游戏内配置好就妥妥的。
2.游戏需要经常更改道具信息。建议网站上获取信息并在游戏内更新显示内容。
版权声明:本文为博主原创文章,未经博主允许不得转载。