IAP的几个问题
IAP是(In-APP Purchase),苹果商店内购。先来看看它的流程:
而实际运营过程中,经常会遇到这二个问题:
只要应用玩的人比较多,基本上都会遇到过此类问题,下面是来自搜索引擎的结果:
这种情况应该得到重视,对于用户而言实际上是钱已经消费掉了,但是元宝或者物品没有获得,这会让人很焦虑的。的确,作为一名开发人员,遇到这种情况,第一反映确实是苹果出了问题,流程(逻辑)上没有什么问题,但是在苹果自己处理的那些步骤里,它可能就出异常了,导致了上面的问题。而我们实际上应该有相应的解决方案,哪怕它并不“完美”,总比二手一摊什么事不做要强很多吧
“您已购买此APP内购买项目,此项目将免费恢复。”这个字面意思的确不好理解,“已购买”这三个字,个人推断是钱已经被苹果给扣掉了(点击这里可以查看一个例证>>)。但是并没有发货,订单已经创建而且钱也已经被扣,但在关闭订单的时候似乎遇到了异常。这个异常,我曾经这样测试过:
在同一wifi下,使用不同的二台设备,用同一个沙盒帐号、对同一款应用“同时”进行购买遇到过一次这个问题。
注:“同时” –> 指几乎同一时刻去点击商店来执行购买操作
得到的结果是,设备A购买物品M,与设备B购买物品之前没有关联,绝大多数情况下都能购买到物品。
“尚未下载”与“项目将免费恢复”其实有些类似,为什么呢?因为钱已经被扣掉了,不然不会提示“已购买”。
而我测试自己的应用,它的逻辑是收到SKPaymentTransactionStatePurchased状态后,通知后台发货,后台发货成功后返回客户端,客户端再将订单给关闭掉([[SKPaymentQueue defaultQueue] finishTransaction:transaction]; )。并不是收到苹果的响应后关闭订单,如果这样做会导致一个问题,玩家钱扣掉了,但是对应的商品始终未到帐,而且也无法恢复了(因为你调用了finish,将它从购买队列中删除了,后台苹果提供了[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];来进行恢复,但实际上这样做会比较复杂)。
而如果是苹果回调并返回SKPaymentTransactionStatePurchased状态,客户端在传给后台处理时出了问题了,而导致一至未调用finishTransaction方法关闭订单,这的确会出问题,但不应该是那种提示,如果有也应该是http响应内容的提示。不调用半单,再重启进游戏时,会进入补单流程,如果补单成功倒还好,如果失败,那么在该设备上将无法使用该Apple ID来购买该商品了(其它商品还是可以购买的),无论是你卸载应用再删除还是重启设备都没有用。唯一的办法就是先关单。
如果苹果IAP有一个超时的机制,上面所遇到的情况就能解释的通。这个超时,可能是手机客户端与苹果服务器通信的时长,因为遇到这类问题的时候,通常网络都较慢,而且这个提示绝不是某个应用的程序员写出来的(语句读起来都反人类)。
虽然说了这么多,依然还是没能把这个问题的前因后果原原本本讲清楚,尽管如此还是需要有一个解决方案来避免此类问题。我自己后来想到的一个方案是这样:
用户遇到这类问题肯定会找客服反馈,客服通过它提供的登录服务器id、角色名,来查找他的登录信息,从登录信息里再查找它的设备唯一标识,比如IDFA,然后在登录的时候给这个设备返回一个特殊的标记位(仅本次登录返回),如果满足条件,则执行“清单动作”,关闭所有未关闭的订单,让用户能继续消费。至于已经被苹果扣掉的钱,二种选择:
1、用户向苹果申诉,退款给他;
2、用户截取充值的记录,然后研发这边对比它的充值时的信息来甄别订单,对它进行补单操作;
参考链接:
ios内购(iap)关于问题“您已经购买了此程序内购买(In App Purchase)项目,但尚未下载"的解决方案
IAP的几个问题的更多相关文章
- LPC43xx系列使用IAP的注意事项
LPC43xx系列使用IAP的注意事项 Tags: LPC43xx IAP 单片机 LPC43xx IAP函数的调用 一般MCU的IAP是,厂商固化一段代码在芯片的某个区域,然后告诉你这个代码的入口地 ...
- IAP
release_check_url := "https://buy.itunes.apple.com/verifyReceipt" debug_check_url := " ...
- [Amazon] Amazon IAP for Unity
1> 下载amazon IAP3.0 for unity plugin 2> 根据 https://developer.amazon.com/public/apis/earn/in-app ...
- [Android] Google IAP unmaneged items服务器校验
android IAP unmaneged items 服务器校验 当成功IAP以后, 会在google服务器记录此次购买的状态. 可以通过Google Play Android Developer ...
- <转>iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!
原文地址:http://blog.csdn.net/xiaominghimi/article/details/6937097 //——2012-12-11日更新 获取"产品付费数量等于0 ...
- iOS应用内付费(IAP)开发步骤列表
iOS应用内付费(IAP)开发步骤列表 前两天和服务端同事一起,完成了应用内付费(以下简称IAP, In app purchase)的开发工作.步骤繁多,在此把开发步骤列表整理如下.因为只是步骤列表, ...
- 关于IAP的破解
介绍 大概在今年7月份,有俄罗斯黑客破解了苹果的应用内付费(In-App Purchases),设备在不越狱的情况下就可以免费获得来自苹果官网App Store里应用的收费道具.受影响的产品众多,包括 ...
- IAP 破解漏洞验证
IAP支付有个漏洞,用户使用的可能是IAP Free 或者俄罗斯破解什么的,所产生的交易号:170000029449420 product_id:com.zeptolab.ctrbonus.super ...
- [转]iOS 应用内付费(IAP)开发步骤
FROM : http://blog.csdn.net/xiaoxiangzhu660810/article/details/17434907 参考文章链接: (1)http://mobile.51c ...
随机推荐
- ACM The Famous Clock
The Famous Clock 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 Mr. B, Mr. G and Mr. M are now in Warsaw, ...
- 【BZOJ】1108: [POI2007]天然气管道Gaz
题意 \(n\)个黑点\(n\)个白点(\(2 \le n \le 50000\)),需要一一配对,使得白点在黑点的右下角,且曼哈顿距离和最小.题目保证有解. 分析 考虑最优解,我们可以交换任意一个配 ...
- UVA 11076 - Add Again(组合)
题目链接 脑子抽了,看错题了,神奇的看成没有0了.主要问题把n个数插入m个相同的数,把m个数给分成1-m堆,然后插到n+1空里. #include <cstdio> #include &l ...
- Android --#字XO小游戏
Layout <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andro ...
- 僵尸进程的产生和避免,如何kill杀掉linux系统中的僵尸defunct进程
在 Unix系统管理中,当用ps命令观察进程的执行状态时,经常看到某些进程的状态栏为defunct,这就是所谓的"僵尸"进程."僵尸"进程是一个早已 死亡的进程 ...
- 【bzoj1455】罗马游戏 可并堆
2016-05-31 10:04:41 可并堆的裸题. 左偏树(小根堆为例 性质 1.满足堆的性质,每个节点权值小于左右儿子权值 2.每个节点有dis值,表示子树最浅的叶子深度加1 3.左子树dis ...
- 预定义指令之debug
1)根据你必须知道的.NET一书, #define DEBUG class Program { static void Main(string[] args) { #if DEBUG Console. ...
- BZOJ3835: [Poi2014]Supercomputer
Description Byteasar has designed a supercomputer of novel architecture. It may comprise of many (id ...
- Java_Java中动态加载jar文件和class文件
转自:http://blog.csdn.net/mousebaby808/article/details/31788325 概述 诸如tomcat这样的服务器,在启动的时候会加载应用程序中lib目录下 ...
- python 之redis
redis是一个key-value存储系统,与memcached类似,它支持存储到value类型相对更多,包括string(字符串),list(列表),set(集合),zset(sorted set ...