苹果内购问题

这篇博客详细介绍了苹果内购(IAP)的实现流程,包括本地购买和服务器购买两种模式,以及安全支付与receipt收据验证。作者推荐了几篇关于IAP的详细教程,并强调了验证收据的重要性,指出开发者应避免与苹果服务器直接交互,而是通过APP store进行通信。文章还提及了在内购过程中可能遇到的问题,如网络异常、用户取消购买、无法连接到iTunes store等,并给出了错误代码的处理策略。最后,讨论了在应用启动时设置SKPaymentQueue代理来处理断网或应用闪退时的交易状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在研究苹果内购功能,所以,在网上找了一些资料,进行学习。但是,内购功能在实现的过程中,有很多坑,笔者算是真的遇到了好多啊,下面也是自己对内购的一些心得与体会吧!

我这里说的可能不太详尽,所以,我先把再网上看到的一些帖子贴在这里,以便大家做内购的时候,方便查找相关信息。

这里是一篇写的比较全面的帖子,但是没有写中间问题处理: <iOS开发内购全套图文教程>

在网上搜了一些相关的帖子,简单归纳总结了一下,觉得论坛里有一个叫Teng的世界的大神,写了三篇博客,写的很详细:


 【IAP支付之一】In-App Purchase Walk Through 整个支付流程

 

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


 

【IAP支付之三】苹果IAP安全支付与防范 receipt收据验证

大家在做内购之前,推荐看一下!

但是,毕竟我们开发的IAP是在苹果的平台上面运行,所以,如果英语能力好的话,最好去苹果官网无看<官方指南>,里面涉及到了一些论坛的贴子里没有提到过的问题,而这些内容,也很有可能会被大家忽略。下面是<官方文档中文翻译>,可以对照官方文档查看。但有时候还会出现相关的问题。好吧,废话不多说,下面开始说IAP的实现以及具体会遇到的问题,我这里可能会涉及到好多需要注意的问题,流程性的东西会少一些。大家尽量在读本篇博客之前,先把上面的几个博客看一下。

首先,我们要去iTunes store创建几个我们需要在内购中使用到的产品,记住,产品的ID一定要唯一。苹果官方提到了,IAP购买项有几种类型:

  • Consumable products:消耗类产品 

  • Non-consumable products:非消耗类产品

  • Auto-renewable subscriptions:自动更新订阅产品 

  • Non-renewable subscriptions. 非自动更新订阅产品

  • Free subscriptions. 免费订阅产

我们通常再游戏中用到的游戏币属于消耗类产品,赛车轨道等属于非消耗类产品,通常这2种会比较常见。我当时用的是消耗类产品。

当完成产品创建之后,去iTunes store申请一个测试账号,就要开始编写代码了。在编写代码之前,最重要的,是要了解整个内购实现的流程。这里找到了一个比较好的对<流程解说的帖子>,下面是流程图:



归根结底,其实,我们一直在和APP store在打交道,而并不是和苹果的服务器进行打交道,所以,大家要避免这个误区,而APP store才和苹果服务器进行打交道,这一层,其实我们基本是不需要考虑的。

流程:

1.首先,从图上的第一步,客户端向自己的服务器发送了一个请求,请求产品列表,然后,我们自己的服务器会返回给客户端产品的identifiers,也就是我们在创建产品的时候,设置的产品ID,当获取之后,我们需要根据获得的identifiers向APP store请求产品的详细信息。但对于某些应用来说,可能产品种类没有什么变动,所以,就直接将identifiers集成在了应用中,有的是直接放在了plist文件中,需要的时候,直接调用,不需要向服务器发送请求,获得订单信息。但这样也有缺点,当产品发生变动的时候,需要发布新的版本,更新应用才行,所以,不推荐使用这种方案。

2.当获取了产品信息之后,要刷新UI,展示给用户,让用户选择需要购买那种产品,然后点击购买按钮。当用户购买某个产品的时候,我们的APP会向APP store发送购买请求,APP store接收到,购买请求之后,会进行订单的处理,然后,返回给我们购买的结果,同时,从上面的途中,我们还可以看到,返回到客户端有一个receipt data,这个东西其实是用来进行校验的证书(其实是很长的字符串,大概3000多个字符吧),防止有人使用越狱插件,从而反复获取我们的产品,尤其是类似金币这种。

3.当客户端获得购买结果之后,将支付信息(包括验证证书)发送到服务器,服务器向AppStore发起验证,这个验证必须是post请求,将数据以json格式发送过去,同时,receipt要进行base64编码,当苹果确认之后,会给我们返回状态码,告诉我们是否成功。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值