首页 > 编程知识 正文

googleplay商店,谷歌服务框架及谷歌商店安装神器

时间:2023-05-04 20:55:00 阅读:161960 作者:3918

文章目录一、前言二、谷歌支付官方文档三、谷歌支付Github Demo工序四、谷歌支付流程图五、谷歌支付接口解说1、支付事件初始化(拦截) 2、谷歌支付查询商品信息)按sku_id查询) 4关闭采购订单(发货后执行) 6、查询采购订单)补货用) 6、Unity如何获取BILLING sdk的jar文件7、补货1、添加billing权限2、添加billing权限

一.前言

关注不迷茫,持续输出Unity晾晒的文章。

你好,你好,我是新头发。 最近很忙,博客停了好几天没有更新。

要让项目出海,你需要登陆谷歌支付。 今天我们来谈谈如何访问谷歌支付。

要访问谷歌支付,必须先在谷歌控制台注册帐户并申请APP

Google Console的URL:https://developer.Android.com/distribute/console

帐户注册和APP申请不是本文的重点,所以在此不再赘述。 此外,访问谷歌控制台需要科学的互联网连接。

二.谷歌支付官方文档谷歌支付官方文档: https://developer.Android.com/Google/play/billing/integrate # Java

三.谷歌支付Github Demo工程Github工程地址: https://github.com/Android/play-billing-samples

下载Demo后,只需使用Android Studio打开ClassyTaxiJava项目即可。

其中,BillingClientLifecycle.java是最主要的演示脚本。

四、谷歌支付的流程图谷歌支付的流程有点复杂。 为了让大家容易理解,我试着描绘一下谷歌支付的流程。 图像可以放大来看。

容易漏掉的是补充单。

国内的硬核路由的SDK (例如APP博、OPPO、VIVO、小米、华为等),一般支付完成,SDK服务端通过callback_url回叫游戏服务端,进行游戏

谷歌的支付是不同的。 没有callback_url。 游戏服务端是怎么知道用户支付完毕的?

游戏客户端在支付完成后应主动通知服务端发货,确认发货后关闭订单。

正因为客户端通知服务器方发货,所以订单可能会下降。 例如,客户端成功支付后,还没通知服务器发货,客户端就会异常终止。

此时,需要补充票。 游戏客户端在登录游戏服务端后,应主动调用Google的订单查询界面,对遗漏的清单进行补货发货,发货完成后客户端关闭订单。

五. Googlepaymentinterface讲义1、 privatepurchasesupdatedlistenerpurchasesupdatedlistener=newpurchasesupdatedlistener () ) ) ) 构建结果, ListPurchase purchases )//tobeimplementedinalatersult ()/tobeimplementedinalatersulaterses ) privatebillingclientbillingclient=billing client.new builder (activity ).setlistener 例如,支付完毕。

