
至今在哈布雷杂志上还没有关于它的文章吗? 没关系,有必要纠正。
有两种方法可以将应用内购买添加到您的Android应用中-旧的和新的。 直到2017年,每个人都使用了anjlab的库,但自2017年6月以来情况发生了变化,谷歌发布了自己的库用于内部购买和订阅-Play Billing Library。 现在,后者被视为标准。
播放计费库非常简单。
连接依赖项。
implementation 'com.android.billingclient:billing:1.2'
在清单中添加权限。
<uses-permission android:name="com.android.vending.BILLING"/>
创建一个BillingClient实例并启动连接。
private BillingClient mBillingClient; ... mBillingClient = BillingClient.newBuilder(this).setListener(new PurchasesUpdatedListener() { @Override public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) { if (responseCode == BillingClient.BillingResponse.OK && purchases != null) {
进行购买后,我们进入
onPurchasesUpdated()方法,在
onBillingSetupFinished()方法中,您可以请求有关商品和购买的信息。
索取产品信息。 将
querySkuDetails()放在
onBillingSetupFinished()中 。
private Map<String, SkuDetails> mSkuDetailsMap = new HashMap<>(); private String mSkuId = "sku_id_1"; ... @Override public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponseCode) { if (billingResponseCode == BillingClient.BillingResponse.OK) {
在代码中,您可能会注意到SKU的概念,它是什么? SKU-来自英国库存单位(商品标识)。
现在,在
mSkuDetailsMap中,我们具有在此应用程序的Play控制台中注册的所有产品信息(名称,描述,价格)(稍后会详细介绍)。 注意这一行
skuList.add(mSkuId); ,在这里我们从Play控制台添加了产品ID,在此处列出了您要与之互动的所有产品。 我们有一个产品— sku_id_1。
一切准备就绪,可以满足购买要求。 我们传递产品ID。 例如,通过单击按钮来运行此方法。
public void launchBilling(String skuId) { BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(mSkuDetailsMap.get(skuId)) .build(); mBillingClient.launchBillingFlow(this, billingFlowParams); }
现在,通过运行此方法,您将看到此对话框(大约来自Internet的图片)。

现在,如果用户购买商品-他们需要提供商品。 添加
payComplete()方法并在其中执行操作以提供对所购买产品的访问。 例如,如果用户购买了广告断开连接,请使用此方法,以便不再显示广告。
... @Override public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) { if (responseCode == BillingClient.BillingResponse.OK && purchases != null) {
一切都很好,但是如果用户重新启动应用程序,则我们的程序对购买一无所知。 有必要请求有关它们的信息。 在
onBillingSetupFinished()中进行操作 。
@Override public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponseCode) { if (billingResponseCode == BillingClient.BillingResponse.OK) {
在
purchasesList中,获取用户进行的所有购买的列表。
我们进行检查:如果购买了商品,请执行
payComplete() 。
做完了 仍然需要在Play控制台中发布此应用程序并添加产品。 如何添加产品:
应用程序页面描述 >
待售内容 >
创建受限内容 。
注意1 :在将应用程序版本上传到Play控制台之前,您将无法添加商品。
注意2 :要查看购买对话框,您需要将内部版本上传到Play控制台,添加产品并等待一段时间(〜30分钟-1小时-3小时),直到产品更新为止,只有在出现此对话框之后,您才能将进行购买。
注意3 :
请更正输入参数错误
。 SKU不能为空 -Play控制台中的产品尚未更新,请等待。
注意4 :在测试中,您可能会在
日志中遇到
错误错误“您的交易无法完成” ,作为
响应代码6 。 出于什么原因,这种情况在我身上是未知的,但是根据我的观察,这种情况是在频繁地进行商品购买和退货之后发生的。 要解决此问题,请转到银行卡菜单并转移您的卡。 如何避免这种情况? 将您的帐户作为测试人员添加到Play控制台,并且只能从测试卡中购买。
github上的演示给我买咖啡(顺便说一下,通过文章下面的按钮-大约主持人,dotts系统可在Habr上运行)。