2014-02-16 43 views
1

以下代碼是我的inapp計費應用程序,但我有一個問題,我該如何保存用戶購買的物品,不需要連接到谷歌每次玩的時候檢查一下呢?android inapp計費:如何保存購買的物品

以下代碼是我的inapp帳單應用程序,但我有一個問題,我該如何保存用戶購買的物品,以免每次檢查時都需要連接到google播放?

package com.example.inapptest; 

import com.example.inapptest.R; 

import com.example.android.trivialdrivesample.util.IabHelper; 
import com.example.android.trivialdrivesample.util.IabResult; 
import com.example.android.trivialdrivesample.util.Inventory; 
import com.example.android.trivialdrivesample.util.Purchase; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.View; 
import android.widget.ImageView; 

public class MainActivity extends Activity { 

boolean mIsPremium = false; 
static final String SKU_PREMIUM = "premium"; 
static final int RC_REQUEST = 10001; 
IabHelper mHelper; 

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

    String base64EncodedPublicKey = "MIHNMA0GCSqGSIb3DQEBAQUAA4G7ADCBtwKBrwDEYf1TFjO6qpCR5t/7w+P0luTLEKH6aSUYyXt95mHdJOf7gLoLMYJLlfHp/nVyDLLDIoG5a2RaFE5cwZxc0CCVXouuhkO/B/ckFb03FZcg8T0oOSLIyNiPrrrtlln7DyXhvv60KFk8qozuX46MiR+SZfNdg5AJrV9KDHZ9aIHyHztQkpajZ9WJd7F4theRGom3Gydp0LRTumHcmgweOj0ZF6CzzSEQkgOp7S1Guo8CAwEAAQ=="; 

    mHelper = new IabHelper(this, base64EncodedPublicKey); 
    mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() { 
     public void onIabSetupFinished(IabResult result) { 
     mHelper.queryInventoryAsync(mGotInventoryListener); 
     } 
    }); 

} 

IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() { 
    public void onQueryInventoryFinished(IabResult result, Inventory inventory) { 

     // Do we have the premium upgrade? 
     Purchase premiumPurchase = inventory.getPurchase(SKU_PREMIUM); 
     mIsPremium = (premiumPurchase != null && verifyDeveloperPayload(premiumPurchase)); 


     updateUi(); 
     } 




}; 

public void onUpgradeAppButtonClicked(View arg0) { 
     String payload = ""; 

    mHelper.launchPurchaseFlow(this, SKU_PREMIUM, RC_REQUEST, 
      mPurchaseFinishedListener, payload); 
} 

// Callback for when a purchase is finished 
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() { 
    public void onIabPurchaseFinished(IabResult result, Purchase purchase) { 

     if (purchase.getSku().equals(SKU_PREMIUM)) { 
      // bought the premium upgrade! 
      mIsPremium = true; 
      updateUi(); 
     } 

    } 
}; 

boolean verifyDeveloperPayload(Purchase p) { 
    String payload = p.getDeveloperPayload(); 
    return false; 
} 



@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if (mHelper != null) mHelper.dispose(); 
    mHelper = null; 
} 

public void updateUi() { 
    // TODO Auto-generated method stub 
    ((ImageView)findViewById(R.id.free_or_premium)).setImageResource(R.drawable.premium); 
    findViewById(R.id.upgrade_button).setVisibility(View.INVISIBLE); 

} 
} 

回答

2

如果您使用IAB庫的最新版本3,則無需保存購買。每次啓動應用程序時,您都可以從服務中查詢它們,因爲Google Play服務會爲您在設備上緩存購買內容。請參閱remark on Local Caching