2011-08-15 12 views
13

Androidのアプリ内課金でテストアプリを実装しました。私はSecurity.javaファイルの公開鍵を埋めました。すべて動作しますが、支払いを提出するとアプリがクラッシュします。私はこのコードのビットに対応し、「署名検証に失敗しました」と言うLogCatでエラーが発生し、受信:Androidアプリ内課金:Security.javaは「署名検証に失敗しました」と答えています

if (!sig.verify(Base64.decode(signature))) { 
       Log.e(TAG, "Signature verification failed."); 
       return false; 
} 

私が代わりに戻り偽の真返すようにそのビットを変更すると、すべてが正常に動作します - 私は提出することができます私はおそらくそれを変更する必要がありますので、他の何かが間違っていると仮定しています。

これを引き起こす可能性のあることについてのアイデアはありますか?

1.- 間違った公開鍵:署名検証エラーがによって引き起こされることを

答えて

23

。たぶんあなたはいくつかの文字をコピーすることを忘れてしまったでしょう。それは起こる:)

2 - The .apk must be signed。あなたの署名文字列が空であれば、debug.keystoreを使うことはできません。

とテストのために、覚えてアプリ内課金:

  • Security.javaにAndroidマーケットの公開鍵(String base64EncodedPublicKey = "your public key here")を追加

  • を使用している場合(リリースモードでビルドし、それに署名Eclipseでは、エクスポートウィザードを使用できます)。

  • Androidマーケットにリリースバージョンをアップロードし、公開せず、製品リストを作成します。

  • デバイスにアプリケーションをインストールし(adb -d install myapp.apk)、デバイス上にテストアカウントをプライマリにします。

+2

テストデバイスにプッシュするAPKの値は、デベロッパーコンソールにアップロードしたAPKと同じバージョン値である必要があります。デベロッパーコンソールでAPKのバージョンが更新されるまでに最大6時間かかることがあります。 –

+6

Base64PublicKeyはIabHelperに渡されるパラメータですが、Security.javaには定義されていません – 18446744073709551615

+8

署名、アップロード、待機などを必要とせずに課金統合フローを簡単に開発する方法はありませんか?私はテストができるだけ近い生産として行われるべきだが、開発サイクルが長く続くことに同意する。私が誤ってifまたはNPEを誤って実行した場合、私は出版の全段階をもう一度やり直す必要があります! –

20

私の場合、よく隠された問題がありました。

私が最初にアプリ内課金を設定したとき、私は静的な応答を試み、android.test.purchasedアイテムを購入しました。私が生産アイテムに切り替えて在庫を照会しようとすると、その偽の製品がすべてのトラブルを引き起こしました。

この場合、ソリューションは自分の所有するアイテムから偽の製品を削除することでした。に戻す、一度自分自身のアイテムをクリーンアップ

int queryPurchases(Inventory inv, String itemType) throws JSONException, RemoteException 

:このシグネチャを持つメソッドのelse文で

   Purchase p = new Purchase(itemType, purchaseData, signature); 
       try { 
        consume(p); 
       } catch (IabException e) { 
        e.printStackTrace(); 
       } 

単にファイルIABHelper.javaにこのスニペットを追加オリジナルのヘルパーJavaファイル。 もちろん、これは開発フェーズのためのものです。

+1

私は一日中このようなものを探して失った – fersarr

+1

奇跡のように動作します。アプリ内課金のさらに別のバグ。 –

+0

私はテスト購入をするたびにこれを行う必要があります... – AxeEffect

0

私の場合、接頭辞と接尾辞が同じ間違った公開鍵を貼り付けました。それが正しいことを100%確かめるだけです。

関連する問題