2012-03-20 10 views
5

ませ署名:私はチュートリアルが言うすべてを行っていると、すべてを読んだことが3回を再びかけ、それでも私はonReceive() : BillingReceiver.javaintent.getStringExtra(INAPP_SIGNATURE)に署名を受信して​​いないhttp://blog.blundell-apps.com/simple-inapp-billing-payment/Billingserviceアンドロイド - 私が偉大なチュートリアルを、以下に従っている

私のアプリがクラッシュする理由は、アプリが署名を比較して購入が正しく行われたかどうかを確認できないためです。お使いのGoogle Play開発者アカウントと同じテストデバイス上のプライマリアカウントです

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

これは私のBillingReceiverがどのように見えるかですか?

あなたが以前にPlayに公開されていない限り、android.test。*静的レスポンスに署名を取得しない場合は、

すべての条件についてはhttp://developer.android.com/guide/market/billing/billing_testing.html#static-responses-tableの表を参照してください。

+0

私はテーブルがかなり保持しているとは思わない。私はそのテーブルの6行目(公開されたアプリ(課金では公開されていませんが)、請求書がアップロードされたAPK、デバイスの開発者ではありません)になっていたはずです。 devデバイスに変更され、すべて動作します。おそらく、最初の列は既に請求が含まれているアプリの公開版を指しています。 – William

+0

@William私はアプリの請求バージョン3のAPIを使ってみました。開発者の電話で、予約商品ID(静的)を購入しようとしました。購入は成功しましたが、署名は空でした。何か案は? – Krishnabhadra

+2

@Krishnabhadra私は静的IDが署名を返さないとは思わない。 https://groups.google.com/d/topic/android-developers/PCbCJdOl480/discussion – TalkLittle

関連する問題