2012-03-20 11 views
5

मैं कम से महान ट्यूटोरियल का पालन करने का पालन किया है: http://blog.blundell-apps.com/simple-inapp-billing-payment/Billingservice एंड्रॉयड - हस्ताक्षर नहीं

मैं फिर से सब कुछ ट्यूटोरियल का कहना है किया है और 3 बार सब कुछ पढ़ा है, लेकिन अभी भी मैं onReceive() : BillingReceiver.java में intent.getStringExtra(INAPP_SIGNATURE) में एक हस्ताक्षर प्राप्त नहीं कर रहा हूँ

जो मेरा ऐप क्रैश करता है क्योंकि ऐप हस्ताक्षर की तुलना नहीं कर सकता है यह सत्यापित करने के लिए कि खरीदारी सही तरीके से की जाती है या नहीं।

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 डेवलपर खाते अपने परीक्षण उपकरण पर प्राथमिक खाता है:

यह कैसे मेरे BillingReceiver लगता है कि है?

यदि आपको एंड्रॉइड.test पर हस्ताक्षर नहीं मिलेगा। * स्थिर प्रतिक्रियाएं जब तक कि ऐप पहले प्ले पर प्रकाशित नहीं हुआ हो।

शर्तों के पूर्ण सेट के लिए http://developer.android.com/guide/market/billing/billing_testing.html#static-responses-table पर तालिका देखें।

+0

मुझे नहीं लगता कि तालिका काफी है। मुझे उस तालिका की पंक्ति 6 ​​(प्रकाशित ऐप (हालांकि बिलिंग के साथ प्रकाशित नहीं किया गया है), बिलिंग अपलोड के साथ ड्राफ्ट एपीके, डिवाइस पर गैर देव खाता) होना चाहिए था, लेकिन मुझे एक शून्य सिग मिल रहा था। एक देव डिवाइस में बदल गया और यह सब काम करता है। शायद पहला कॉलम ऐप के प्रकाशित संस्करण को संदर्भित करता है जिसमें पहले से ही बिलिंग शामिल है। – William

+0

@ विलियम मैंने ऐप बिलिंग संस्करण 3 एपीआई में उपयोग करने का प्रयास किया। आरक्षित उत्पाद आईडी (स्थिर) खरीदने के लिए डेवलपर के फोन के साथ प्रयास किया। खरीद सफल रही लेकिन हस्ताक्षर खाली था। कोई विचार? – Krishnabhadra

+2

@ कृष्णाभद्र मुझे नहीं लगता कि स्थैतिक आईडी अब हस्ताक्षर लौटते हैं। Https://groups.google.com/d/topic/android-developers/PCbCJdOl480/discussion – TalkLittle

संबंधित मुद्दे