管理Android应用程序上的订阅

管理Android应用程序上的订阅,android,google-play,subscription,Android,Google Play,Subscription,我需要向我的应用程序添加订阅支持,以便用户可以购买一年服务的订阅。 我刚刚在谷歌开发者控制台上创建了订阅。 我的问题是:我不知道如何检查用户订阅。 我正在努力做到这一点: 当用户启动我的应用程序时,如果有网络,应用程序会联系Play Store并检查用户是否购买了订阅和付款日期。这些数据总是保存在语言环境文件中,因此如果没有网络,应用程序将使用本地数据进行检查 如果用户购买了订阅,我会检查订阅是否已超过一年。事实上,我在网上看到Play Store只提供付款日期,而不提供完成订阅日期 如果检查为

我需要向我的应用程序添加订阅支持,以便用户可以购买一年服务的订阅。 我刚刚在谷歌开发者控制台上创建了订阅。 我的问题是:我不知道如何检查用户订阅。 我正在努力做到这一点:

  • 当用户启动我的应用程序时,如果有网络,应用程序会联系Play Store并检查用户是否购买了订阅和付款日期。这些数据总是保存在语言环境文件中,因此如果没有网络,应用程序将使用本地数据进行检查
  • 如果用户购买了订阅,我会检查订阅是否已超过一年。事实上,我在网上看到Play Store只提供付款日期,而不提供完成订阅日期
  • 如果检查为真,应用程序将在高级模式下工作,而不是在标准模式下工作 现在的问题是:

  • 我如何检查购买情况?我可以像在应用程序中一样使用hasPurchase()方法吗
  • 如果我需要在第1)点上使用hasPurchase(),如果用户在一年后不续订,该方法是否返回False
  • 我怎么知道购买日期
  • 我复制了一段代码,这是在应用程序中检查正常的有效代码,我想编辑它以在订阅检查中使用它:

        private void checkForPremium() {
        final IabHelper buyHelper = new IabHelper(this, "MYKEY");
    
        // initialize the InApp Billing system
        buyHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
            @Override
            public void onIabSetupFinished(IabResult result) {
                if (!result.isSuccess()) {
                    buyHelper.dispose();
    
                    Log.e("MYAPP", "Error: " + result);
                    return;
                }
    
                // Get a list of all products the user owns
                buyHelper.queryInventoryAsync(new IabHelper.QueryInventoryFinishedListener() {
                    @Override
                    public void onQueryInventoryFinished(IabResult result, Inventory inv) {
                        if (result.isFailure()) {
                            buyHelper.dispose();
    
                            Log.e("MYAPP", "Error: " + result);
                        } else {
                            boolean isPremium = inv.hasPurchase("MYSKU");
                            inv.getSkuDetails().
    
                            buyHelper.dispose();
    
                            // Forward to the currect activity depending on premium / demo mode
                            if (isPremium) {
                                if(menu != null){
                                    MenuItem item = menu.findItem(R.id.action_premium);
                                    item.setVisible(false);
                                }
                                Log.w("MYAPP", "PREMIUM");
                            } else {
                                if(menu != null){
                                    MenuItem item = menu.findItem(R.id.action_premium);
                                    item.setVisible(true);
                                }
                                Log.w("MYAPP", "NO PREMIUM");
                            }
                        }
                    }
                });
            }
        });
    }
    

    我对订阅了解不多。但AFAIK Play store在本地维护购买信息。您不应该将其存储在本地(因为您将有加密这些订阅信息的开销)。即使数据连接关闭,Play store也会返回您的购买信息。@KalpeshPatel听起来不错。但我不知道如何检索信息:)由于我没有处理订阅,我不知道如何检索购买信息。但我认为这应该和正常的应用内计费一样。选中此复选框这非常清楚地表明购买信息是在本地缓存的。此外,您还可以阅读本文的订阅段落,其中明确指出订阅产品和应用内产品的购买API没有区别。这意味着您可以使用getPurchases请求获取购买信息。