标签: android-inapp-purchase

firebase功能的服务帐户身份验证访问Google API(针对应用内购买信息)失败

我们正在准备一个firebase触发器来处理Android的实时开发人员通知,我们必须使用Google Play Developer API来了解用户订阅的详细信息.因此,我们在Google Play控制台中关联了firebase服务帐户,并授予了必要的访问权限.

我们使用谷歌的nodejs库为googleapis(github链接)编写了一段代码,如下所示:

return google.auth.getClient({
  keyFile: path.join(__dirname, './service-account.json'),
  scope: 'https://www.googleapis.com/auth/androidpublisher'
}) .then((client) => {
  const androidpublisher = google.androidpublisher({
    version: 'v3',
    auth: client
  });
  const params = {
    packageName: ANDROID_PACKAGE_NAME,
    subscriptionId: ANDROID_SUBSCRIPTIONID,
    token: token
  };
  return androidpublisher.purchases.subscriptions.get(params)
  .then(res => {
    console.log(`The response is ${res.data}`);
    return null;
  })
  .catch(error => {
    console.error(error);
  });
});
Run Code Online (Sandbox Code Playgroud)

但它返回一个错误状态:'无效的凭据',我对此有点失落.我已经使用curl测试了API和授权令牌,它也显示了401错误响应.

我不确定我的流程是否正确,有人能给我任何建议吗?

google-api node.js google-play-developer-api android-inapp-purchase google-cloud-functions

11
推荐指数
1
解决办法
802
查看次数

如何在Android中确认应用内购买?

我已经浏览了Play计费库 https://developer.android.com/google/play/billing/billing_library_overview。 您必须在三天内确认所有购买。如果未正确确认购买,将导致这些购买被退款。该过程没有明确说明如何确认购买。这就是我尝试过的方法吗?提前致谢

