之前剛進入遊戲行業時,就接入過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莫名其妙的變了,太任性了,有木有。。。