2014-05-22 7 views
0

사용자가 원하는대로 구매할 수있는 앱 청구를 추가하려고합니다 (제한 없음). 그러므로 소비되어야합니다. 새 장치에서 코드를 처음 실행하면 제대로 작동하고 테스트 구매가 성공적으로 완료됩니다. 그러나 그것은 소비되지 않으며 나에게 또 다른 구매를하게하지 않습니다. 문제는이 메소드에있는 것처럼 보입니다. 항상 result.isFailure()로 끝나기 때문에 구매가 소비되지 않습니다 (한 번만 수행 할 수 있음).Google 인앱 결제가 항상 실패하고 소비하지 않음

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() { 
    public void onIabPurchaseFinished(IabResult result, Purchase purchase) 
    { 
     if (result.isFailure()) { 
      Toast.makeText(getApplicationContext(), "Failed to make purchase.", Toast.LENGTH_LONG).show(); 
      return; 
     }  
     else if (purchase.getSku().equals(ITEM_SKU)) { 
      consumeItem(); 
     } 

    } 
}; 

누구든지 내가이 문제를 어떻게 해결할 수 있는지 알고 있습니까? 당신은 응용 프로그램 시작시 사용자의 재고를 조회 할 필요가

Preference removeAds = (Preference) findPreference("inAppBilling"); 
     removeAds.setOnPreferenceClickListener(new OnPreferenceClickListener() { 
      public boolean onPreferenceClick(Preference preference) { 

       mHelper.launchPurchaseFlow(About.this, ITEM_SKU, 10001, mPurchaseFinishedListener, "mypurchasetoken"); 

       return true; 
      } 
    }); 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {  
      super.onActivityResult(requestCode, resultCode, data); 
     } 
    } 

    IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() { 
     public void onIabPurchaseFinished(IabResult result, Purchase purchase) 
     { 
      if (result.isFailure()) { 
       Toast.makeText(getApplicationContext(), "Failed to make purchase.", Toast.LENGTH_LONG).show(); 
       return; 
      }  
      else if (purchase.getSku().equals(ITEM_SKU)) { 
       consumeItem(); 
      } 

     } 
    }; 

    public void consumeItem() { 
     mHelper.queryInventoryAsync(mReceivedInventoryListener); 
    } 

    IabHelper.QueryInventoryFinishedListener mReceivedInventoryListener = new IabHelper.QueryInventoryFinishedListener() { 
     public void onQueryInventoryFinished(IabResult result, Inventory inventory) { 
      if (result.isFailure()) { 
       // Handle failure    
      } else { 
       mHelper.consumeAsync(inventory.getPurchase(ITEM_SKU), mConsumeFinishedListener); 
      } 
     } 
    }; 

    IabHelper.OnConsumeFinishedListener mConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener() { 
     public void onConsumeFinished(Purchase purchase, IabResult result) { 
      if (result.isSuccess()) {     
       CustomAlerts.showBasicAlert("Thanks", "We appreciate your support.", About.this); 
      } else { 
       // handle error 
      } 
     } 
    }; 

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

답변

1

: 여기

코드의 나머지 부분입니다. 구입했지만 아직 회수되지 않은 제품이있는 경우이 시점에서 사용할 수 있습니다. Here's 검색을위한 문서.

+2

구입 한 항목을 확인하는 중에 'onQueryInventoryFinished'에서'isFailure'가 표시되는 이유는 무엇입니까? 이전에는 구매가 정상적으로 처리되었습니다. –

관련 문제