Question

Ok so here my GUI is suppossed to update when the purchases are complete. I am using android.test.purchase and the GUI is not updating should i be worried or no?

Variables

             IabHelper mHelper;


static final String TAG = "com.back.to.school.zone.readingLevelPicker";

// SKUs for our products: the premium upgrade (non-consumable)
static final String SKU_PREMIUM = "android.test.refunded";

// Does the user have the premium upgrade?
boolean mIsPremium = false;

// (arbitrary) request code for the purchase flow
static final int RC_REQUEST = 20;

onCreate method

                      String base64EncodedPublicKey = "<my key is in here>";  
    mHelper = new IabHelper(this, base64EncodedPublicKey);

    //It is recommended to add more security than just pasting it in your source code;

    Log.d(TAG, "Starting setup.");
    mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
    public void onIabSetupFinished(IabResult result) {
    Log.d(TAG, "Setup finished.");

    if (!result.isSuccess()) {
    // Oh noes, there was a problem.
    Log.d(TAG, "Problem setting up In-app Billing: " + result);
    }
    // Hooray, IAB is fully set up!
    mHelper.queryInventoryAsync(mGotInventoryListener);
    }
    });

a Button to buy the needed items

               buyButton = (Button) findViewById(R.id.buyButtonS);
    buyButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
             mHelper.launchPurchaseFlow(readingLevelPicker.this, SKU_PREMIUM, 10001,   
                       mPurchaseFinishedListener, "");
        }

One of the buttons that need to be enabled and the end of the on create method after mLevel10

    mLevel10.setEnabled(false);
    mLevel10.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            Intent myIntent = new Intent(v.getContext(),
                    readingMode10.class); // Coming soon
            startActivityForResult(myIntent, 0);

        }
    });


} //end of oncreate method



IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
    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;
    }
    else {
    Log.d(TAG, "Query inventory was successful.");
    // does the user have the premium upgrade?
    mIsPremium = inventory.hasPurchase(SKU_PREMIUM);

    // update UI accordingly

    mLevel6 = (Button) findViewById(R.id.level6);
    mLevel7 = (Button) findViewById(R.id.level7);
    mLevel8 = (Button) findViewById(R.id.level8);
    mLevel9 = (Button) findViewById(R.id.level9);
    mLevel10 = (Button) findViewById(R.id.level10);

    mLevel6.setEnabled(true);
    mLevel7.setEnabled(true);
    mLevel8.setEnabled(true);
    mLevel9.setEnabled(true);
    mLevel10.setEnabled(true);
    Log.d(TAG, "User is " + (mIsPremium ? "PREMIUM" : "NOT PREMIUM"));
    }

    Log.d(TAG, "Initial inventory query finished; enabling main UI.");
    }
    };

    IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
    public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
    if (result.isFailure()) {
    Log.d(TAG, "Error purchasing: " + result);
    return;
    }
    else if (purchase.getSku().equals(SKU_PREMIUM)) {
    // give user access to premium content and update the UI

        mLevel6 = (Button) findViewById(R.id.level6);
        mLevel7 = (Button) findViewById(R.id.level7);
        mLevel8 = (Button) findViewById(R.id.level8);
        mLevel9 = (Button) findViewById(R.id.level9);
        mLevel10 = (Button) findViewById(R.id.level10);

        mLevel6.setEnabled(true);
        mLevel7.setEnabled(true);
        mLevel8.setEnabled(true);
        mLevel9.setEnabled(true);
        mLevel10.setEnabled(true);
    }
    }
    };

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + ","
    + data);

    // Pass on the activity result to the helper for handling
    if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
    super.onActivityResult(requestCode, resultCode, data);

    } else {
    Log.d(TAG, "onActivityResult handled by IABUtil.");
    }
    }

some comments - from my understand everything is working as far as the billing methods goes because when using android.test.purchased it says payment completed. BUT THE UI does not enable the text boxes, therefore leaving the textboxes disabled, ive tried to throw a break point at the location mLevel7.setEnabled("true") but it doesnt show anything out of the ordinary no failures are presented the UI just is not updating? why?

Était-ce utile?

La solution

make sure you are not testing for the queryInvetory method, because it will work only when you are trying to purchase real product instead of dummy product(android.test.purchased), because google will not keep record for the dummy product according to my knowledge.

onCreate() method

Define all variables in the oncreate method and just change textbox enable-disable in the queryInventory and IabPurchaseFinishListener.

mLevel6 = (Button) findViewById(R.id.level6);
mLevel7 = (Button) findViewById(R.id.level7);
mLevel8 = (Button) findViewById(R.id.level8);
mLevel9 = (Button) findViewById(R.id.level9);
mLevel10 = (Button) findViewById(R.id.level10);

QueryInventoryFinishedListener

IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
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;
}
//else {                // you don't need to check for the failure then go if and other wise else.
Log.d(TAG, "Query inventory was successful.");
// does the user have the premium upgrade?
mIsPremium = inventory.hasPurchase(SKU_PREMIUM);

// update UI accordingly

if(mIsPremium){

     mLevel6.setEnabled(true);
     mLevel7.setEnabled(true);
     mLevel8.setEnabled(true);
     mLevel9.setEnabled(true);
     mLevel10.setEnabled(true);
}

Log.d(TAG, "User is " + (mIsPremium ? "PREMIUM" : "NOT PREMIUM"));
// }

Log.d(TAG, "Initial inventory query finished; enabling main UI.");
}
};  

OnIabPurchaseFinishedListener

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
    public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
    if (result.isFailure()) {
    Log.d(TAG, "Error purchasing: " + result);
    return;
    }
    if (purchase.getSku().equals(SKU_PREMIUM)) { // same as above you don't need to check else if condition again
    // give user access to premium content and update the UI

        mLevel6.setEnabled(true);
        mLevel7.setEnabled(true);
        mLevel8.setEnabled(true);
        mLevel9.setEnabled(true);
        mLevel10.setEnabled(true);
    }
    }
    };

Let me know it is working for you or not.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top