Android-google pay

前言

最近在做国际版的google 支付,google pay 中遇到不少坑,这里做个记录。也算为广大的android 开发者们 踩踩坑

文章内容简介

  • 开发者账号申请
  • google pay console 配置
  • 代码书写
  • 填坑

集成

1. 开发者账号申请

这里就根据 Android开发-Google登录这文章中进行申请注册就可以,本文不在过多介绍

2. google pay console 配置

(1)创建应用

首先登陆 Google Play 管理中心

点击右上角创建应用

然后会进入商品详情界面,这里面有几个必须要填写的 不要偷懒,该填写的还是要填写。

这里值得注意的是,这个,那内容分级,当你点击的时候,会告诉你需要上传一个APK,没关系,先写其他的,然后保存草稿就好了

填写完成以后 ,点击右下角 保存草稿


点击保存草稿

(2)发布版本

Android-google pay_第1张图片
点击应用版本

然后你会发现你TMD 怎么那么多渠道,不慌,找到年内部测试渠道,(先不要纠结要不要全上了,一个一个来)

按照提示说明,将数据填写完成,上传apk (必须上传release的)然后点
击保存 ---》查看,

这个时候你会发现

不可点击

为啥不能发布????

还记的刚刚我们看到的内容分级么,这个时候回去 把他完成了

点击商品详情

Android-google pay_第2张图片
你能看到,应用版本是绿色的,我们要做的就是全部点亮,哈哈

找到刚刚看到的内容分级,按照要求填写完成即可

点亮了 哈哈哈

目前的进度

Android-google pay_第3张图片
屏幕快照 2019-01-07 下午6.32.57.png

OK 下面去点击定价

(3)定价和分发范围

如果你的APP 是付费就付费,应用内购买不算付费,
屏幕快照 2019-01-07 下午6.34.07.png

这个时候 应该全部点亮了。然后找到应用版本,去点击发布,这个时候神奇的发现,TMD 终于可以发布了

屏幕快照 2019-01-07 下午6.36.34.png

此时还不算真的发布了

Android-google pay_第4张图片
屏幕快照 2019-01-07 下午6.39.10.png

只有状态是已发布才行,

[图片上传中...(屏幕快照 2019-01-07 下午6.39.10.png-9d6f7f-1546857578499-0)]

PS 快下班了,就偷个懒,给各位看官看已发布的那个,不一步一步来了,

(4)配置应用内商品

Android-google pay_第5张图片
点击应用内商品
Android-google pay_第6张图片
创建商品

3. 代码书写

官网文档

Android-google pay_第7张图片
注意看,有两种方式
  • Use the Google Play Billing Library

  • In-app Billing API

在文档上介绍的

如果您需要直接与应用内结算服务进行互动,请使用AIDL进行应用内结算。

这里先介绍第一种方式,第二种方式 后面再介绍

将Google Play结算添加到应用的步骤如下:

  • 更新应用的依赖项。
  • 连接到Google Play。
  • 查询应用内商品详细信息。
  • 允许购买应用内商品。
  • 查询购买的商品。
  • 添加一次性产品特定或订阅特定代码(在单独的页面上介绍)。

(1)更新应用的依赖项。

  implementation 'com.android.billingclient:billing:1.2'

(2)连接到Google Play

// create new Person
private BillingClient mBillingClient;
...
mBillingClient = BillingClient.newBuilder(mActivity).setListener(this).build();
mBillingClient.startConnection(new BillingClientStateListener() {
    @Override
    public void onBillingSetupFinished(@BillingResponse int billingResponseCode) {
        if (billingResponseCode == BillingResponse.OK) {
            // The billing client 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.
    }
});

(3)查询应用内商品详细信息

List skuList = new ArrayList<> ();
//这里填写自己的商品ID 官网的只是个示例
skuList.add("premium_upgrade");
skuList.add("gas");
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList).setType(SkuType.INAPP);
mBillingClient.querySkuDetailsAsync(params.build(),
    new SkuDetailsResponseListener() {
        @Override
        public void onSkuDetailsResponse(int responseCode, List skuDetailsList)
            // Process the result.
        }
    });

得到详情

if (responseCode == BillingResponse.OK
                    && skuDetailsList != null) {
   for (SkuDetails skuDetails : skuDetailsList) {
       String sku = skuDetails.getSku();
       String price = skuDetails.getPrice();
       if ("premium_upgrade".equals(sku)) {
           mPremiumUpgradePrice = price;
       } else if ("gas".equals(sku)) {
           mGasPrice = price;
       }
   }
}

(4)允许购买应用内商品

BillingFlowParams flowParams = BillingFlowParams.newBuilder()
         .setSku(skuId)
         .setType(SkuType.INAPP) // SkuType.SUB for subscription
         .build();
int responseCode = mBillingClient.launchBillingFlow(flowParams);

回调

@Override
void onPurchasesUpdated(@BillingResponse int responseCode, List purchases) {
    if (responseCode == BillingResponse.OK
            && purchases != null) {
        for (Purchase purchase : purchases) {
            handlePurchase(purchase);
        }
    } else if (responseCode == BillingResponse.USER_CANCELED) {
        // Handle an error caused by a user cancelling the purchase flow.
    } else {
        // Handle any other error codes.
    }
}

混淆

-keep class com.android.vending.billing.**

4. 填坑

(1)沙盒测试

如果你不想真的付钱,那么你就需要配置沙盒测试人员。

找到版本管理---》应用版本----》内部测试(一开始配置的)----》管理测试人员

Android-google pay_第8张图片
如下所示

(2)显示无法购买商品,

这是因为 你只是添加了人家作为你的内部测试人员,人家还没打印呢,所以,你需要邀请他们加入您的内部测试,如上图,可以看到,加入测试的网站。发送给你添加的测试账号 完成邀请及可,

(3)无法调出支付界面

首先要手机保证科学上网。其次。大部分的国内手机都是不行的,不行的,不行的,那就有人问了,那怎么测试,我的测试使用的是三星S8P。测试通过,但是小米系列就不行,

(4)为啥三星手机也不行,

google pay 需要安装google play 等一些开发环境,在科学上网的前提下,下载google play,会安装一系列的环境,总的来说,当你能有google play 下载软件了,基本上就差不多了,

(5)同一个商品ID 为啥不能购买多次

哥 你买的 的通知一下啊直接上代码

  @Override
    public void onPurchasesUpdated(int responseCode, @Nullable List purchases) {

        if (responseCode == BillingClient.BillingResponse.OK
                && purchases != null) {

            if (listener != null) {
                listener.onPaySuccess();
            }
            for (Purchase purchase : purchases) {
                com.orhanobut.logger.Logger.i("[google pay] purchase:" + purchase.toString());
                mBillingClient.consumeAsync(purchase.getPurchaseToken(), (responseCode1, purchaseToken) -> {
                    com.orhanobut.logger.Logger.i("[google pay] consumeAsync responseCode1" + responseCode1 + " purchaseToken:" + purchaseToken);
                });
            }

        } else if (responseCode == BillingClient.BillingResponse.USER_CANCELED) {
            if (listener != null) {
                listener.onPayCancel();
            }
        } else {
            if (listener != null) {
                listener.onPayError(responseCode);
            }
        }
    }



后记

如果有错误的地方,请指出,一直认为分享是进步最快的方式,去年一年没怎么写文章,比较忙,今年的第一篇文章,感谢各位看官。

你可能感兴趣的:(Android-google pay)