2013-06-01 3 views
0

Я внедрил in-app billing v3 в своей Android-игре, но у меня проблемы, когда я пытаюсь купить покупку.Android IAB V3 - потребительские покупки

Игра опубликована, и продукты могут быть приобретены успешно, однако из-за нехватки потребления они могут быть приобретены только один раз. Когда покупка будет проверена во второй раз, возвращается ответ 5 - developer error.

Может ли кто-нибудь дать мне совет?

Это мой код:

 public boolean orderBoostersV3(String packId, int alreadyAfterConsume) { 
      Bundle bundle = null; 
      try { 
    // for tetsing    packId = "android.test.purchased"; 
       if (mService == null) { 
        Log.e(TAG, "mService is null"); 
        return false; 
       } 
       // Bundle ownedItems = mService.getPurchases(3, "eu.acgame", "inapp", null); 


       bundle = mService.getBuyIntent(3, "eu.acgame", packId, ITEM_TYPE_INAPP, "AC game"); 

       PendingIntent pendingIntent = bundle.getParcelable(RESPONSE_BUY_INTENT); 
       if (bundle.getInt(RESPONSE_CODE) == BILLING_RESPONSE_RESULT_OK) { 
        // Start purchase flow (this brings up the Google Play UI). 
        // Result will be delivered through onActivityResult(). 
        try { 
         a.startIntentSenderForResult(pendingIntent.getIntentSender(), RC_BUY, new Intent(), 
           Integer.valueOf(0), Integer.valueOf(0), Integer.valueOf(0)); 
         // consume(packId); // consuming right after prdering does not work 
         return true; 
        } catch (IntentSender.SendIntentException e) { 
         Log.e(TAG, "Billing unavailable. Error:" + e.getMessage()); 
         e.printStackTrace(); 
        } 
       } else if (bundle.getInt(RESPONSE_CODE) == BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLE) { 
        Log.d(TAG, "Boostering not available"); 
        return false; 
       } else if (bundle.getInt(RESPONSE_CODE) == BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED && alreadyAfterConsume > 10) { 
        Log.e(TAG, "Consume did not work " + alreadyAfterConsume + " Panic!"); 
        return false; 
       } else if (bundle.getInt(RESPONSE_CODE) == BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED) { 
        Log.d(TAG, "Product " + packId + " already purchased. Calling consume"); 
        int result = consume(packId); // if result not 0, probably all consumed 
        if (result == 0 || result == 5) // consumed properly, try once more 
         return orderBoostersV3(packId, alreadyAfterConsume + 1); 
        else 
         return orderBoostersV3(packId, 99); // finish consuming 

       } else 
        Log.d(TAG, "Billing unexpected code:" + bundle.getInt(RESPONSE_CODE)); 

      } catch (RemoteException e) { 
       Log.e(TAG, "Billing error"); 
       e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 
      } 
      return false; 
     } 

private int consume(String packId) throws RemoteException { 
    Bundle purchases = mService.getPurchases(3, "eu.acgame", "inapp", null); 
    Log.d(TAG, "Purchases:" + purchases); 
    int response = mService.consumePurchase(3, "eu.acgame", "inapp:eu.acgame:" + packId); // android.test.purchased"); 
    Log.d(TAG, "Consume response:" + response); 
    return response; 
} 
+0

Можете ли вы показать нам пример кода, с тем, что вы уже пробовали, и вашим текущим циклом покупки? – melodiouscode

+0

Здравствуйте, я добавил код к моему оригинальному вопросу – Skoky

ответ

0

мне удалось решить мою собственную проблему. Я должен был передать оригинальный токен покупки в consumePurchase, это получено в форме запроса коллекции предметов покупки.

Смежные вопросы