Google in app billing 应用内支付

一 简介

Google in app billing 是google play 商店的应用内支付,他是一种应用内的虚拟的道具支付服务,支持应用内支付(inapp)和订阅(subs)两种模式;
在中国,如果你的应用要集成这个服务,需要注意有三点:

  1. in app billing不支持中国服务,不能绑定国内的信用卡(借记卡)
  2. in app的受管理商品中的本地价格不支持人民币
  3. 支付金额中会收取30%的手续费

当然的这些都是可以解决的,因为google play的应用内支付是国外的用户的一个主流消费模式.还是很多应用需要踩着坑去集成,比如说:

卖虚拟道具的国际版应用
卖关卡版本的付费应用等等.

本文主要是对version 3版本的in-app支付集成和介绍.


二 实现步骤

注: 前提已经在Google play 开发者平台完成注册开发者账号和绑定应用
地址: http://play.google.com/apps/publish/

1 : 服务集成

请参考官网详细示例(不需要翻墙)

下面是对上面的链接地址步骤简单的介绍:

打开SDK Manager ,在Extras的文件夹下面下载Google play billing library

这里写图片描述

然后可以在本地的SDK的play_billing目录下发现如下文件列表:

samples 是官方的一个demo,修改包名可以直接集成到自己项目
IInAppBillingService.aidl是我们需要集成在项目中的AIDL文件

这里写图片描述


集成步骤很简单,本人是直接修改了官网的samples,然后打成了jar包[点击Jar包下载],当然大家也可以自己封装使用
最终我集成的项目中也只要包含这两个文件即可,当然Manifest中的相关权限是不能忘记的

这里写图片描述

这里写图片描述


2 : 支付流程

注: 最详细官网的支付流程(不需要翻墙)

下面是基本序列图:

流程图

注: 这个序列图主要是针对非消耗性的管理商品 ,购买一次即为被拥有状态,无法再次购买.

从上图可以看出,App自己的后台不参与Google in app的支付处理,直接由客户端和Google Play完成;而其中的两次与客户端对接的作用是:

一: 我们把Google Play中的key没有直接明文写在App客户端,而是通过自己的后台拉去,是为了安全考虑
二: 购买完成后的订单信息上传给自己的服务器,既可以保存订单记录,又可以对用户购买商品的信息进行管理


非消耗性商品

获取key值,根据key值初始化工具类

 private void initBilling() {
        //需要传入的key值
        String base64EncodedPublicKey = "你的google play key ";
        mHelper = new IabHelper(this, base64EncodedPublicKey.trim());
        //开启调试
        mHelper.enableDebugLogging(true);
        startUp();
    }

key值在Google控制台的如下位置;

这里写图片描述


检测连接服务,与Google Play进行连接

 private void startUp() {
        if (null == mHelper) return;
        //检测连接服务
        mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
            @Override
            public void onIabSetupFinished(IabResult iabResult) {
                if (null == iabResult) return;
                if (!iabResult.isSuccess()) {
                    isInitSuccess = false;
                    L.e(TAG, "onIabSetupFinished:初始化失败,请重试 " + iabResult);
                    return;
                }
                isInitSuccess = true;
            }
         });
    }

注: 查询list中指定的商品,如果不指定则查询默认的所以商品信息,这里指定
SKU_POPCOIN,和SKU_POPCOIN1两个商品.

   List<String> additionalSkuList = new ArrayList<>();
            additionalSkuList.add(SKU_POPCOIN);
            additionalSkuList.add(SKU_POPCOIN1);
            mHelper.flagEndAsync();
            mHelper.queryInventoryAsync(true, additionalSkuList,
                    mGotInventoryListener);

购买指定ID购买商品,这里购买ID为SKU_POPCOIN商品

if(mHelper == null) return;
mHelper.flagEndAsync();
mHelper.launchPurchaseFlow(this, SKU_POPCOIN, BILL_REQUEST_CODE, mPurchaseFinishedListener, WDApp.getInstance().getLoginUserId());

处理返回的结果

  @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == BILL_REQUEST_CODE) {
    if (mHelper == null) return;

    if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
     //在这里可以把订单信息传给自己的服务器
     L.e(TAG, "onActivityResult: " + resultCode);
super.onActivityResult(requestCode, resultCode, data);
     } else {
     L.e(TAG, "onActivityResult handled by IABUtil.");
            }
    }

商品消耗

注: Google billing支付默认的所有受管理商品都是非消耗性的商品,购买一次就默认为被拥有 状态,无法继续购买,如果我们想让应用的道具成为消耗性商品,就需要主动把非消耗性的商品消耗掉,变成了未拥有状态即可再次购买.

这里写图片描述
通过如下方法消耗:

mHelper.consumeAsync(inventory.getPurchase(SKU_POPCOIN), mConsumeFinishedListener);

主要有两次调用的地方:
1:购买成功后调用消耗’被拥有’状态
2:查询商品时,判断有没有’被拥有’状态的商品,如果有就消耗状态.

mConsumeFinishedListener是一个回调的接口,返回消耗商品是否成功

   // Called when consumption is complete
    IabHelper.OnConsumeFinishedListener mConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener() {
        public void onConsumeFinished(Purchase purchase, IabResult result) {
            Log.d(TAG, "Consumption finished. Purchase: " + purchase + ", result: " + result);
            // if we were disposed of in the meantime, quit.
            if (mHelper == null) return;
            if (result.isSuccess()) {
             //消费成功           
               Log.d(TAG, "Consumption successful. Provisioning.");
             } else {
                showToast("Error while consuming: " + result);
            }
            Log.d(TAG, "End consumption flow.");
        }
    };