@ overridepublicvoidonpurchasesupdated (billingresultbillingresult,ListPurchase purchases ) intresponsecode=billingresullling log.d(Googlepay ),)响应代码: $响应代码,调试msg : $调试msg ); if (空!=purchases ) { for (purchase purchase : purchases ) if ) billingresponsecode.ok==response code } {//todo将发货通知服务器端

ase}}} } 2、连接Google服务器(必须) billingClient.startConnection(new BillingClientStateListener() { @Override public void onBillingSetupFinished(BillingResult billingResult) { if (billingResult.getResponseCode() == BillingResponseCode.OK) { // The BillingClient is ready. You can query purchases here. } } @Override public void onBillingServiceDisconnected() { // Try to restart the connection on the next request to // Google Play by calling the startConnection() method. }});

判断是否已连接

if(billingClient.isReady()){} 3、查询商品信息(通过sku_id查询) List<String> skuList = new ArrayList<> ();skuList.add("sku_id");SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();params.setSkusList(skuList).setType(SkuType.INAPP);billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() { @Override public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) { // Process the result. } });

建议把查询结果做缓存,查过的商品,下次直接从缓存中获取即可,例:

private Map<String, SkuDetails> skuDetailsMap = new HashMap();// ...if(skuDetailsMap.containsKey("sku_id")){// skuDetailsMap.get("sku_id");return;}List<String> skuList = new ArrayList<> ();skuList.add("sku_id");SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();params.setSkusList(skuList).setType(SkuType.INAPP);billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() { @Override public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) { // Process the result.int resultCode = billingResult.getResponseCode();if(BillingResponseCode.Ok == resultCode) {for(SkuDetails skuDetails : skuDetailsList) {// 缓存if(!skuDetailsMap.containsKey(skuDetails.getSku())) {skuDetailsMap.put(skuDetails.getSku(), skuDetails);}}} } }); 4、拉起支付页(需要传sku和订单号) // An activity reference from which the billing flow will be launched.Activity activity = ...;// Retrieve a value for "skuDetails" by calling querySkuDetailsAsync().BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(skuDetails) .setObfuscatedAccountId(orderId) // 塞入订单号 .build();int responseCode = billingClient.launchBillingFlow(activity, billingFlowParams).getResponseCode();// Handle the result. 5、关闭订单(发货完后执行)

支付成功,服务端发货完成后,需要客户端将订单关闭。

void handlePurchase(Purchase purchase) { // Purchase retrieved from BillingClient#queryPurchases or your PurchasesUpdatedListener. Purchase purchase = ...; // Verify the purchase. // Ensure entitlement was not already granted for this purchaseToken. // Grant entitlement to the user. ConsumeParams consumeParams = ConsumeParams.newBuilder() .setPurchaseToken(purchase.getPurchaseToken()) .build(); ConsumeResponseListener listener = new ConsumeResponseListener() { @Override public void onConsumeResponse(BillingResult billingResult, String purchaseToken) { if (billingResult.getResponseCode() == BillingResponseCode.OK) { // Handle the success of the consume operation. } } }; billingClient.consumeAsync(consumeParams, listener);} 6、查询订单(补单用)

用户登录进游戏服务端后,需要执行一下查询订单,发现有掉单,需要通知服务端补发货,发货完成后,客户端关闭订单。

Purchase.PurchasesResult result = billingClient.queryPurchases(SkuType.INAPP);if(BillingResponseCode.OK == result.getResponseCode()) {for(Purchase purchase : result.getPurchasesList()) {if(Purchase.PurchaseState.PURCHASED == purchase.getPurchaseState()) {// TODO 通知服务端补发货,发货完成后,客户端关闭订单。}}} 六、Unity如何拿到billing sdk的jar文件

如果你是Android Studio做的原生应用,那么直接在build.gradle中配置一下即可。

dependencies {// ... // Google Play Billing Library. implementation 'com.android.billingclient:billing:3.0.0' // ...}

如下:

如果是Unity项目,则需要把依赖的jar文件拷贝到Assets/Plugins/Android/libs文件夹中。
我们可以通过Android Studio来定位这个jar文件,把鼠标移动到BillingClient类上,按住Ctrl键不放,点击,即可跳转到.class文件里,即可通过.class文件定位到.jar文件所在的目录。

如下:

我们把classes.jar文件重名名为google_billing_3.0.0.jar,然后再丢进Unity工程中,
google的billing其实是aar,是包含一些资源文件的,所以我们只拷贝jar还不够,jar文件外层的这些文件也需要。

不过这里建议使用下面这种方式一步到位下载aar文件。
进入google的maven网站:https://mvnrepository.com/

直接搜索你要下载的库即可。
比如搜索com.android.billingclient:billing。

直接下载aar文件。

七、补充 1、添加BILLING权限

提审Google Play,需要添加BILLING权限。
在AndroidManifest.xml中添加这个:

<uses-permission android:name="com.android.vending.BILLING" /> 2、billing v2版与v3版的区别

参见Google官方文档,这里:https://developer.android.com/google/play/billing/migrate

八、结束语

完毕。
喜欢Unity的同学,不要忘记点击关注,如果有什么Unity相关的技术难题,也欢迎留言或私信~

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。