これが私が使用しているコードです。元の 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;
}
}