测试

注: 务必参考的官方测试文档

准备
  1. 支持Google Play 商店的 Android 手机
  2. Google Play支持的非国内信用卡(借记卡)
主要步骤

1.上传一个已经集成Google billing支付的App到google play的控制台的beta或者Alpha渠道上.
2.建立一个 受管理的商品列表,包含你要出售的商品,包括ID,价格,描述等.创建商品列表
3.App开发者平台账号需要绑定信用卡(用于收款).
4.添加测试账号,测试账号不能是App平台账号.
5.发布的测试版本通过之后,会有一个测试的下载链接,把这个链接发给需要测试的账号人员,点击成为测试员即可.
6.测试账号需要绑定非国内的信用卡(用于支付),测试账号需要绑定支持play 商店的手机.

这里写图片描述

这里写图片描述


注:
1. 测试过程不会消耗费用.
2. 上传的版本需要在原来的版本上增加,测试版只要上传一次即可.只要连接走通,如果有bug也不需要继续上传,直接用修改后的版本测试即可
3. 必须有签名,而且不同的版本签名要保持一致.
4. 包名必须与控制台的包名一致.

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
以下是 ThinkPHP 框架中使用 Google 内购支付的详细步骤和代码: 1. 创建 Google Play Console 账号并创建应用程序。 2. 在应用程序中启用 Google Play 内购。 3. 在应用程序中集成 Google Play Billing Library。 4. 在应用程序中添加 Google Play 服务库。 5. 在应用程序中添加 Google Play SDK。 6. 在应用程序中添加 Google Play Billing SDK。 7. 在应用程序中创建购买商品的 SKU。 8. 在应用程序中实现购买逻辑。 以下是代码示例: 1. 创建 Google Play Console 账号并创建应用程序。 创建完 Google Play Console 账号后,按照向导创建应用程序。 2. 在应用程序中启用 Google Play 内购。 要启用 Google Play 内购,请按照以下步骤操作: 1. 进入 Google Play Console。 2. 选择您的应用程序。 3. 单击左侧菜单中的 “应用内购买”。 4. 在 “应用内购买” 页面中,单击 “添加商品”。 5. 为商品选择价格和货币。 6. 单击 “保存”。 7. 重复以上步骤,直到您添加了所有商品。 3. 在应用程序中集成 Google Play Billing Library。 要集成 Google Play Billing Library,请按照以下步骤操作: 1. 在您的应用程序中添加以下依赖项: ```gradle dependencies { implementation 'com.android.billingclient:billing:3.0.0' } ``` 2. 在您的应用程序中创建 BillingClient 实例。 ```java BillingClient billingClient = BillingClient.newBuilder(context) .setListener(this) .enablePendingPurchases() .build(); ``` 3. 在您的应用程序中连接到 Google Play 服务。 ```java billingClient.startConnection(new BillingClientStateListener() { @Override public void onBillingSetupFinished(BillingResult billingResult) { if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.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. } }); ``` 4. 在应用程序中添加 Google Play 服务库。 要添加 Google Play 服务库,请按照以下步骤操作: 1. 在 build.gradle 文件中添加以下依赖项: ```gradle dependencies { implementation 'com.google.android.gms:play-services-base:17.6.0' } ``` 2. 在 AndroidManifest.xml 文件中添加以下权限: ```xml <uses-permission android:name="com.android.vending.BILLING" /> ``` 5. 在应用程序中添加 Google Play SDK。 要添加 Google Play SDK,请按照以下步骤操作: 1. 在 build.gradle 文件中添加以下依赖项: ```gradle dependencies { implementation 'com.google.android.gms:play-services-auth:19.0.0' } ``` 2. 在 AndroidManifest.xml 文件中添加以下权限: ```xml <uses-permission android:name="android.permission.GET_ACCOUNTS" /> ``` 6. 在应用程序中添加 Google Play Billing SDK。 要添加 Google Play Billing SDK,请按照以下步骤操作: 1. 在 build.gradle 文件中添加以下依赖项: ```gradle dependencies { implementation 'com.android.billingclient:billing:3.0.0' } ``` 2. 在 AndroidManifest.xml 文件中添加以下权限: ```xml <uses-permission android:name="com.android.vending.BILLING" /> ``` 7. 在应用程序中创建购买商品的 SKU。 要创建购买商品的 SKU,请按照以下步骤操作: 1. 进入 Google Play Console。 2. 选择您的应用程序。 3. 单击左侧菜单中的 “应用内购买”。 4. 在 “应用内购买” 页面中,单击 “添加商品”。 5. 为商品选择价格和货币。 6. 单击 “保存”。 7. 重复以上步骤,直到您添加了所有商品。 8. 在应用程序中实现购买逻辑。 要实现购买逻辑,请按照以下步骤操作: 1. 在您的应用程序中查询已购买商品。 ```java Purchase.PurchasesResult purchasesResult = billingClient.queryPurchases(BillingClient.SkuType.INAPP); if (purchasesResult.getResponseCode() == BillingClient.BillingResponseCode.OK) { List<Purchase> purchases = purchasesResult.getPurchasesList(); for (Purchase purchase : purchases) { // Handle the purchased item here. } } ``` 2. 在您的应用程序中启动购买流程。 ```java billingClient.launchBillingFlow(activity, BillingFlowParams.newBuilder() .setSkuDetails(skuDetails) .build()); ``` 以上就是 ThinkPHP 框架中使用 Google 内购支付的详细步骤和代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值