Android&iOS支付验证&提测流程
发表于2018-11-21
iOS IAP提测流程,有些啰嗦,但如果长期没接触,还真有可能会忘掉(:())
1.登录Apple开发者后台,在Certificates, Identifiers & Profiles->Identifiers->App IDs下创建项目的唯一id,并开启IAP支付相关功能
2.进入iTunes Connect,创建产品,使用刚才创建的App ID构建产品
3.在App 内购买项目下,创建我们需要的内购的计费点,状态为已批准
4.如果你不是Apple开发者帐号的所有者,你首先需要成为Member,需要由管理员邀请你成为Member,这样你才可以下载Certificates证书和Provisioning Profiles描述文件,进行Dev和Pro的调试和发布
5.在ITunes Connect中添加Test Account 测试帐号,需要使用测试帐号才能正确的拉取内购商品列表以及发起正常的支付流程,如果手机已经登录了自己正式的Apple Id,需要先在手机的设置下,iTunes中选择登出,可以直接使用Test Account登录,也可以在项目中,发起支付相关请求时,Apple也会要求你进行Apple Id的登入
*需要注意的是,Test Account不要尝试去支付正式线上版本的IAP内购,这样会导致帐号失效,比如你在沙盒测试的时候,你输入了测试帐号和密码以后,都是正确的,但系统会一直提示你再次输入,然后返回Failed:0,支付失败,通常是测试帐号无效导致的,使用一个新的测试帐号即可。
6.接入IAP相关的代码,比如获取产品的列表,发起某个商品的请求,通过开发者证书打包进行测试,前提是一定要用Test Account进行测试
沙盒环境有时候并不稳定,比如需要重复的登录测试帐号,可以尝试切换网络,甚至有时候一天都不稳定,可以隔天来测,这是正常的现象,今天早上AppStore 就短暂的挂了1,2个小时,导致线上的产品拉取不到内购的列表,无法完成支付
如果以上步骤配置都OK,可以使用一个测试程序来跑一下IAP这里是否正常,下面的代码是早些年 写的一个原生的IAP测试例子,只需要将例子中几处关于Product Identifiers的部分修改为你当前项目的Product Identifiers,并修改包名为你在iTunes Connect上App产品的Id,打包时,使用创建 当前项目的开发者证书打包进行测试就可以了
链接:https://share.weiyun.com/5NObanE
(这是一个Unity工程,导出为Xcode工程后,需要手动的导入StoreKit.framework)
如果在测试的过程中,出现-999,-100,-1009,无法联网,无法连接到iTunes之类的错误,通常都是沙盒测试环境不稳定和Test Account测试帐号的问题,反复尝试,并仔细的进行Check.
Android IAB提测流程:
IAB提测要比iOS麻烦就在于我每次都要将包提到Google Play的后台,然后通过测试地址下载到手机才行,如果VPN不稳定,轻轻松松搞你一天
1.在Google Play的后台创建产品(https://play.google.com/apps/publish),把所有标*的条件都满足,上传截图之类的,在确定分级之前,要先上传一个APK,这个APK需要是正式签名的,并且不可以改变,所以要保存好创建的签名和确定好最终的包名。
最终要做的就是:让应用处于可以发布的状态,而不是“草稿”状态,游戏要发布Published状态才能测试
2.配置应用内商品也需要再提供一个包含BILLING权限的APK包
<uses-permission android:name="com.android.vending.BILLING"/>
3.和iOS一样,配置好产品的ID之类的,并记得激活每一个需要使用的产品ID
4.开始发布,这里发布分为正式,Beta,Alpha和内部测试,以前没有内部测试,这是后来加的,极大的加快提测的效率,这里使用内部测试来进行IAB支付验证就可以了
5.在管理测试人员里,新建列表,把要添加到测试中的邮箱添加进去,注意,不能是开发者帐号本身。比如A1创建的应用,A1不可以进行测试。
6.成功的发布内部测试版本,会得到一个测试地址:
https://play.google.com/apps/internaltest/xxxxxxx
7.在手机端,打开GooglePlay的应用,登录你测试的帐号,然后打开浏览器输入上面的测试地址,第一次会让你手动点一下“加入测试计划”,然后有个链接,点击后,就会在后台进行下载,取决于VPN的环境,这里建议使用小包体进行测试,也可以使用BETA和ALPHA,但需要等待的时间比较长。常规内部测试不建议使用。测试地址上可以直接下载目标APK。
8.(重点)打开下载好的APK,支付时出现如下错误提示:
因为当前登录的GooglePlay的帐号没有在许可测试列表当中,需要配置许可测试:
在开发者帐号->帐号详情->许可测试,把上面的测试帐号加入进来,这样才可以正常的验证IAB支付流程。
几个常见的问题:
1.通过测试地址下载版本,有时候会发现页面找不到,这时候要确认你的GooglePlay应用中的帐号是测试帐号
2.如果发现测试地址打开的网页上显示"已安装”,不用担心,如果你确定了在后台更新了版本,继续点击“已安装”就可以,会重新进行安装。
3.每次上传版本要写好版本变更的内容,主要是便于自己识别,确定当前更新的版本已经可用,因为每一次上传新版本,到我们能够下载测试,会有一定的延迟。
4.通过测试地址下载,有时候会没有任何的下载提示的痕迹,部分手机会出现,但实际上,后台依然在下载,如果此时VPN不稳定,导致断开了,你不得不重新操作。
5.经典的Billing API version is not supported for the type requested或者是Purchase or Billing UnAvaliable,或是一段混淆你的错误描述:你当前的设备不支持V3支付等等,他们都指向了一个错误代码:3
错误代码:3 主要产生的的原因:
1.设备本身不支持V3支付,这个可能性非常小,只要你能打开GooglePlay并正常下载付费线上的产品,这一步就可以排除
2.你VPN所在的国家目前还不支持IAB,Google有一个列表中有提到不支持的区域,可以切换VPN到不同的国家
3.你当前Google Play应用商店登录的不是Test Account或是有以前的未清理之前的Cache数据
在接入的过程中,出现错误代码3的情况非常的高频,比如上面的某些步骤不对,就有可能出现,但假如上面的所有步骤都做对了,还是会出现错误代码3的情况,可以按照以下的方式进行排查:
1.确保手机的Google Play应用商店是最新的版本(IAB支付的核心就在GooglePlay应用商店)
2.GoogePlay登录Test Account,确保是使用测试帐号进行登录,如果你经常的切换GooglePlay,稳妥的做法就是每一次都清掉GooglePlay应用的Cache,然后重新进行登录
3.使用VPN连接到GooglePlay,这好像是一句废话,但这里碰到过一种比较特殊的情况,目前只在我们公司出现过:( 我们公司是主做海外,内部网络走的香港线路,也就是说公司的网络是没有限制的,访问国内的网络和国外的诸如Facebook,Youtube等等非常的流畅,但就是这样的网络,却在后面测试的过程中,着实坑了我一把,因为也出现了错误代码3的情况,首先,帐号可以确定是Test Account,而且GooglePlay已经清理了Cache,例子的代码也没有问题,因为之前某一个版本成功过,后面修改仅仅是增加了版本号,但更新下来测试就不成功,所以在Google官方文档和stackoverflow上找了很久,最后在stackoverflow上一个帖子的回答提醒了我,我在公司“VPN”的基础上,又开启了一个新的VPN(确保GooglePlay商店也做了对应国家的切换), 相当于换了一个VNP,然后再次测试,IAB验证通过。
这其中具体的原因我不是特别的清楚,但从排除上来看,GooglePlay可能会认为我的网络是在大陆吧。
贴上参考的链接:
https://stackoverflow.com/questions/16168361/billing-isbillingsupported-always-unavailable
为何在测试的过程中,要清除GogolePlay缓存(Cache),官方给出了如下回应:
目前,由于 Google Play 客户端在设备上本地缓存应用内购买结算信息,您可以使用 Version 3 API 更频繁地查询此类信息,例如通过调用 getPurchases 进行查询。 与旧版本的 API 不同,Version 3 API 的很多调用都是在缓存中进行查找,而不用通过网络连接到 Google Play,这样就显著加快了 API 的响应速度。
简单说就是GooglePlay会将应用内商品信息缓存到本地,并不是每一次请求都会连接网络,这样做的目的是为了提高响应速度
5.人生苦短,在开发设备和VPN上,砸钱买最好的吧!