2012-03-20 13 views
5

Śledzę do następujących wielki poradnik na: http://blog.blundell-apps.com/simple-inapp-billing-payment/Billingservice Android - No podpis

Zrobiłem wszystko tutorial mówi i przeczytałem wszystko 3 razy od nowa, ale nadal nie jestem otrzymania podpisu w intent.getStringExtra(INAPP_SIGNATURE) w onReceive() : BillingReceiver.java

co powoduje awarię mojej aplikacji, ponieważ aplikacja nie może porównywać podpisów w celu sprawdzenia, czy zakup został wykonany prawidłowo.

To jest jak moja BillingReceiver wygląda następująco:

public class BillingReceiver extends BroadcastReceiver { 

    private static final String TAG = "BillingService"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      Log.i(TAG, "Received action: " + action); 
    if (ACTION_PURCHASE_STATE_CHANGED.equals(action)) { 
     String signedData = intent.getStringExtra(INAPP_SIGNED_DATA); 
     String signature = intent.getStringExtra(INAPP_SIGNATURE); 
     Log.e(TAG, "<!-- SIGNATURE : "+ intent.getExtras().getString("inapp_signature")); 


     Log.i(TAG, "<!-- SIGNATURE : "+intent.getStringExtra(INAPP_SIGNATURE)); 

     purchaseStateChanged(context, signedData, signature); 
    } else if (ACTION_NOTIFY.equals(action)) { 
     String notifyId = intent.getStringExtra(NOTIFICATION_ID); 
     notify(context, notifyId); 
    } else if (ACTION_RESPONSE_CODE.equals(action)) { 
     long requestId = intent.getLongExtra(INAPP_REQUEST_ID, -1); 
     int responseCodeIndex = intent.getIntExtra(INAPP_RESPONSE_CODE, C.ResponseCode.RESULT_ERROR.ordinal()); 
     checkResponseCode(context, requestId, responseCodeIndex); 
    } else { 
     Log.e(TAG, "unexpected action: " + action); 
    } 
    } 

    private void purchaseStateChanged(Context context, String signedData, String signature) { 
      Log.i(TAG, "purchaseStateChanged got signedData: " + signedData); 
      Log.i(TAG, "purchaseStateChanged got signature: " + signature); 
      BillingHelper.verifyPurchase(signedData, signature); 
    } 

    private void notify(Context context, String notifyId) { 
      Log.i(TAG, "notify got id: " + notifyId); 
      String[] notifyIds = {notifyId}; 
      BillingHelper.getPurchaseInformation(notifyIds); 
    } 

    private void checkResponseCode(Context context, long requestId, int responseCodeIndex) { 
      Log.i(TAG, "checkResponseCode got requestId: " + requestId); 
      Log.i(TAG, "checkResponseCode got responseCode: " + C.ResponseCode.valueOf(responseCodeIndex)); 
    } 
} 
+0

Mam do czynienia z tym samym problemem. Każda pomoc doceniona. –

Odpowiedz

5

Czy konta głównego na urządzeniu testowym takie samo jak konto programisty Google Play?

Jeśli nie, nie otrzymasz sygnatur w odpowiedziach statycznych android.test. *, Chyba że aplikacja została wcześniej opublikowana w Play.

Zobacz tabelę w http://developer.android.com/guide/market/billing/billing_testing.html#static-responses-table dla pełnego zestawu warunków.

+0

Nie sądzę, że ten stół całkiem trzyma. Powinienem był być w wierszu 6 tego stołu (opublikowana aplikacja (choć nie została opublikowana z fakturowaniem), wersja robocza apk z przesłaniem płatności, konto non dev na urządzeniu), ale otrzymywałem null sig. Zmieniono na urządzenie deweloperskie i wszystko działa. Być może pierwsza kolumna odnosi się do opublikowanej wersji aplikacji, która już zawiera rozliczenia. – William

+0

@William Próbowałem używać w aplikacji rozliczeniowej wersji 3 api. Wypróbowałem telefon programisty, by kupić zarezerwowane identyfikatory produktów (statyczne). Zakup się powiódł, ale podpis był pusty. Jakieś pomysły? – Krishnabhadra

+2

@Krishnabhadra Nie sądzę, aby identyfikatory statyczne zwróciły już podpis. Zobacz https://groups.google.com/d/topic/android-developers/PCbCJdOl480/discussion – TalkLittle