将Google支付(In-app Billing)接入改写为: 实现Google支付(In-app Billing)的集成(google支付流程)(google支付流程)

访客 325 0

此文档基于第三版。

应用内结算简介

一、简介

使用应用内结算(In-app Billing)时,我们的应用通过相应的API来访问In-app Billing服务。应用不直接与Google Play服务器通信,而是通过进程间通信(IPC)向Google Play发送结算请求并接收Google Play返回的响应。

在使用In-app Billing之前,请注意以下几点:

  • 只能用来销售数字内容,不能销售实体商品
  • 应用一旦被购买,无法进行退款服务 Google
  • Play不提供内容交付,开发者需要自行交付在应用内购买的数字内容
  • 一个应用不能购买另一个应用发布的商品

目前所采用的In-app Billing是第3版,要求在Android2.2或更高版本上运行,并且需要设备安装最新版本的Google Play商店。第三版支持两种类型的商品:托管应用内商品(Managed product)和订阅(Subscription)。

托管的应用商品:Google Play负责跟踪和管理所有权信息的商品,购买后必须先向Google Play发送消耗请求进行消耗,然后才能再次供用户购买。 订阅:开发者可以通过按月或按年结算的方式,在应用内向用户销售内容、服务或功能。订阅不会被消耗。

二、Google Play购买流程详解

在购买过程开始时,应用会发送结算请求以便处理相应的应用内商品。接下来,Google Play将负责处理所有与此次交易相关的结账细节,包括请求和验证付款方式以及进行财务交易处理。一旦结账流程完成,Google Play会向应用发送购买详情,例如订单号、订单日期和时间以及支付金额。因此,应用无需自行处理任何财务交易事宜,这些全部由Google Play承担责任。

具体流程如下所示:
将Google支付(In-app Billing)接入改写为:

实现Google支付(In-app Billing)的集成-第1张图片-谷歌商店上架

  1. 应用向Google Play发送isBillingSupported 请求,确定当前使用的应用内结算 API 目标版本是否受支持;
  2. 启动或用户登录时,向Google Play进行查询,确定用户拥有哪些商品,发送getPurchases 请求;
  3. 通知用户商品是否可供购买,发送getSkuDetails 请求;
  4. 提示用户购买,发送getBuyIntent 请求。

三、使用托管的应用内商品

一旦应用内商品售出,即被视为“已拥有”。已拥有的应用内商品无法再通过Google Play购买。要使已拥有的应用内商品重新可购买,必须发送消耗请求给Google Play。消耗应用内商品将其切换回“未被拥有”状态,并删除之前的购买数据。请使用consumePurchase来提出消耗请求。

接入之前的准备

首先,需要在Google Play开发者控制台中创建应用。

  1. 注册一个开发者账号,按提示绑定信用卡并支付25美金;
  2. 创建一个新的app,填写应用名称;
    将Google支付(In-app Billing)接入改写为:

实现Google支付(In-app Billing)的集成-第2张图片-谷歌商店上架
  3. 点击上图中的Prepare Store Listing,按照提示填写app的基本信息,信息一定要填写完整,否则无法正常发布应用;
  4. 在Services & APIs中,找到license key记录下来。

二、在Android Studio中添加In-app Billing库文件

  1. 在yourSDKpath/extras/google/market_billing/中找到文件IInAppBillingService.aidl,在src/main中创建文件夹aidl,然后创建package‘com.android.vending.billing’ 如图所示
    将Google支付(In-app Billing)接入改写为:

实现Google支付(In-app Billing)的集成-第3张图片-谷歌商店上架
  2. 点击执行rebuild,在下图所示位置看到IInAppBillingService.java文件,即为导入成功
    将Google支付(In-app Billing)接入改写为:

实现Google支付(In-app Billing)的集成-第4张图片-谷歌商店上架
  3. 将market_billing/samples/TrivialDrive 中util包整个复制到项目中。

三、权限声明

在AndroidManifest.xml文件中声明权限:

四、与Google Play建立连接的初始化 

1、初始化IabHelper

IabHelper mHelper;

@Override
public void onCreate(Bundle savedInstanceState) {
    // ...
    String base64EncodedPublicKey;
    // compute your public key and store it in base64EncodedPublicKey
    mHelper = new IabHelper(this, base64EncodedPublicKey);
}

// Call the startSetup method 
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
    @Override
    public void onIabSetupFinished(IabResult result) {
        // Your code here
    }
}); 
@Override
protected void onDestroy() {
    super.onDestroy();
} 

