8

これが私が使用しているコードです。元の API キーを適切な場所に置き換えました。Google Playアプリ内コンソールでサンプルのタイトルと説明を変更し、公開鍵も置き換えましたが、タイトルと説明の代わりに、アプリ内コンソールで使用したタイトルではなく、アプリのデフォルトのタイトルが表示されています.

理解を深めるためにスクリーンショットを添付しました。Google Play に既にアップロードされている署名付きAPKでテストしています。何が問題ですか?

アプリは正常に実行されています。

ここに画像の説明を入力してください

コード

public static ArrayList<VerifiedPurchase> verifyPurchase(String signedData, String signature) {
    if (signedData == null) {
        Log.e(TAG, "data is null");
        return null;
    }
    Log.i(TAG, "signedData: " + signedData);
    boolean verified = false;
    if (!TextUtils.isEmpty(signature)) {
        /**
         * Compute your public key (that you got from the Android Market
         * publisher site).
         *
         * Instead of just storing the entire literal string here embedded
         * in the program, construct the key at runtime from pieces or use
         * bit manipulation (for example, XOR with some other string) to
         * hide the actual key. The key itself is not secret information,
         * but we don't want to make it easy for an adversary to replace the
         * public key with one of their own and then fake messages from the
         * server.
         *
         * Generally, encryption keys / passwords should only be kept in
         * memory long enough to perform the operation they need to perform.
         */
        String base64EncodedPublicKey = "<MY API KEY>";
        PublicKey key = BillingSecurity.generatePublicKey(base64EncodedPublicKey);
        verified = BillingSecurity.verify(key, signedData, signature);
        if (!verified) {
            Log.w(TAG, "signature does not match data.");
            return null;
        }
    }
4

1 に答える 1

0

アプリ内で正しい製品 ID を使用していることを確認してください。スクリーンショットによると、使用しているようです

android.test.purchased

また、アプリ内製品が公開されていることを確認してください (アプリ自体は公開する必要はありません)。

于 2013-07-01T07:49:55.343 に答える