2013-08-25 6 views
5

. Wdrażam subskrypcję za pomocą interfejsu API rozliczeń w wersji 3. Po dialogowe płatność została zamknięta (płatność udało), sterowanie jest zwracane z powrotem do mojej działalnościW interfejsie API rozliczania aplikacji v3 INAPP_PURCHASE_DATA ma wartość null w pakiecie, gdy parametr onActivityResult nazywa się

wywołanie metody

 String payload = UUID.randomUUID().toString(); 
     bundle = mService.getBuyIntent(3, getPackageName(), mProduct, "subs", payload); 

     int responseCode = bundle.getInt("RESPONSE_CODE"); 
     if (responseCode == 0) { 
      PendingIntent pendingIntent = bundle.getParcelable("BUY_INTENT"); 
      startIntentSenderForResult(pendingIntent.getIntentSender(), 1001, new Intent(), Integer.valueOf(0), Integer.valueOf(0), Integer.valueOf(0)); 
     } else if (responseCode == 1) { 
       mErrorMessage.setText(getResources().getString(R.string.purchase_cancelled)); 
       mErrorMessage.setVisibility(View.VISIBLE); 
     } else if (responseCode == 7) { 
       mErrorMessage.setText(getResources().getString(R.string.payment_twice)); 
       mErrorMessage.setVisibility(View.VISIBLE); 
     } else { 
       mErrorMessage.setText(getResources().getString(R.string.payment_general_error)); 
       mErrorMessage.setVisibility(View.VISIBLE); 
     } 

Moja aktywność

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode == Activity.RESULT_OK) { 
      // Null 
      String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA" 
     } 
    } 

Problem polega na tym, że ciąg purchaseData jest null. Może to być spowodowane tym, że już kupiłem tę subskrypcję (milion razy podczas testowania) - i że powinienem był najpierw sprawdzić w getPurchases().

Czy wiadomo, że zakupy "przechodzą - najwyraźniej z sukcesem", jeśli użytkownik próbuje zapłacić, gdy ma 1) aktualnego abonenta, lub 2) w okresie po anulowaniu, ale przed wygaśnięciem usługi?

+0

opublikować metodę wywołania –

+0

Wysłałem metodę wywoływania również –

+2

miałem ten sam problem z android.test.purchased .... spróbuj zaimplementować prawdziwy produkt i przetestuj za pomocą piaskownicy .... myślę, że z Androidem. test.purchased zawsze otrzymujesz wartość null .. –

Odpowiedz

4

Miałem ten sam problem i odkryłem, że używam ITEM_TYPE_SUBS = "subs" zamiast ITEM_TYPE_INAPP = "inapp".

Po wprowadzeniu odpowiedniego parametru zadziałało zgodnie z oczekiwaniami.

+0

to nie adres w ogóle, OP określa Ciąg payload = UUID.randomUUID(). ToString(); pakiet = mService.getBuyIntent (3, getPackageName(), mProduct, "subs", ładunek); – desgraci

+0

Przyjemny połów. "inapp" mnie uratował. Dzięki @Repminister – Nizam