在APK面板中,您可以上传一个已签名的APK文件。您可以将文件上传到PRODUCTION、BETA TESTING或ALPHA TESTING中的任何一个选项中。这三个选项之间的区别请参考附录1。以下流程以BETA测试为例。

  1. 进入BETA TESTING页面,上传带有签名的APK文件;
  2. 进入Content Rating页面,填写内容分级调查问卷,填完进行评估,根据结果接受评估或者重新填写;
  3. 进入Pricing&Distribution页面,选择应用是付费还是免费,之后选择产品要发布的国家和地区;
  4. 确保如图所示四个内容都显示为绿色对勾,即可发布应用;
    将Google支付(In-app Billing)接入改写为:

实现Google支付(In-app Billing)的集成-第5张图片-谷歌商店上架
  5. 点击Publish app发布,如果按钮显示为灰色,可以点击按钮上方的Why can’t I publish?查看还需要添加的内容,应用发布之后需要等候几个小时。在任一页面可以查看App的发布状态,如左图所示为正在发布,右图显示已经发布成功。
    将Google支付(In-app Billing)接入改写为:

实现Google支付(In-app Billing)的集成-第6张图片-谷歌商店上架将Google支付(In-app Billing)接入改写为:

实现Google支付(In-app Billing)的集成-第7张图片-谷歌商店上架

二、选取测试方法(以BETA测试为例)

在APP发布完成后,我们需要选择一种测试方法。总体而言,有三种测试方法可供选择(详见附录)。在这里,我们以封闭式Beta测试为例。

  1. 登录Google Play开发者控制台
  2. 选择相应应用,点击左侧菜单中的APK
  3. 选择Beta测试,进入“封闭式测试“
  4. 创建列表或选择已有列表
  5. 将Opt-in URL中链接发送给测试人员
  6. 测试人员需要点击测试连接并选择加入测试

请注意:在进行测试时,您可以选择是否需要使用真实支付账号。例如,在进行大范围测试时,用户可能需要执行真实的付款操作,而内部测试人员则可以进行支付测试,但无需真实付款。您可以将内部测试账号配置到Google Play后台中。具体配置如下:

将Google支付(In-app Billing)接入改写为:

实现Google支付(In-app Billing)的集成-第8张图片-谷歌商店上架

将账号填入下图

将Google支付(In-app Billing)接入改写为:

实现Google支付(In-app Billing)的集成-第9张图片-谷歌商店上架

三、商品创作

  1. 点击左侧菜单中“In-app Products”,选择”Add new Product“
  2. In-app Billing第3版支持类型为’Managed product’和’Subscription’的商品
  3. 配置product ID时要保证product ID是唯一的,product ID也叫做SKU,product ID在查询商品和购买商品时需要用到
  4. 带商品信息填写完成,将其状态置为active

客户端相关内容实现

客户端实现具体内容详见官方Demo,此处只简单举例说明(示例代码不全,参照Demo)。

1. 商品详情查询

通过创建商品时添加的product ID,可以在客户端查询商品的详情,调用queryInventoryAsync(boolean, List, QueryInventoryFinishedListener)

  • boolean:是否返回商品详情(此处应设置为true)
  • List:要查询的product IDs(SKUs)
  • QueryInventoryFinishedListener:监听查询结果

当查询成功时,查询结果将被封装在一个名为Inventory的对象中。

以下是一个代码示例:

List productNameList = new ArrayList();
productNameList.add(PRODUCT_ONE);
productNameList.add(PRODUCT_TWO);
mHelper.queryInventoryAsync(true, productNameList, new IabHelper.QueryInventoryFinishedListener() { 

购买商品时也需要product ID,调用launchPurchaseFlow(Activity, String, int, OnIabPurchaseFinishedListener, String)

  • Activity:调用launchPurchaseFlow的activity
  • String:product ID,确保是ID而不是商品名称
  • Int:request code值,可以是任何正整数,Google Play会将该值随购买的回复一起返回给Activity的onActivityResult
  • OnIabPurchaseFinishedListener:购买请求完成的监听器
  • String:字符串标记,惟一的标示购买请求,可以为空。如果你指定一个字符串值,谷歌将返回此字符串以及购买响应。在实际项目中最好由服务器随机生成一个字符串使用

当购买成功时,结果将被封装在Purchase对象中。对于类型为“Managed product”的商品,可以进行重复购买,但在再次购买之前必须先向Google Play发送商品消耗请求,否则无法完成购买。

以下是一个代码示例:

mHelper.launchPurchaseFlow(this, productId, REQUEST_CODE, new IabHelper.OnIabPurchaseFinishedListener() {
    @Override
    public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
        if (result.isSuccess()) {
            // Purchase successful
        } else {
            // Purchase failed
        }
    }
}); 

当购买订阅内容时,使用的方法与购买托管商品时不同。如果强行使用相同的方法,将在确认购买时收到Google Play返回的错误信息。要调用launchSubscriptionPurchaseFlow(Activity, String, int, OnIabPurchaseFinishedListener, String)方法,请参考第2部分中提供的参数解释。

以下是一个代码示例:

mHelper.launchSubscriptionPurchaseFlow(this, productId, REQUEST_CODE, new IabHelper.OnIabPurchaseFinishedListener() {
    @Override
    public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
        if (result.isSuccess()) {
            // Handle successful purchase
        } else {
            // Handle failed purchase
        }
    }
}); 

