Google Pay 初步集成
准备工作
- Google Play Console 的账号
- 一个地点在美国或者香港等地方的v*n(下面有介绍原因)
- 一部有Google Play应用市场的手机
项目内的操作
首先GoogleSample 项目中有一个关于google pay的例子地址在android-play-billing这是可以拿来参考的,(只不过具体使用的时候报名要换成你在google play console创建的apk的applicationId)
- 在
main
目录下新建com.android.vending.billing
路径的包名目录如下图所示 - 复制
IInAppBillingService.aidl
文件到这个目录中文件地址 - 复制android-play-billing中的trivialDrive目录中的util目录到本身的工程中目录地址
- 要获取应用内支付还必须申请权限,在
AndroidManifest.xml
下添加<uses-permission android:name="com.android.vending.BILLING" />
权限 - 然后还是在
AndroidManifest.xml
中写入标签<meta-data
android:name="com.google.android.gms.wallet.api.enabled"
android:value="true" /> - 然后再module目录下的build.gradle 依赖
com.google.android.gms:play-services-wallet:11.8.0
当项目用了rx系列 retrofit系列 又依赖了过多的google服务的话 可能会有64k警告 可以参考这篇文章解决mutidex
代码编写
代码编写其实很简单 只要跟着google的教程 复制黏贴就可以了
- 创建IabHelper实例`IabHelper mHelper;
@Override
public void onCreate(Bundle savedInstanceState) {
// …
String base64EncodedPublicKey;
// compute your public key and store it in base64EncodedPublicKey
mHelper = new IabHelper(this, base64EncodedPublicKey);
}这里的
base64EncodedPublicKey`指的是在google play console中创建的apk**(下面解释)
启动服务监听
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
if (!result.isSuccess()) {
// Oh no, there was a problem.
Log.d(TAG, "Problem setting up In-app Billing: " + result);
}
// Hooray, IAB is fully set up!
}
});在界面退出时切断监听并释放
@Override
public void onDestroy() {
super.onDestroy();
if (mHelper != null) mHelper.dispose();
mHelper = null;
}支付步骤
/**
* @param act activity
* @param sku 创建的应用内商品的product id
* @param requestCode onActivityResult
* @param listener 支付监听
* @param extraData 支付传参 可传空字符串
*/
//购买商品
mHelper.launchPurchaseFlow(this, SKU GOOGLE_PAY_RESULT,
mPurchaseFinishedListener, "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ");IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener
= new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase)
{
if (result.isFailure()) {
Log.d(TAG, "Error purchasing: " + result);
return;
}
else if (purchase.getSku().equals(SKU_GAS)) {
// consume the gas and update the UI
}
else if (purchase.getSku().equals(SKU_PREMIUM)) {
// give user access to premium content and update the UI
}
}
};回调处理
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == GOOGLE_PAY_RESULT) {
mHelper!!.handleActivityResult(requestCode, resultCode, data)
...
}
}
到这里代码的基本集成就完成了,这里只是集成的应用内一次性购买,如果要集成消耗购买 或者订阅服务请参考官方文档地址如果点击支付有对话框弹出来了说明代码是没错的,没成功只是因为你在控制台的有些错误
控制台部分
其实这部分按照参考文档来完全可以 只是要注意几个坑
- 上面支出的**在在服务和api中可找到 注意要删除空格
- 要测试支付应用必须是发布的,所以不管你项目写到哪一步只管去发布,但是不要发布正式版的 建议发布alpha版本
- 在发布前必须要完成
应用分级
,定价和分发内容
等栏目保证没有警告 - 在分发内容里边 注意不能选中国老挝等其他国家(只要国家旁边有问号的都别选,因为这些国家google pay是不支持的!)
- 成功发布后就可以新建应用内商品了
然后在 版本管理->应用版本 管理alpha版本点击进入创建测试人员,注意当前登陆的账号并不能直接测试 需要添加后才可以 创建成功后还必须点开下方的测试链接 同意后才能正是成为测试人员如下图
点开链接如果是下图所示 就完成了控制台的集成了
测试要过1,2个小时 等到你的应用显示
已发布
就行了