应用订阅中的结算问题-IabResult:用户已取消。 (响应:-1005:用户已取消)

时间:2018-07-23 05:02:19

标签: java android google-play in-app-billing in-app-subscription

我正在尝试构建包含包含订阅选项的应用程序。我已将apk上传到Google Play帐户并获得了SKU ID。实施后,出现了此异常“ IabResult:用户取消。(响应:-1005:User cancelled)”。

这是我的订阅课程:

public class SubscriptionUtil {

private static final int REQUEST_CODE = 10001;
private static final String base64EncodedPublicKey = GlobalVar.base64EncodedPublicKey;

private IabHelper iabHelper;
private Context context;

private SubscriptionUtil() {
    //No instance
}

public SubscriptionUtil(Context context) {
    this.context = context;
    iabHelper = new IabHelper(context, base64EncodedPublicKey);
    iabHelper.enableDebugLogging(true, "TEST");
    setup();
}

private void setup() {
    if (iabHelper != null) {
        iabHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
            @Override
            public void onIabSetupFinished(IabResult result) {
                if (result.isFailure()) {
                    Log.d("TEST", "Problem setting up In-app Billing: " + result);
                    dispose();
                }
            }
        });
    }
}

public void initSubscription(final String subscriptionType,
                             SubscriptionFinishedListener subscriptionFinishedListener) {
    initSubscriptionWithExtras(subscriptionType, subscriptionFinishedListener, "");
}

public void initSubscriptionWithExtras(final String subscriptionType,
                                       final SubscriptionFinishedListener subscriptionFinishedListener,
                                       String payload) {
    if (iabHelper != null) {
        try {
            iabHelper.launchSubscriptionPurchaseFlow((Activity) context,
                    subscriptionType,
                    REQUEST_CODE,
                    new IabHelper.OnIabPurchaseFinishedListener() {
                        @Override
                        public void onIabPurchaseFinished(IabResult result, Purchase info) {
                            if (result.isFailure()) {
                                Log.e("TEST", "Error purchasing: " + result);
                                return;
                            }
                            if (info.getSku().equals(subscriptionType)) {
                                if(subscriptionFinishedListener != null){
                                    subscriptionFinishedListener.onSuccess();
                                }
                                Log.e("TEST", "Thank you for upgrading to premium!");
                            }
                        }
                    },
                    payload
            );
        } catch (IabHelper.IabAsyncInProgressException e) {
            e.printStackTrace();
        }
        //In case you get below error:
        //`Can't start async operation (refresh inventory) because another async operation (launchPurchaseFlow) is in progress.`
        //Include this line of code to end proccess after purchase
        //iabHelper.flagEndAsync();
    }
}

public void getSkuDetailsList(
        final ArrayList<String> skuIdsList,
        final SubscriptionInventoryListener subscriptionInventoryListener
) {
    if (iabHelper != null) {
        try {
            iabHelper.queryInventoryAsync(true, null, skuIdsList, new IabHelper.QueryInventoryFinishedListener() {
                @Override
                public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
                    if (result.isFailure()) {
                        Log.d("TEST", "Problem querying inventory: " + result);
                        dispose();
                        return;
                    }
                    ArrayList<SkuDetails> skuDetailsList = new ArrayList<>();
                    for (String skuId : skuIdsList) {
                        SkuDetails sku = inventory.getSkuDetails(skuId);
                        if (sku.getSku().equals(skuId)) {
                            skuDetailsList.add(sku);
                            sku.getPrice();
                        }
                    }

                    if (subscriptionInventoryListener != null) {
                        subscriptionInventoryListener.onQueryInventoryFinished(skuDetailsList);
                    }
                }
            });
        } catch (IabHelper.IabAsyncInProgressException e) {
            Log.e("TEST", "EXCEPTION:" + e.getMessage());
        }
    }

}

public void dispose() {
    if (iabHelper != null) {
        try {
            iabHelper.dispose();
        } catch (IabHelper.IabAsyncInProgressException e) {
            e.printStackTrace();
        }
        iabHelper = null;
    }
}

public IabHelper getIabHelper() {
    if (iabHelper == null) {
        iabHelper = new IabHelper(context, base64EncodedPublicKey);
    }
    return iabHelper;
}

public interface SubscriptionInventoryListener {
    void onQueryInventoryFinished(ArrayList<SkuDetails> skuList);
}

public interface SubscriptionFinishedListener{
    void onSuccess();
}

}

这是我的订阅按钮:

 subscriptionUtil.initSubscription(GlobalVar.skuOneId, new SubscriptionUtil.SubscriptionFinishedListener() {
        @Override
        public void onSuccess() {
            //Do whatever you want on subscription success
            Toast.makeText(SubsCriptionActivity.this, "subscription done!", Toast.LENGTH_SHORT).show();
        }
    });

OnActivityResult是:

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (!subscriptionUtil.getIabHelper().handleActivityResult(requestCode, resultCode, data)) {
        super.onActivityResult(requestCode, resultCode, data);
    }
}

我找不到任何解决方案。我的apk处于活动状态,但未发布。我上载的Play帐户和测试版本的APK的APK是相同的,我也将我的电子邮件添加到了Play帐户(“具有测试访问权限的gmail帐户”)。

谢谢。

0 个答案:

没有答案