2024年Go最新Android Google Pay接入(1),2024年最新2024Golang面试题

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

@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.

}

});

注意:强烈建议您实施自己的连接重试策略并覆盖该 onBillingServiceDisconnected() 方法。BillingClient执行任何方法时,请确保维护连接。

4、查询应用内商品详细信息

您在配置应用内商品时创建的唯一商品ID用于异步查询Google Play的应用内商品详细信息。要在Google Play中查询应用内商品详情,请致电 querySkuDetailsAsync()。调用此方法时,传递一个实例,SkuDetailsParams 该实例 指定产品ID字符串列表和一个SkuType。该SkuType可以是SkuType.INAPP一次性产品或SkuType.SUBS订阅费。

注意:要查询产品详细信息,您的应用将使用您在Google Play控制台中配置产品时定义的产品ID。

要处理异步操作的结果,还必须指定一个实现该SkuDetailsResponseListener 接口的侦听 器。然后onSkuDetailsResponse() ,您可以重写 以在查询结束时通知侦听器,如以下示例代码所示:

List skuList = new ArrayList<> ();

skuList.add(“premium_upgrade”);

skuList.add(“gas”);

SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();

params.setSkusList(skuList).setType(SkuType.INAPP);

billingClient.querySkuDetailsAsync(params.build(),

new SkuDetailsResponseListener() {

@Override

public void onSkuDetailsResponse(BillingResult billingResult,

List skuDetailsList) {

// Process the result.

}

});

注意:有些 Android 设备安装的可能是旧版 Google Play 商店应用,不支持订阅等某些商品类型。在您的应用进入结算流程之前,您可以调用 isFeatureSupported() 以确定设备是否支持您要销售的商品。

5、启动购买流程

如需从应用发起购买请求,请从应用的主线程调用 launchBillingFlow() 方法。此方法接受对 BillingFlowParams 对象的引用,该对象包含通过调用 querySkuDetailsAsync() 获取的相关 SkuDetails 对象。如需创建 BillingFlowParams 对象,请使用 BillingFlowParams.Builder 类。BillingFlowParams ,请使用 BillingFlowParams.Builder 类:

// 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)

.build();

int responseCode = billingClient.launchBillingFlow(activity, billingFlowParams).getResponseCode();

// Handle the result.

launchBillingFlow() 方法会返回 BillingClient.BillingResponseCode 中列出的几个响应代码之一。请务必检查此结果,以确保在启动购买流程时没有错误。BillingResponseCode 为 OK 表示成功启动。

成功调用 launchBillingFlow() 后,系统会显示 Google Play 购买屏幕。如下图:

Google Play 会调用 onPurchasesUpdated(),以将购买操作的结果传送给实现 PurchasesUpdatedListener接口的监听器。您可以在初始化客户端时使用 setListener() 方法指定监听器。

你必须实现 onPurchasesUpdated() 来处理可能的响应代码。以下示例展示了如何替换 onPurchasesUpdated():

@Override

void onPurchasesUpdated(BillingResult billingResult, List purchases) {

if (billingResult.getResponseCode() == BillingResponseCode.OK

&& purchases != null) {

for (Purchase purchase : purchases) {

handlePurchase(purchase);

}

} else if (billingResult.getResponseCode() == BillingResponseCode.USER_CANCELED) {

// Handle an error caused by a user cancelling the purchase flow.

} else {

// Handle any other error codes.

}

}

如果成功购买商品,系统会产生一个Google Play成功屏幕。如下图:

如果成功购买商品,系统还会生成购买令牌,它是一个唯一标识符,表示用户及其所购应用内商品的商品 ID。您的应用可以在本地存储购买令牌,不过我们建议您将令牌传递到安全的后端服务器,您随后可以在该服务器上验证购买交易及防范欺诈行为。下一部分对此过程进行了详细说明。

用户还会收到包含交易收据的电子邮件,其中包含订单 ID 或交易的唯一 ID。用户每次购买一次性商品时,都会收到包含唯一订单 ID 的电子邮件。此外,用户最初购买订阅时以及后续定期自动续订时,也会收到这样的电子邮件。您可以在 Google Play 管理中心内使用订单 ID 来管理退款。

6、确认购买交易(消费掉才算真正的完结该订单)

