在Android应用上管理订阅

时间:2014-08-04 13:39:03

标签: android google-play subscription

我需要为我的应用程序添加订阅支持,以便用户可以购买一年的服务订阅。 我刚刚在Google Developer Console上创建了订阅。 我的问题是:我不知道如何检查用户订阅。 我正在努力做到这一点:

  1. 当我的应用程序由用户启动时,如果有网络,该应用程序会联系Play商店并检查用户是否已购买订阅和付款日期。这些数据始终保存在语言环境文件中,因此如果没有网络,应用程序将使用本地数据进行检查;
  2. 如果用户已购买订阅,我会检查是否已超过一年。事实上,我已经在网上看到,Play商店只提供付款日期,而不是完成订阅日期;
  3. 如果检查结果为true,则应用将以高级模式工作,而不是标准模式;
  4. 现在出现问题:

    1. 如何查看购买?我可以像普通的in-app一样使用hasPurchase()方法吗?
    2. 如果我需要在第1点使用hasPurchase())如果用户在一年后没有续订,这个方法会返回False吗?
    3. 我如何知道购买日期?
    4. 我复制了一段代码,这是一个有效的代码来检查正常的应用内,我想编辑它以在订阅检查中使用它:

          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");
                              }
                          }
                      }
                  });
              }
          });
      }
      

0 个答案:

没有答案