2013-08-02 10 views
10

Próbuję wdrożyć w rozliczeniach aplikacji. Użyłem tego trywialnego przykładu.W rozliczeniach aplikacji Konfiguracja IAB udana, ale kwarantannaRaporty dotyczące zapasów Pomocnik IAB nie jest skonfigurowany

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

     } 
    }); 

jego pracy doskonale i jestem w stanie zakupić z mojego konta testowego.

Ale problemem jest to, że muszę skomentować linia Kod

// mHelper.queryInventoryAsync (mGotInventoryListener); W związku z tym nie mogę przesyłać zapytań o zasoby reklamowe. Podczas dubugowania okazało się, że zmienna w klasie IabHelper ma wartość false i wywołuje wyjątek. Dziennik tuż po powiedzieniu instalacji zakończył się mówiąc, że pomocnik IAB nie jest skonfigurowany.


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

Zobacz tę odpowiedź: http://stackoverflow.com/questions/17944522/google-in-app-billing -causing-exception/17960318 # 17960318 – Carl

+0

Zobacz też http://stackoverflow.com/a/13981478/2106820 –

Odpowiedz

0

Spróbuj tego.

Konfiguracja:

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

Na kliknięciu przycisku Upgrade:

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) 
{ 
} 
Powiązane problemy