【问题标题】:In-App Subscription应用内订阅
【发布时间】:2018-02-28 00:02:55
【问题描述】:

当我使用测试帐户在应用程序中测试订阅时,它会返回成功回调,并且根据回调我将一些信息存储在我的远程服务器上......但是当我发布它并使用其他帐户测试时订阅已扣除并且执行成功,但我无法收到成功回调,因为我无法访问内容。我们如何从购买模型或库存模型中获取交易信息,而不是我们如何获取有关特定订单 ID 的信息,例如剩余时间等,这些信息由谷歌自行管理。我们如何在每台设备上识别用户和(他/她)订阅以访问内容

mHelper = new IabHelper(this, "Key");
    mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
        public void onIabSetupFinished(IabResult result) {
            if (!result.isSuccess()) {
                Log.d(TAG, "In-app Billing setup failed: " + result);
            } else {
                Log.d(TAG, "In-app Billing is set up OK");
            }
            // Hooray, IAB is fully set up!
        }
    });

    levelSubscriptionPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
        public void onIabPurchaseFinished(IabResult result,
                                          Purchase purchase) {
            if (result.isFailure()) {
                Log.d(TAG, "failed billing");
            } else {
                Log.d(TAG, "purchase success Callback billing");
                Log.d(TAG, purchase.getToken());
                setSubscription(session.getUserDetail().getEmail());
            }

        }
    };


    mReceivedInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
        public void onQueryInventoryFinished(IabResult result,
                                             Inventory inventory) {

            if (!result.isFailure()) {
                Log.d(TAG, "Query Inventory  failed Callback billing");

                /*Toast.makeText(Dashboard.this, "InventoryListener", Toast.LENGTH_SHORT).show();
                // Handle failure
                mHelper.consumeAsync(inventory.getPurchase(ITEM_SKU),
                        mConsumeFinishedListener);*/
            } else {
                Log.d(TAG, "Query Inventory success Callback billing");
            }
        }
    };

    mConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener() {
        public void onConsumeFinished(Purchase purchase,
                                      IabResult result) {

            if (result.isSuccess()) {
                Log.d(TAG, "Consume finish success Callback billing");
            } else {
                Log.d(TAG, "Consume finish failed Callback billing");
            }
        }
    };

【问题讨论】:

    标签: android in-app-billing subscription


    【解决方案1】:

    您可以在 QueryInventoryFinishedListener 中获取购买详细信息,如

    Purchase monthlySubscription = inv.getPurchase(SKU_SUBSCRIPTION_MONTHLY);
    
            if (monthlySubscription != null) {
                Log.d(TAG, "User has already subscribed for monthly benefits.");
                Utils.Log(monthlySubscription.toString());
    
            } else {
                launchSubscriptions();
            }
    
    
    
    private void launchSubscriptions() {
        try {
            iabHelper.launchSubscriptionPurchaseFlow((Activity) context, 
            SKU_SUBSCRIPTION_MONTHLY, REQUEST_CODE, new 
            IabHelper.OnIabPurchaseFinishedListener() {
                @Override
                public void onIabPurchaseFinished(IabResult result, 
                Purchase monthlySubscription) throws 
                IabHelper.IabAsyncInProgressException {
                    if (result.isFailure()) {
                        Log.e(TAG, "Error purchasing: " + result);
                    } else if (result.isSuccess()) {
                        Log.d(TAG, "---Success---");
                    } else {
                        Log.d(TAG, "---Error---");
                    }
                }
            }, String.valueOf(preferences.getUserId()));
        } catch (IabHelper.IabAsyncInProgressException e) {
            e.printStackTrace();
        }
    }
    

    您还在“launchSubscriptionPurchaseFlow”方法中添加了一个额外的参数。每当您获得购买详细信息时,您也会获得该额外参数。所以使用这个参数你可以识别用户明智的购买 (在我的例子中,我在 launchSubscriptions() 方法中添加了 userId)

    【讨论】:

    • Akshay 我们只需要一个听众来订阅吗??
    • 最后一个问题我们是否调用了最后一个参数 developerPayload
    • 我使用 QueryInventoryFinishedListener 和 launchSubscriptionPurchaseFlow。是的,最后一个参数是 developerPayload。
    猜你喜欢
    • 1970-01-01
    • 2011-12-24
    • 2013-12-23
    • 2011-07-16
    • 2021-04-11
    • 2016-03-17
    • 2011-12-26
    • 2014-02-15
    • 1970-01-01
    相关资源
    最近更新 更多