2012-03-20 3 views
5

Я следовал к следующему большой учебник по адресу: http://blog.blundell-apps.com/simple-inapp-billing-payment/Billingservice Android - Нет подписи

Я сделал все, что учебник говорит и прочитать все 3 раза снова, но до сих пор я не могу получить подпись в intent.getStringExtra(INAPP_SIGNATURE) в onReceive() : BillingReceiver.java

, что приводит к сбою моего приложения, потому что приложение can not сравнивает подписи, чтобы проверить, выполнена ли покупка правильно.

Это как мой BillingReceiver выглядит следующим образом:

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

Я столкнулся с таким же вопросом. Любая помощь оценивается. –

ответ

5

является основной учетной записи на тестовом устройстве так же, как ваш Google Play аккаунт разработчика?

Если нет, вы не получите подписей на андроид.test. * Статические ответы, если приложение не было опубликовано в Play раньше.

См. Таблицу на http://developer.android.com/guide/market/billing/billing_testing.html#static-responses-table для полного набора условий.

+0

Я не думаю, что таблица вполне держится. Я должен был быть в строке 6 этой таблицы (опубликованное приложение (хотя и не опубликовано с биллингами), черновик apk с выставленными биллингами, без учетной записи на устройстве), но я получал нулевой сиг. Изменено на dev-устройство, и все работает. Возможно, первый столбец относится к опубликованной версии приложения, которая уже содержит биллинг. – William

+0

@William Я попытался использовать в биллинге версии приложения 3 api. Попробовал с телефоном разработчика приобрести зарезервированный идентификатор продукта (статический). Покупка прошла успешно, но подпись была пуста. Есть идеи? – Krishnabhadra

+2

@ Krishnabhadra Я не думаю, что статические идентификаторы возвращают подпись. См. Https://groups.google.com/d/topic/android-developers/PCbCJdOl480/discussion – TalkLittle