@Override


 public void onPurchasesUpdated(BillingResult billingResult, @Nullable List<Purchase> purchases) {
        if(billingResult.getResponseCode()== BillingClient.BillingResponseCode.OK&&purchases!=null){
            Toast.makeText(this, "Purchase Successful", Toast.LENGTH_SHORT).show();
            for(Purchase purchase:purchases){
                handlePurchase(purchase);
            }
        }else if(billingResult.getResponseCode()== BillingClient.BillingResponseCode.USER_CANCELED){
            Toast.makeText(this, "Purchase Cancelled", Toast.LENGTH_SHORT).show();
        }else if(billingResult.getResponseCode()== BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED){
            Toast.makeText(this, "Already Purchased", Toast.LENGTH_SHORT).show();
        } else{
            Toast.makeText(this, billingResult.getDebugMessage(), Toast.LENGTH_SHORT).show();
        }



    //in handlePurchase()
 if(!purchase.isAcknowledged())
{ 
          AcknowledgePurchaseParams acknowledgePurchaseParams
                    = AcknowledgePurchaseParams.newBuilder()
                    .setPurchaseToken(purchase.getPurchaseToken())
                    .setDeveloperPayload(purchase.getDeveloperPayload())
                    .build();

            client.acknowledgePurchase(acknowledgePurchaseParams, new AcknowledgePurchaseResponseListener() {
                @Override
                public void onAcknowledgePurchaseResponse(BillingResult billingResult) {
                    if(billingResult.getResponseCode()== BillingClient.BillingResponseCode.OK){
                        Toast.makeText(RemoveAdsActivity.this, "Purchase Acknowledged", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }
Run Code Online (Sandbox Code Playgroud)

android in-app-purchase in-app-billing android-inapp-purchase

11
推荐指数
1
解决办法
2322
查看次数

Android购买订阅和入门价格

Google带来了入门价格的想法(https://support.google.com/googleplay/android-developer/answer/140504?hl=en).

我的问题与其API有关.我无法通过Purchases.subscriptions找到如何获取相关信息的方式(https://developers.google.com/android-publisher/api-ref/purchases/subscriptions/get)

即使我购买了入门价格的订阅,我向Google Play Developer API询问了有关该订阅的信息,但我只看到了全价.

即使是inappproduct/get也没有关于某些产品的介绍价格的任何信息.

你知道如何获得合适的价格吗?谢谢

android in-app-subscription android-inapp-purchase

10
推荐指数
1
解决办法
1839
查看次数

Google Play帐单库-querySkuDetailsAsync有时会返回BillingResponseCode.ERROR(6)

我使用的是Google Play结算库2.0.3implementation 'com.android.billingclient:billing:2.0.3'),它在大多数情况下都可以正常运行,但是对于某些用户,原因未知,querySkuDetailsAsync() method occasionally fails with BillingResponseCode.ERROR (6) error code...

有人知道吗?除了“ API操作期间发生致命错误”之外,其他任何地方都未说明此错误的原因。谁能说出为什么会这样吗?

编辑: 我正在使用文档中的方法(https://developer.android.com/google/play/billing/billing_library_overview):

public interface QuerySkuDetailsListener {
        void onSuccess(List<SkuDetails> skuDetailsList);

        void onErrorProductsHaveDifferentTypes();

        void onBillingClientError(int error_code);
    }

    public void querySkuDetails(final QuerySkuDetailsListener querySkuDetailsListener, final Product... products) {
        if (products.length < 1) {
            //ERROR_NO_PRODUCTS_TO_QUERY
            throw new NullPointerException();
        }

        String querySkuType = products[0].getSkuType();

        SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
        List<String> skuList = new ArrayList<>();
        for (Product product : products) {
            skuList.add(product.getSku());
            if (!product.getSkuType().equals(querySkuType)) {
                //ERROR_SKU_TYPE_CANT_BE_DIFFERENT
                querySkuDetailsListener.onErrorProductsHaveDifferentTypes();
                return; …
Run Code Online (Sandbox Code Playgroud)

android response in-app-billing android-inapp-purchase play-billing-library

10
推荐指数
1
解决办法
578
查看次数

Android 实时开发者通知一次性购买成功了一半

当我使用“慢速测试卡,几分钟后批准”时,Android 的实时开发人员通知会起作用。我通过 pub/sub 在我的服务器上收到两个通知。一种是当购买已完成并且其中包含令牌和订单时的消费状态:0 时。第二个通知,在它被消费后,带有 token 和 order ,其中有消费状态:1。正是我想要和期望的。

但是,当我使用“测试卡,始终批准”购买相同的一次性消费品时,我根本没有收到任何“实时开发人员通知”。

我是唯一经历过这种行为的人吗?这是设计使然吗?如何随时收到通知?

android in-app-purchase in-app-billing google-cloud-pubsub android-inapp-purchase

10
推荐指数
1
解决办法
1813
查看次数

在Android中订阅了应用内续订广播

我已经实现in-app purchasesubscription产品,它工作正常.我为每种产品设定了1个月的订阅,并在1个月后续订.

现在我的问题是有没有办法获得更新的产品清单和续订日期?

谷歌是否提供任何类型的服务或活动,通过这些服务或活动我们可以了解更新.

android android-inapp-purchase

9
推荐指数
2
解决办法
739
查看次数

我在哪里可以提交Play商店或Google Play服务的错误?

我不确切知道bug的位置,我认为它在Play商店,但我猜它可能是Google Play服务.

基本上,手机上有帐户X和Y的用户将使用帐户X在我的应用程序上进行应用程序内购买.然后我将分阶段推出更新,并且将该应用程序安装为帐户X的用户突然将获得帐户Y的更新,应用程序将无法识别已购买的应用内商品.

我与其他开发人员讨论了类似的应用内模型,他们遇到了同样的错误.

我在哪里提交该bug?

谢谢.

android in-app-purchase google-play google-play-services android-inapp-purchase

9
推荐指数
1
解决办法
2893
查看次数

Android Play Billing Library:onSkuDetailsResponse responseCode为0,但skuDetailsList的大小也为0

我现在正在使用新的Play Billing Library

基本上,我按照文档查询要购买的可用项目

 SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
            params.setSkusList(skuList).setType(itemType);
            mBillingClient.querySkuDetailsAsync(params.build(),
                    new SkuDetailsResponseListener() {

                        @Override
                        public void onSkuDetailsResponse(int responseCode,
                                                         List<SkuDetails> skuDetailsList) {
                            listener.onSkuDetailsResponse(responseCode, skuDetailsList);
                        }
Run Code Online (Sandbox Code Playgroud)

但是,responseCode为0,列表也为空.但我检查了BillingSetupFinished是否成功.提供给SkuDetailsParams.Builder的skuList不为空,skuList(sku_id)中的值也与Google Play控制台上指定的产品ID相同.

有谁知道原因?谢谢!!

android android-billing android-inapp-purchase play-billing-library

8
推荐指数
4
解决办法
3528
查看次数

验证应用内购买

示例应用程序在谷歌开发者指南是指有一个名为方法verifyValidSignature(),看起来像这样的BillingManager类:

/**
 * Verifies that the purchase was signed correctly for this developer's public key.
 *
 * Note: It's strongly recommended to perform such check on your backend since hackers can
 * replace this method with "constant true" if they decompile/rebuild your app.
 */
private boolean verifyValidSignature(String signedData, String signature) {
    try {
        return Security.verifyPurchase(BASE_64_ENCODED_PUBLIC_KEY, signedData, signature);
    } catch (IOException e) {
        Log.e(TAG, "Got an exception trying to validate a purchase: " …
Run Code Online (Sandbox Code Playgroud)

android in-app-purchase in-app-billing android-billing android-inapp-purchase

8
推荐指数
0
解决办法
686
查看次数

谷歌计费服务在几秒钟内自动断开多次

我正在使用 Google 的应用内结算。(版本 2.2.0)

我在应用程序类中使用以下代码开始计费连接:

billingClient = BillingClient.newBuilder(Application.getInstance()).setListener(this).enablePendingPurchases().build()
billingClient.startConnection(this)
Run Code Online (Sandbox Code Playgroud)

使用上述代码成功连接计费服务。

但我观察到市场上的一个问题,即 onBillingServiceDisconnected()在几秒钟内被多次调用。根据我们的内部分析,大约 13% 的用户在 5 秒内收到了 2 个或更多 onBillingServiceDisconnected() 调用。正如谷歌文档所建议的那样,我尝试使用billingClient.startConnection(this)重新连接 onBillingServiceDisconnected() 内的服务 ,之后服务再次连接,但又断开连接。

如此多的用户如此频繁的服务中断背后的原因可能是什么?

它也会导致付款问题吗?

payment android in-app-purchase in-app-billing android-inapp-purchase

8
推荐指数
0
解决办法
925
查看次数