调用queryInventoryAsync(QueryInventoryFinishedListener)来查询用户已购买的商品。请注意,该查询将返回当前登录到Google Play上的用户已购买的商品。

示例代码:

mHelper.queryInventoryAsync(new IabHelper.QueryInventoryFinishedListener() {
    @Override
    public void onQueryInventoryFinished(IabResult result, Inventory inv) {
        // 五、消耗托管的商品
    }
}); 

当用户购买一件商品后,该商品将被视为“已拥有”状态。在此状态下,同一用户无法再次购买该商品。为了解决这个问题,我们需要向Google Play发送消耗请求,并调用consumeAsync(Purchase, OnConsumeFinishedListener)函数来满足需求。

  • Purchase:要消耗的商品
  • OnConsumeFinishedListener:消耗完成之后的监听

以下是一个代码示例:

mHelper.consumeAsync(purchase, new IabHelper.OnConsumeFinishedListener() {
    @Override
    public void onConsumeFinished(Purchase purchase, IabResult result) {
        if (result.isSuccess()) {
            // Consume success
        } else {
            // Consume failed
        }
    }
}); 
  • 确保上传了带有签名的APK文件;
  • 确保设备上安装了带有签名的APK,而不是调试版;
  • 确保在测试中添加了测试人员;
  • 确保设备登录的账号属于测试账号;
  • 确保测试账号激活了测试链接(最容易忽略);
  • 确保设备上的应用版本号和版本名称与Google开发者后台上传的APK一致;
  • 确保商品状态为Active。

参考文档: - [Google Play计费文档](http://developer.android.com/intl/zh-cn/google/play/billing/index.html) - [应用内购买培训文档](http://developer.android.com/intl/zh-cn/training/in-app-billing/index.html)

附录:Alpha/Beta 版测试

Google为开发者提供了Alpha和Beta两个版本进行测试,无需正式版APK即可发布Alpha/Beta应用。这样的测试不会对线上正式发布的应用产生任何影响,因为只有测试组中的用户才能收到Alpha/Beta版本的更新。如果没有正式版应用存在,那么只有测试组中的用户才能发现并下载该应用。

一、Alpha/Beta版本

在进行Alpha/Beta测试时,请确保测试版APK的版本号高于正式版APK的版本号。
请注意:

  1. Alpha版APK需要具有高于Beta 版 APK的版本号才能供Alpha版测试人员使用;
  2. 如果上传的Beta版APK高于Alpha版,则Alpha版将会自动停用;
  3. 如果上传的正式版APK高于Alpha/Beta版,则Alpha/Beta版将会自动停用;
  4. Alpha用户可以测试Alpha、Beta和正式版,Beta用户可以测试Beta和正式版。

二、不同的测试方法(以Beta为例)

1、封闭式Beta版测试 改写:第一阶段,进行封闭式Beta版测试

使用封闭式Beta测试,可以按电子邮件创建Beta测试人员列表,测试用户必须拥有Google账号(@gmail.com)或Google Apps账户才能加入测试。
列表创建完成之后,需要将Opt-in URL中链接发送测试人员,待测试人员使用测试账号访问该链接激活测试账号,才可以正常测试。Opt-in URL只有在应用状态为“已发布”时才会显示。

2、公开测试版

不需要提供电子邮件地址或创建Google网上论坛或Google+社群。适用于广泛测试。与封闭式测试相同,只需将发布后的链接发送给测试人员,待激活后即可开始测试。

3、利用Google网上论坛或Google+社群进行封闭式Beta版测试。

要分享链接,请添加Google网上论坛的电子邮件地址或Google+社群的网址。为了参加Beta测试,测试人员必须加入所添加的Google网上论坛或Google+社群,并激活他们的测试账号。

有关Alpha/Beta版本测试的详细信息和分阶段发布,请参考Google官方文档:
https://support.google.com/googleplay/android-developer/answer/3131213?hl=zh-Hans

标签: 谷歌商店上架 测试 图片

发表评论 (已有0条评论)

还木有评论哦,快来抢沙发吧~