2013-08-02 5 views
10

Sto tentando di implementare nella fatturazione delle app. Ho usato il trivialdrivesample così com'è.Nella fatturazione di app Configurazione IAB riuscita ma quaryInventory riporta l'assistente IAB non impostato

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // load game data 
    loadData(); 


    String base64EncodedPublicKey = "my key"; 



    // Create the helper, passing it our context and the public key to verify signatures with 
    Log.d(TAG, "Creating IAB helper."); 
    mHelper = new IabHelper(this, base64EncodedPublicKey); 

    // enable debug logging (for a production application, you should set this to false). 
    mHelper.enableDebugLogging(true); 

    // Start setup. This is asynchronous and the specified listener 
    // will be called once setup completes. 
    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. 
       complain("Problem setting up in-app billing: " + result); 
       return; 
      } 

      // Hooray, IAB is fully set up. Now, let's get an inventory of stuff we own. 
      Log.d(TAG, "Setup successful. Querying inventory."); 
      // mHelper.queryInventoryAsync(mGotInventoryListener); 
     } 
    }); 
} 

Button purchaseB = (Button)findViewById(R.id.purchase_button); 

if(purchaseB != null) 
    purchaseB.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 

     onUpgradeAppButtonClicked(null); 

     } 
    }); 

suo funzionamento perfettamente e io sono in grado di acquistare dal mio account di prova.

Ma il problema è che devo commentare la riga di codice

// mHelper.queryInventoryAsync (mGotInventoryListener); SO Non riesco a interrogare l'inventario. Su dubugging ho scoperto che

// Is setup done? 
    boolean mSetupDone = false; 

in IabHelper classe variabile è falsa e solleva un'eccezione. Il registro subito dopo aver detto che l'installazione ha avuto successo dicendo che l'assistente IAB non è stato configurato.


08-02 16:02:42.453: D/PackList(10346): Creating IAB helper. 
08-02 16:02:42.453: D/PackList(10346): Starting setup. 
08-02 16:02:42.468: D/IabHelper(10346): Starting in-app billing setup. 
08-02 16:02:42.515: D/PackList(10346): Creating IAB helper. 
08-02 16:02:42.539: D/IabHelper(10346): Billing service connected. 
08-02 16:02:42.546: D/IabHelper(10346): Checking for in-app billing 3 support. 
08-02 16:02:42.562: D/IabHelper(10346): In-app billing version 3 supported for com.xx 
08-02 16:02:42.570: D/IabHelper(10346): Subscriptions AVAILABLE. 
08-02 16:02:42.570: D/PackList(10346): Setup finished. 
08-02 16:02:42.570: D/PackList(10346): Setup successful. Querying inventory. 
08-02 16:02:42.578: E/IabHelper(10346): In-app billing error: Illegal state for operation (queryInventory): IAB helper is not set up. 
+0

Vai a questa risposta: http://stackoverflow.com/questions/17944522/google-in-app-billing -causing-exception/17960318 # 17960318 – Carl

+0

Vedi anche http://stackoverflow.com/a/13981478/2106820 –

risposta

0

Prova questa.

Impostazione:

mIabHelper = new IabHelper(this, ProjectKonstants.APP_PUBLIC_KEY_GOOGLE_PLAY); 

mIabHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() 
{ 
    public void onIabSetupFinished(IabResult result) 
    { 
     if (result.isSuccess()) 
     { 
      mIabHelper.queryInventoryAsync(mInitialInventoryListener); 
     } 
    } 
}); 

mInitialInventoryListener = new IabHelper.QueryInventoryFinishedListener() 
{ 
    public void onQueryInventoryFinished(IabResult result, Inventory inventory) 
    { 
     if (result.isSuccess()) 
     { 
      mBHasDonated = inventory.hasPurchase(ProjectKonstants.APPLICATION_SKU_FOR_DONATION); 
     } 
     else 
     { 
      mBHasDonated = false; 
     } 
    } 
}; 

mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() 
{ 
    public void onIabPurchaseFinished(IabResult result, Purchase purchase) 
    { 
     if (result.isSuccess()) 
     { 
      if (purchase.getSku().equals(ProjectKonstants.APPLICATION_SKU_FOR_DONATION)) 
      { 
       mBHasDonated = true; 
       return; 
      } 
     } 
     mBHasDonated = false; 
    } 
}; 

Il pulsante Aggiorna cliccato:

AccountManager accountManager = (AccountManager) getSystemService(ACCOUNT_SERVICE); 
Account[] accounts = accountManager.getAccounts(); 
String strIdentifier = "[" + accounts[0].name + "][" + android.os.Build.MODEL + "][" + android.os.Build.VERSION.RELEASE + "]"; 
try 
{ 
    mIabHelper.launchPurchaseFlow(this, ProjectKonstants.APPLICATION_SKU_FOR_DONATION, 10001, mPurchaseFinishedListener, strIdentifier); 
} 
catch (IllegalStateException e) 
{ 
}