unity接入google play 支付之结算库篇

接入google支付有两种方式: 1、导入AIDL 文件实现接入,2、使用google play 结算库实现。 我在这里使用的是结算库。看了很久的官方文档,给出了一些通用方法,但是还是一头雾水,概念要搞清楚。 google 应用内商品分两种,1、受管理的商品(又称一次性商品),2、 订阅商品;一次性商品又分两种,1、消耗型商品(可以重复购买),2、非消耗型商品(真正的一次性商品); 这里先贴上官方文档: https://developer.android.com/google/play/billing/billing_library_overview 通过调用结算库中的API 实现支付接入,来,开始,上图:
unity接入google play 支付之结算库篇
登陆google play console官网,用自己的google 账号登陆,接受开发者协议之后,花费25美元,成为google 开发者。网址在此: https://play.google.com/apps/publish/
unity接入google play 支付之结算库篇
进来之后,创建自己的应用,刚创建完是草稿状态,后面会有 等待发布状态、已发布状态、已移除状态, 创建应用之后,上图
unity接入google play 支付之结算库篇
左边栏中的灰色对号让他变成绿色的,怎么变?把右边带星号的信息全部填完,就变了,填完之后,如果你有用于测试的APK包,先上传一个apk,因为只有上传apk才能申请应用内商品id。 这里apk的讲究也很大,apk必须带签名,签名怎么搞?来来来,转到unity项目中,上图
unity接入google play 支付之结算库篇
打开Player Setting,打开Publishing Setting,下面有一个使用keystore文件,如果没有keystore文件,上网址: https://www.cnblogs.com/aiaitie/p/9525564.html 可以自动生成,这里一定要保证java JDK是OK的,生成之后把keystore password和Alias Password两个密码记住。填入上图的位置。 上传完apk之后,要在后台添加受管理商品,上图
unity接入google play 支付之结算库篇
会有人疑问为什么你的应用左边栏和我的不一样吗?你的应用发布之后就和我的一样了。 后台的设置基本就这些了。 导出Gradle包,下面用到Android studio了。
unity接入google play 支付之结算库篇
打开之后,四个划线位置都是需要改变的位置。首先,你得有Google play billing library,下载的话就去Android SDK Manager 下载,在extras目录下,我这里没有下载,因为我找不到,但是也能用,很神奇。 首先在AndroidManifest.xml中添加依赖:
unity接入google play 支付之结算库篇
build.gradle中添加依赖:implementation ‘com.android.billingclient:billing:+’ 然后开始上代码:上图:
unity接入google play 支付之结算库篇
private BillingClient billingClient; “billingClient”是用来调用API的唯一对象,相当于支付对象。 billingClient = BillingClient.newBuilder(this).enablePendingPurchases(). setListener(mpurchases).build();//这段是用来连接google play服务的, “this”是当前页面,Activity类型的参数; “mpurchases”是一个PurchasesUpdatedListener的监听器,监听的实现都在SetLienter()函数中,后面贴代码。 billingClient.startConnection(mBillingClientStateListener);//开启支付
unity接入google play 支付之结算库篇
这里两个分支: 1、和google play服务连接成功 2、连接断开 说明:该监听实现在SetLintener中
unity接入google play 支付之结算库篇
billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() //该函数是查询函数 “Pay”是供unity调用的函数,当unity中点击购买按钮,调用该函数,实现查询商品和购买。 billingClient.launchBillingFlow(mActivity, flowParams);//该函数弹出购买界面 “mActivity”是当前页面, “flowParams”是商品信息流,别管是什么意思,就是存储商品信息的。 弹出页面之后,上图
unity接入google play 支付之结算库篇
通过之前绑定的监听,会执行到onPurchasesUpdated,这里有三个分支: 1、用户付款成功 2、用户取消购买 3、发生其他情况 当用户付款之后,billingResult.getResponseCode()返回的值如果是BillingClient.BillingResponseCode.OK,说明付款成功, 接下来再走消耗分支,这里说明一下消耗和消耗的区别: 1、如果是消耗商品,也就是可以重复购买的商品,像游戏中的金币包,钻石包,就要调用消耗函数,走for循环,走handlPurchases(),因为只有执行消耗之后,才能重复购买。 2、如果是非消耗函数,像游戏中购买关卡之类的,买一次同一个账号能够终身开启的,就不走消耗,直接走确认购买。 贴上handlPurchases(),上图
unity接入google play 支付之结算库篇
billingClient.consumeAsync(params, new ConsumeResponseListener() //该函数为消耗函数,如果走到if分支,说明该商品消耗成功,可以重复购买 “params”这个参数是ConsumeParams类型,需要设置两个值,1、token;2、payload,这两个参数从purchases中获取即可。 消耗完成之后返回上面确认购买函数,只有执行确认购买之后,商品才会真正的被后台确认为已购买,如果没有执行确认购买函数 ( billingClient.acknowledgePurchase(acknowledgePurchaseParams, new AcknowledgePurchaseResponseListener() ) ,商品会被后台撤销,并返回给用户。