如果你使用的是Google Play结算库2.0版或更高版本,则必须在三天内确认所有购买。未正确确认购买会导致这些购买被退款。

用户完成购买交易后,您的应用需要处理该购买交易。在大多数情况下,您的应用会通过 PurchasesUpdatedListener 收到购买交易的通知。但在某些情况下,您的应用通过调用 BillingClient.queryPurchasesAsync() 得知购买交易,如提取购买交易中所述。

您的应用应按以下方式处理购买交易:

1、验证购买交易。

2、向用户提供内容,并确认内容已传送给用户。还可以选择性地将商品标记为已消费,以便用户可以再次购买商品。

如需验证购买交易,请先检查购买交易的状态是否为 PURCHASED。如果购买交易的状态为 PENDING,则您应按照处理待处理的交易中的说明处理购买交易。对于通过 onPurchasesUpdated() 或 queryPurchasesAsync 接收的购买交易,您应在应用授予权利之前进一步验证购买交易以确保其合法性。如需了解如何正确验证购买交易,请参阅在授予权利前验证购买交易。

一旦您验证了购买交易,您的应用就可以向用户授予权利了。授予权利后,您的应用必须确认购买交易。此确认会告知 Google Play 您已授予购买权。

注意:如果您在三天内未确认购买交易,用户会自动收到退款,并且 Google Play 会撤消该购买交易。

注意:使用 2.0 之前的 Google Play 结算库版本时,不需要确认。

授予权利并确认购买交易的流程取决于购买的是非消耗型商品、消耗型商品,还是订阅。

对于消耗型商品,consumeAsync() 方法满足确认要求,并且表明您的应用已授予用户权利。此外,通过此方法,您的应用可让一次性商品可供再次购买。

如需表明某件一次性商品已被消耗,请调用 consumeAsync() 并添加 Google Play 应在用户重新购买时提供的购买令牌。您还必须传递一个实现 ConsumeResponseListener 接口的对象。该对象用于处理消耗操作的结果。您可以替换 onConsumeResponse() 方法,Google Play 结算库会在消耗操作完成时调用该方法。

以下示例展示了如何使用关联的购买令牌来消耗商品:

void handlePurchase(Purchase purchase) {

// Purchase retrieved from BillingClient#queryPurchasesAsync 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);

}

注意:由于消耗请求偶尔会失败,因此您必须检查安全的后端服务器,确保所有购买令牌都未被使用过,这样您的应用就不会针对同一购买交易多次授予权利。或者,您的应用也可以等到您收到 Google Play 发来的成功消耗响应后再授予权利。如果您选择在 Google Play 发来成功消耗响应之前不让用户消耗所购商品,那么您必须非常小心,在消耗请求发出后时刻跟踪相应商品。

如需确认非消耗型商品的购买交易,请使用结算库中的 BillingClient.acknowledgePurchase() 或 Google Play Developer API 中的 Product.Purchases.Acknowledge。在确认购买交易之前,您的应用应使用 Google Play 结算库中的 isAcknowledged() 方法或 Google Play Developer API 中的 acknowledgementState 字段检查该购买交易是否已经过确认。

以下示例展示了如何使用 Google Play 结算库来确认购买交易:

BillingClient client = …

AcknowledgePurchaseResponseListener acknowledgePurchaseResponseListener = …

void handlePurchase(Purchase purchase) {

if (purchase.getPurchaseState() == PurchaseState.PURCHASED) {

if (!purchase.isAcknowledged()) {

AcknowledgePurchaseParams acknowledgePurchaseParams =

AcknowledgePurchaseParams.newBuilder()

.setPurchaseToken(purchase.getPurchaseToken())

.build();

client.acknowledgePurchase(acknowledgePurchaseParams, acknowledgePurchaseResponseListener);

}

}

}

订阅的处理方式与非消耗型商品类似。您可以使用 Google Play 结算库中的 BillingClient.acknowledgePurchase() 或 Google Play Developer API 中的 Purchases.Subscriptions.Acknowledge 确认订阅。所有初始订阅购买交易都需要确认。订阅续订不需要确认。

7、提取交易信息

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

7、提取交易信息

[外链图片转存中…(img-jqrLAGTx-1715629206183)]
[外链图片转存中…(img-megYN8Qg-1715629206183)]
[外链图片转存中…(img-WhfxtaL3-1715629206184)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

  • 15
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值