2017-01-21 2 views
1

Я установил подписной продукт в своем приложении и работает для покупки. Я вижу покупку в консоли разработчика Google. Когда я выйду из системы, а затем снова вернусь в приложение, я снова перейду на страницу подписки. Приложение не распознает, что подписка была приобретена, и она должна позволить пользователю получить доступ. Если я снова нажимаю кнопку подписки, она говорит: «Вы уже подписались на ... Управление подписками». Я не уверен, что нужно сделать, чтобы либо отправить пользователя на подписанную информацию после проверки подписки, либо отклонить, если подписка не найдена и отправить пользователя на страницу подписки. Я думаю, что у меня просто нет знаний, чтобы быть уверенным, как его построить. Вот код, который у меня есть. У меня отсутствует кусок кода, который бы справился с этим?Google InAppBilling Проверка подписки на вход в приложение

Я использую firebase в качестве моего backend для регистрации/входа. Не уверен, что мне нужно использовать firebase для сохранения токена и т. Д. Любая помощь будет оценена. Я знаю, что я новичок и учился, но мой проект на 98% завершен, и это удерживает меня.

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 

import com.iliprivateequity.btfxforexalerts.Util.IabHelper; 
import com.iliprivateequity.btfxforexalerts.Util.IabResult; 
import com.iliprivateequity.btfxforexalerts.Util.Inventory; 
import com.iliprivateequity.btfxforexalerts.Util.Purchase; 

public class GoogleInAppBilling extends AppCompatActivity implements View.OnClickListener { 

    private String base64EncodedPublicKey = "*****"; 

    public Button buttonSubscribe; 
    public Button buttonSubscribed; 
    IabHelper mHelper; 
    static final String SKU_SUBSCRIBE_BTFX = "btfx_alerts_service_50"; 
    static final String TAG = "BTFX_Alerts"; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_google_in_app_billing); 

     loadInAppPurchase(); 

     buttonSubscribe = (Button) findViewById(R.id.buttonsubscribe); 
     buttonSubscribed = (Button) findViewById(R.id.button_subscribed); 
     buttonSubscribed.setEnabled(false); //todo remember to set back to false. its true just for testing the build 

     buttonSubscribe.setOnClickListener(this); 
     buttonSubscribed.setOnClickListener(this); 

    } 

    private void loadInAppPurchase() { 
     mHelper = new IabHelper(this, base64EncodedPublicKey); 
     mHelper.enableDebugLogging(true); 

     mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() { 

      @Override 
      public void onIabSetupFinished(IabResult result) { 
       if (!result.isSuccess()) { 
        Log.d(TAG, "Problem setting up in-app billing: " + result); 
       } else { 
        Log.d(TAG, "Setup successful. Querying inventory."); 
       } 
       mHelper.queryInventoryAsync(mGotInventoryListener); 
      } 


     }); 
    } 

    IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() { 

     @Override 
     public void onQueryInventoryFinished(IabResult result, Inventory inventory) { 
      Log.d(TAG, "Query inventory finished."); 
      if (result.isFailure()) { 
       Log.d(TAG, "Failed to query inventory: " + result); 
       return; 

      } 
      Log.d(TAG, "Query inventory was successful."); 

      Purchase sku_purchase = inventory.getPurchase(SKU_SUBSCRIBE_BTFX); 
      if (sku_purchase != null) { 
       mHelper.consumeAsync(inventory.getPurchase(SKU_SUBSCRIBE_BTFX), 
         mConsumeFinishedListener); 
       return; 

      } 
     } 
    }; 

    IabHelper.OnConsumeFinishedListener mConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener(){ 
     public void onConsumeFinished(Purchase purchase, IabResult result) { 
      Log.d("Tag", "Consumption finished. Purchase: " + purchase + ", result: " + result); 

      if (mHelper == null) 
       return; 

      if (result.isSuccess()) { 
       Log.d("TAG", "Consumption successful. Provisioning."); 
      } else { 
       Log.d("TAG", "Error while consuming: " + result); 
      } 
      Log.d("Tag", "End consumption flow."); 
     } 
    }; 

    @Override 
    public void onClick(View v) { 
     if (v == buttonSubscribe) { 
      mHelper.launchPurchaseFlow(GoogleInAppBilling.this, SKU_SUBSCRIBE_BTFX, IabHelper.ITEM_TYPE_SUBS 
        , 10001, mPurchaseFinishedListener, "alertservicepurchased"); 
     } 
     if (v == buttonSubscribed){ 
      startActivity(new Intent(this, ProfileActivity.class)); 
     } 

    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     if (!mHelper.handleActivityResult(requestCode, resultCode, data)){ 
      super.onActivityResult(requestCode,resultCode,data); 
     }else{ 
      Log.d("TAG", "onActivityResult handled by IABUtil."); 
     } 
    } 

    // Callback for when a purchase is finished 
    IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener 
      = new IabHelper.OnIabPurchaseFinishedListener() { 
     public void onIabPurchaseFinished(IabResult result, Purchase purchase) { 
      Log.d(TAG, "Purchase finished: " + result + ", purchase: " + purchase); 

      if (mHelper == null) return; 

      if (result.isFailure()) { 
       Log.d(TAG, "Error purchasing: " + result); 
       return; 

      } 
      Log.d(TAG, "BTFX Alerts subscription purchased."); 
      if (purchase.getSku().equals(SKU_SUBSCRIBE_BTFX)) { 
       Log.d("TAG", "Thank you for subscribing!"); 
       mHelper.consumeAsync(purchase, mConsumeFinishedListener); 
       // bought the btfx alerts subscription 

       buttonSubscribe.setEnabled(false); 
       buttonSubscribed.setEnabled(true); 

      } 

     } 
    }; 
}; 

ответ

1

Вам просто нужно проверить, есть ли у пользователя подписка и в зависимости от результата показать/скрыть оплаченные вещи.

There is пример как это сделать. Также вы можете рассмотреть возможность использования этого library, что упростит работу с IAP на Android.