集成google pay自然是需要相应的对接文档。官方地址:http://developer.android.com/intl/zh-cn/google/play/billing/index.html
文档中,会详细介绍串接的步骤。
在SDK中,也会有一个demo。 SDK_root/extras/google/play_billing/samples/TrivialDrive。
若没有这个目录,则需要更新如图所求的目录:
现在说说说第一个坑:
demo中,google pay订单验证的key是放在apk中的。这种做法对于安全性来说是很不科学的一个做法。
所以,我们需要改进。将这个key,放到后台中去进行验证。
第一步:就是删除如图所求的类
第二步:个性IabHelper类
public IabHelper(Context ctx) { mContext = ctx.getApplicationContext(); // mSignatureBase64 = base64PublicKey; logDebug("IAB helper created."); } 在handleActivityResult(int requestCode,int reslutCode,Intent data)方法中,注释如下代码 // Verify signature if (!Security.verifyPurchase(mSignatureBase64, purchaseData, dataSignature)) { logError("Purchase signature verification FAILED for sku " + sku); result = new IabResult(IABHELPER_VERIFICATION_FAILED, "Signature verification failed for sku " + sku); if (mPurchaseListener != null) mPurchaseListener.onIabPurchaseFinished(result, purchase); return true; } 在int queryPurchases(Inventory inv, String itemType)中修改如下代码: //if (Security.verifyPurchase(mSignatureBase64, purchaseData, signature)) { logDebug("Sku is owned: " + sku); Purchase purchase = new Purchase(itemType, purchaseData, signature); if (TextUtils.isEmpty(purchase.getToken())) { logWarn("BUG: empty/null token!"); logDebug("Purchase data: " + purchaseData); } // Record ownership and token inv.addPurchase(purchase); // } // else { // logWarn("Purchase signature verification **FAILED**. Not adding item."); // logDebug(" Purchase data: " + purchaseData); // logDebug(" Signature: " + signature); // verificationFailed = true; // }
第二个坑:
订单查询的时候,如果是调用
public Inventory queryInventory(boolean querySkuDetails, List<String> moreItemSkus,List<String> moreSubsSkus)
这个方法的查询是同步的,当网络不好的时候,此方法会阻塞UI线程。需要开发者修改成异步的方法。
第三个坑:
在测试支付的时候,会出现 此版本的应用未配置为对通过 google play 结算 的错误提示。
造成这个错误的原因有两个,第一个是打包的时候,versionCode的值比提交到google play后台的版本要高。 第二个就是:打包的时候,和google play后台上的包的签名不一致。
第四个坑:
在支付的时候,不能使用大陆的信用卡,google pay会提示你不支付此地区的购买。
第五个坑:
在测试过程中,明明上一个订单都可能支付,但再测试的时候,就会报 从服务器检索信息时出错rpc s 7 aec 0 。
造成原因:未知
解决方案:在商店的设置里把google账号删除,然后清除商店数据,重新登录就能可以了。
第六个坑:
google pay 支付的结果是通过Activity之间的传参进行数据返回的。
故一定要在调用的activity或者fragment中重写 onActivityResult方法。
onActivityResult(requestCode, resultCode, Intent data) { (!.handleActivityResult(requestCode, resultCode, data)) { .onActivityResult(requestCode, resultCode, data); } { Log.(); } }
这些都是我在串接google play中,踩过的一些坑。希望可以给大家提供一些帮助。