【IAP支付之二】In app purchase 本地购买和服务器购买两种购买模式

开发者在游戏中通过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.游戏需要经常更改道具信息。建议网站上获取信息并在游戏内更新显示内容。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-16 11:54:51

【IAP支付之二】In app purchase 本地购买和服务器购买两种购买模式的相关文章

javaweb学习总结(二十一)——JavaWeb的两种开发模式

SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. 一.JSP+JavaBean开发模式 1.1.jsp+javabean开发模式架构 jsp+javabean开发模式的架构图如下图(图1-1)所示 图1-1 在jsp+javabean架构中,JSP负责控制逻辑.表现逻辑.业务对象(javabean)的调用. JSP+JavaBean模式适合开发业务逻辑不太复杂的web应用程序,这种模式下

javaweb学习总结(二十一)——JavaWeb的两种开发模式【转】

原文 地址:http://www.cnblogs.com/xdp-gacl/p/3908610.html SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. 一.JSP+JavaBean开发模式 1.1.jsp+javabean开发模式架构 jsp+javabean开发模式的架构图如下图(图1-1)所示 图1-1 在jsp+javabean架构中,JSP负责控制逻辑.表现逻辑.业务对象(j

javaweb(二十一)——JavaWeb的两种开发模式

一.JSP+JavaBean开发模式 1.1.jsp+javabean开发模式架构 jsp+javabean开发模式的架构图如下图(图1-1)所示 图1-1 在jsp+javabean架构中,JSP负责控制逻辑.表现逻辑.业务对象(javabean)的调用. JSP+JavaBean模式适合开发业务逻辑不太复杂的web应用程序,这种模式下,JavaBean用于封装业务数据,JSP即负责处理用户请求,又显示数据. 1.2.JSP+JavaBean开发模式编写计算器 首先分析一下jsp和javabe

CentOS6.5下搭建ftp服务器(三种认证模式:匿名用户、本地用户、虚拟用户)

CentOS 6.5下搭建ftp服务器 vsftpd(very secure ftp daemon,非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费,此外,还具有很高的安全性.传输速度,以及支持虚拟用户验证等其他FTP服务程序不具备的特点,下面开始搭建: 1.用root 进入系统 2.使用命令 rpm  -qa | grep vsftpd 查看系统是否安装了ftp,若安装了vsftp,使用这个命令会在屏幕上显示vsftpd的版本 3.如果安装了,可

二维数组的认识及其表示元素的两种方式

/* ============================================================================ Name : TeatArr.c Author : lf Version : Copyright : Your copyright notice Description : 二维数组的认识以及其表示元素的两种方式 备注说明 1 要理解二维数组的存储方式. 2 实际上利用a[i][j]的方式并不"正统",这是这靠近我们的 常识一些

Spring框架笔记(二十四)——Spring中的JDBC的两种使用方式

为了使 JDBC 更加易于使用, Spring 在 JDBC API 上定义了一个抽象层, 以此建立一个 JDBC 存取框架. 作为 Spring JDBC 框架的核心, JDBC 模板的设计目的是为不同类型的 JDBC 操作提供模板方法. 每个模板方法都能控制整个过程, 并允许覆盖过程中的特定任务. 通过这种方式, 可以在尽可能保留灵活性的情况下, 将数据库存取的工作量降到最低. 现在我们来介绍一下,各种CRUD可能用到的Spring JDBC的API: 使用 JdbcTemplate 更新数

AppStore苹果应用支付开发(In App Purchase)翻译

http://yarin.blog.51cto.com/1130898/549141 一.In App Purchase概览 Store Kit代表App和App Store之间进行通信.程序将从App Store接收那些你想要提供的产品的信息,并将它们显示出来供用户购买.当用户需要购买某件产品时,程序调用StoreKit来收集购买信息.下图即为基本的store kit 模型: Store Kit的API只是为程序添加In App Purchase功能的一小部分.你需要决定如何去记录那些你想要提

iap支付总结

最近应公司要求,集成iap支付,由于之前没做过,公司就我一个iOS,所以遇见不少坑,最后终于写完了,鉴于网上代码多的是缺胳膊少腿,所以我来一份全的,无废话的. 包括服务器验证,检验漏单的两种方式的.希望可以帮助到后续的伙伴们. In-App-Purchase 首先. 先熟悉一下整个iap支付的基本流程 1. 程序向服务器发送请求,获得一份产品列表. 2. 服务器返回包含产品标识符的列表. // 就是获得产品ID < productID> 3. 程序向App Store发送请求,得到产品的信息.

Vsftpd文件传输服务(三种认证模式:匿名开放 、本地用户、虚拟用户)

FTP是一种在互联网中进行中文件传输的协议,基于客户端/服务器端模式,默认使用20.21号端口,其中端口20(数据端口)用于进行数据传输,端口21(命令端口)用于接受客户端发出的相关FTP命令与参数. FTP的出现解决了各类设备.各类操作系统之间文件传输问题,极大地方便了用户通过网络资源的获取. FTP服务器常部署于企业内网中,具有容易搭建.方便管理的特点,目前有些FTP客户端工具还可以支持文件的多点下载以及断点续传,因此FTP服务得到了广大用户的青睐. FTP协议有两种工作模式: 1. 主动模