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