标签: billingclient

Android - BillingClient 返回空的购买列表

我的一些用户告诉我,我的应用程序时不时会忘记购买的订阅。它会工作 3-4 天,然后就会忘记它们。这是一个非常重要的问题,因为用户可能怀疑存在欺诈行为。我正在使用计费库 4.0.0,并且我已经按照 Google 的指南实现了计费逻辑。

据我所知,当由于某种原因计费服务连接中断时,就会发生这种情况。(以Play商店正在更新为例)

我已设法通过以下方式复制此场景

- Disable internet connection
- Clearing Play Store app data
- Fresh launch of my app.
- Call billingClient.startConnection()
    onBillingSetupFinished called with responseCode BILLING_UNAVAILABLE
    user sees -> The app says "no subscription purchased"

- Enable internet connection
- re-initialize BillingClient.
    onBillingSetupFinished called with responseCode OK. billingClient.isReady() returns true. 
- Call billingClient.queryPurchasesAsync() and billingClient.querySkuDetailsAsync().
    onSkuDetailsResponse is called with the skuDetailsList filled with all the proper data. However:
    onQueryPurchasesResponse is called with empty purchase …
Run Code Online (Sandbox Code Playgroud)

android in-app-purchase in-app-billing billingclient

6
推荐指数
1
解决办法
1247
查看次数

Android Google 结算客户端 - onSkuDetailsResponse 始终为空列表

我想知道你能帮忙吗?我按照https://developer.android.com/google/play/billing/integrate上的说明进行操作,但我似乎无法使购买流程正常工作。计费似乎设置正常,但当我尝试查询我的应用内产品时,列表始终返回空。有人可以帮忙吗?

在我的应用程序级别 build.gradle 文件中,我包含了 Google Billing SDK:

implementation 'com.android.billingclient:billing:3.0.0'
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个活动来测试代码。它首先初始化 BillingClient 并启动连接。连接似乎正确完成了设置。正确设置后,我会尝试在“商店状态”>“应用内商品”>“管理产品”下查询 Google Play 控制台中可用的产品

在此输入图像描述

以下是 Activity 中的代码,该代码应该启动该进程并返回 SkuDetails 列表,但不幸的是它返回的是空的。

private BillingClient billingClient;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_billing);

    this.billingClient = BillingClient.newBuilder(this)
            .enablePendingPurchases()
            .setListener(this.purchaseUpdateListener)
            .build();
    this.billingClient.startConnection(billingClientStateListener);
}

private PurchasesUpdatedListener purchaseUpdateListener = new PurchasesUpdatedListener() {
    @Override
    public void onPurchasesUpdated(@NonNull BillingResult billingResult, @Nullable List<Purchase> list) {
        Log.d("Billing", "onPurchasesUpdated - List Size: " + list.size());
    }
};

private BillingClientStateListener billingClientStateListener = new BillingClientStateListener() {
    @Override
    public void onBillingSetupFinished(@NonNull BillingResult …
Run Code Online (Sandbox Code Playgroud)

android billingclient

5
推荐指数
1
解决办法
3415
查看次数

querySkuDetailsAsync 返回带有 BillingResult 代码 SERVICE_UNAVAILABLE 的空列表

将 BillingClient 升级到 3.0.0 后,我开始让大约 20% 的用户SERVICE_UNAVAILABLE在查询应用内购买时看到。skuDetailsList 也是空的。根据该文件,SERVICE_UNAVAILABLE意味着网络出现故障,但如何在客户端返回OKstartConnection和试图查询SKU信息后发送此邮件?此外,我看到了一些ERROR,即代码 6。我是否有一些不正确的实现,还是只是向用户显示了一些“发生错误。稍后再试”消息?我也没有在 Play 管理中心或任何可能导致这种情况的国家/地区看到任何警告。

BillingClient billingClient = BillingClient.newBuilder(getContext())
            .enablePendingPurchases()
            .setListener((billingResult, list) -> {})
            .build();

    mBillingClient.startConnection(new BillingClientStateListener() {
        @Override
        public void onBillingSetupFinished(@NonNull BillingResult billingResult) {
            if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
                createSkus(mBillingClient);
            }
        }

        @Override
        public void onBillingServiceDisconnected() {}
    });


private void createSkus(BillingClient billingClient) {
    List<String> skuList = new ArrayList<>();
    skuList.add("pro");
    SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
    params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
    billingClient.querySkuDetailsAsync(params.build(),
            (billingResult, skuDetailsList) -> {
                // skuDetailsList empty with …
Run Code Online (Sandbox Code Playgroud)

java android in-app-billing billingclient

5
推荐指数
1
解决办法
1169
查看次数

Android:为什么 BillingClient queryPurchasesAsync() 在应用程序重新安装后返回空列表?

我正在将应用内购买功能添加到我的 Android 应用中。我在模拟器上尝试了以下行为:

  • 启动应用程序并伪造应用内购买(使用 SKU android.test.purchased
  • 确保应用内购买经过验证和确认,再次启动应用程序时queryPurchasesAsync()包含此购买
  • 从模拟器中删除了该应用程序
  • 重新安装了

再次调用时queryPurchasesAsync(),结果列表现在为空。这是正常的吗,因为我在模拟器上运行该应用程序?

感谢您的帮助

android in-app-purchase android-inapp-purchase billingclient

5
推荐指数
1
解决办法
618
查看次数

如何在第二台设备(INAPP 和 SUBS)上恢复购买

我有以下情况:

用户在其设备 A上的应用程序上购买了订阅。后来他买了一个设备B,并用设备A的同一个账号来配置。他在设备 B上安装了相同的应用程序,但他在设备 A上进行的购买在那里不可用。

我该怎么做才能让设备 B识别购买?我尝试使用BillingClient#purchaseHistoryResponseListener,但即使它确实返回了最近的购买,也无法确定购买是否有效(如果它作为订阅)或者它是否还没有被消费(如果它是一个 INAPP) .

android android-billing billingclient

3
推荐指数
1
解决办法
445
查看次数

Android - Fragment 内 BillingClient 的上下文

我有一个活动应用程序(java),其中一个片段包含订阅按钮。我正在设置 Google Play 结算库,但是当我设置以下内容时:

private BillingClient billingClient = BillingClient.newBuilder(getActivity())
        .setListener(purchasesUpdatedListener)
        .enablePendingPurchases()
        .build();
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

java.lang.IllegalArgumentException: Please provide a valid Context.
at com.android.billingclient.api.BillingClient$Builder.build
Run Code Online (Sandbox Code Playgroud)

我也尝试过

getContext()
Run Code Online (Sandbox Code Playgroud)

getActivity.getApplicationContext() 
Run Code Online (Sandbox Code Playgroud)

但也没有用。requireContext() 也没有。

如果我在片段内,我应该传递什么上下文?

更新:

订阅片段由 SignUpFragemnt 调用:

public class SignUpFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.fragment_sign_up, container, false);

    Button nextButton = v.findViewById(R.id.nextButton);
    nextButton.setOnClickListener(v1 -> {
        Navigation.findNavController(v1).navigate(R.id.subscriptionV3Fragment);
    });

    return v;
}
}
Run Code Online (Sandbox Code Playgroud)

这是订阅片段:

public class SubscriptionV3Fragment extends Fragment implements View.OnClickListener {

    private static final String …
Run Code Online (Sandbox Code Playgroud)

android in-app-billing play-billing-library billingclient

2
推荐指数
1
解决办法
1307
查看次数