之前刚进入游戏行业时,就接入过google内支付,当时好像比这次要顺利的多,所以接的过程基本都忘记了,没想到这次接入碰到那么多问题,所以把接入的问题都整理了下,以作备忘。
1.接入过程中,遇到的第一个问题就是上传beta游戏包到google后台被拒了,下面是被拒邮件的部分内容
This app uses software that contains security vulnerabilities for users or allows the collection of user data without proper disclosure.
Below is the list of issues and the corresponding APK versions that were detected in your recent submission. Please upgrade your app(s) as soon as possible and increment the version number of the upgraded APK.
Vulnerability APK Version(s)
***Libpng library
The vulnerabilities were fixed in libpng v1.0.66, v.1.2.56, v.1.4.19, v1.5.26 or higher***. You can find more information about how resolve the issue in this Google Help Center article.
36
***OpenSSL
The vulnerabilities were addressed in OpenSSL 1.0.2f/1.0.1r. To confirm your OpenSSL version,* you can do a grep search for:
$ unzip -p YourApp.apk | strings | grep “OpenSSL”
You can find more information and next steps in this Google Help Center article.
36
To confirm you’ve upgraded correctly, submit the updated version of your app to the Developer Console and check back after five hours to make sure the warning is gone.
While these vulnerabilities may not affect every app that uses this software, it’s best to stay up to date on all security patches. Make sure to update any libraries in your app that have known security issues, even if you’re not sure the issues are relevant to your app.
大概的意思就是我们apk中用到的libpng和openSSL(对应的库为libcurl)两个库存在安全漏洞,需要升级到更高的版本。项目使用的是2.2.6版本的quick-cocos2dx,所以最先做的尝试就是用cocos2dx最新版本中的库直接替换我们现在用的引擎中的库,下载了cocos2dx 3.13.1版本,下载之后看了下3.13.1中的这两个库的版本号分别是:
{
“prebuilt_libs_version”:”v3-deps-109”,
“freetype”:”2.5.5”,
“curl”:”7.50.0”,
“jpeg”:”9.0”,
“png”:”1.6.16”,
“tiff”:”4.0.3”,
“webp”:”0.2.1”,
“websockets”:”v1.3-chrome37-firefox30”
}
对比google被拒邮件两个库建议升级的版本号,就决定使用cocos2dx 3.13.1中的库进行替换升级。因为3.x版本的目录结构和2.x版本的目录结构不同,直接替换肯定是不行,所以按照2.x版本的目录结构复制了3.x版本对应目录下的所有文件进行覆盖,同时也修改了两个库对应的Android.mk文件。替换工作完成后就开始尝试编译cocos2dx库libgame.so文件,漫长的等待等到的当然还是编译失败了,哈哈,看了下错误信息,说curl库某些方法未定义,这是其中的一个错误error: undefined reference to ‘getpwui d_r’,上网搜了下,说这个是android-21之后才有的方法,我们项目用的ndk版本是android-ndk-r9d,看了下该版本platforms目录下没有android-21,最高版本只到anroid-19,所以就想可能需要升级下NDK的版本,最终下载了android-ndk-r10d,接着就是配置ndk的编译环境,最终成功编译出libgame.so文件,接着就比较顺利了下载新NDK对应的android SDK和SDK tools,然后打包apk上传google后台。成功上传后,就开始进入测试支付了。
注:上传google后台的beta测试包,一定要保证各种参数配置,都是运营提供的最新的配置数据,不然就可能各种报错了,测试前需要运营把后台的支付套餐都配置好,并且设置套餐生效
2.开始测试支付的时候,由于玩家的某些信息传递的有些问题,导致第三方sdk验证错误,去向google请求订单失败,后来检查了下发现传递的服务器id为0,传递正确后,还是不能调出支付界面,有的商品购买会提示”系统无法找到商品信息”,这个问题最终看来是运营google后台把某些商品支付套餐配置错了,另外一些配置正确的商品,点击购买也会提示找不到商品信息,但是看log发现sdk多了一些报错信息,第三方sdk向google请求订单的时候,google返回msg为”Invalid Sign”,后来排查了下各种参数配置并和运营沟通,都没找到问题所在,并且我的google账号已经让运营加到google后台的测试列表里了,最后突然间想到,测试支付的前一天,运营方人员发了一个链接,让测试支付的小伙伴都点下这个链接,此时心中顿喜,是不是因为这个问题导致的呢,最后证明就是因为少点了这个链接,所以一直请求不到商品信息。
注:测试google支付需要运营提供沙箱账号,并且还要进入一个类似https://play.google.com/apps/testing/xxx.xxx.xxx这样的一个链接, 这个后面的xxx.xxx就是游戏的包名,先在浏览器中进入google主页,登录google沙箱账号,然后再进入这个链接,点击网页中的按钮,同意成为测试人员后,最后用这个google账号登录游戏,才能正常测试支付。
3.经过2中点击链接的坑后,已成功调出了支付界面,接着就是付款了,我使用的是visa的信用卡付款,经过一番绑定后,终于付款成功,但是sdk最终却提示支付失败,看了下log发现sdk报错了,base64 decod failed: Base64DecoderException:single trailing character at offset 160,最后还有个提示是”Purchase signature verification FAILED. Not adding item.”。当时正在修改透传参数的传递方式,以为是自己修改了透传参数导致,于是各种修改还是没找到问题,最后把报错信息给第三方sdk负责对接的技术看了下,说是我用的google-app-id和后台配置的不一样,我当时就在想怎么可能不一致呢,刚才明明还成功支付成功了一笔交易,并且配置参数都是运营提供的,经过跟运营确认我使用的配置参数和他们提供的都是一致的,最后让他们运营又去后台确认了下,终于发现了罪魁祸首,google后台的app-id莫名其妙的变了,太任性了,有木有。。。