2013-03-14 41 views
15

Tôi đã thực hiện thanh toán ứng dụng trên ứng dụng Android và mặc dù nó hoạt động tốt với các hằng số kiểm tra, nó phá vỡ trên các sản phẩm thực.Xác minh chữ ký không thành công - Mua hàng trong ứng dụng Android

Tôi đã tải ứng dụng lên dưới dạng bản nháp trên Google Play, sản phẩm được tạo và xuất bản, cài đặt cùng một ứng dụng chính xác trên thiết bị (bao gồm base64EncodedPublicKey) và sử dụng đúng tài khoản thử nghiệm (tài khoản chính trên thiết bị & một tài khoản tôi đã thiết lập trên tài khoản nhà phát triển của mình)

Luồng là tôi tham gia Hoạt động trên Google Play nơi tôi có thể xem sản phẩm và chi tiết của sản phẩm, tôi nhấn mua, giới thiệu mật khẩu tài khoản thử nghiệm. , nhận được thông điệp chúc mừng và

Xác minh chữ ký không thành công cho sản phẩm (phản hồi: -1003: Mua xác minh chữ ký không thành công)

Mục này thực sự được mua (nó xuất hiện trên Google Checkout và mua lần thứ 2 là "Mục đã sở hữu"). Ngoài ra tôi đã chỉ sử dụng mã ví dụ TriviaDrive từ Google.

Mọi đề xuất đều rất hữu ích. Cảm ơn bạn!

+4

Hình như base64EncodedPublicKey của bạn là sai? Triple check it – Rawkode

+3

Thông báo có nghĩa là Google đã ký thông tin mua hàng bằng một khóa nào đó khác với khóa bạn sử dụng trong ứng dụng của mình. Tôi sẽ kiểm tra lại xem khóa có chính xác hay không, được gán đúng và cho đúng vào việc xác thực chữ ký. Vì mọi thứ khác tốt, đó có lẽ là nguyên nhân duy nhất có thể gây ra vấn đề. –

+5

Tôi không nghĩ rằng một trong các nhận xét này giải quyết được vấn đề. Tôi nhận được chính xác lỗi tương tự và tích cực tôi đang bao gồm các khóa công khai thích hợp trong codebase của tôi. Ngoài ra, tôi không nghĩ rằng nó có thể là một vấn đề quan trọng bởi vì setupBilling và một phần ban đầu của công việc mua hàng (một chìa khóa tốt là cần thiết để làm những việc này). Chỉ có điều tôi có thể nghĩ là một cái gì đó để làm với môi trường thử nghiệm. Không có dẫn cụ thể mặc dù. –

Trả lời

0

1> xác minh Chữ ký thất bại cho sản phẩm (phản ứng: -1003: xác minh chữ ký Mua không thành công)

Lý do đằng sau lỗi này là Base64Encoded không phù hợp. Lấy khóa cấp phép từ tài khoản nhà xuất bản, sao chép nó vào một số trình soạn thảo văn bản để xóa bất kỳ khoảng trắng nào và dán nó.

2> "Mặt hàng đã sở hữu" Khi chúng tôi nhận phản hồi OK từ google cho mua hàng trong ứng dụng, chúng tôi cần tiêu thụ sản phẩm trong ứng dụng để thông báo cho sản phẩm đã mua và phân phối. Nhưng nếu bằng cách nào đó nếu tai nạn của bạn hoặc bạn quên tiêu thụ nó google sẽ không cho phép để mua nó một lần nữa cho đến khi bạn tiêu thụ nó. Trong ứng dụng kịch bản của bạn đã ném xác minh Chữ ký thất bại lỗi ..thats lý do cho vấn đề thứ hai

Hy vọng điều này giúp đỡ

4

Trong tài liệu thanh toán trong ứng dụng có một phần gọi là Initiate your connection to Google Play.

Nó cho bạn biết rằng bạn sẽ cần một Khóa công khai được mã hóa base64 để khởi tạo IabHelper của bạn. Bạn có thể lấy mã này từ Bảng điều khiển dành cho nhà phát triển trên Google Play. Đăng nhập vào bảng điều khiển, nhấp vào ứng dụng và sau đó chuyển đến tab "Dịch vụ và API".

IabHelper mHelper; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    // ... 
    String base64EncodedPublicKey; 

    // compute your public key and store it in base64EncodedPublicKey 
    mHelper = new IabHelper(this, base64EncodedPublicKey); 
} 

Vui lòng xem xét các khuyến nghị an ninh đề nghị trong tài liệu:

Khuyến nghị

An ninh: Nó là rất khuyến khích mà bạn không cứng mã giấy phép công cộng chủ chốt chuỗi giá trị chính xác theo quy định của Google Chơi. Thay vào đó, bạn có thể xây dựng toàn bộ khóa cấp phép công khai chuỗi khi chạy từ các bản chất, hoặc lấy nó từ một kho lưu trữ được mã hóa, trước khi chuyển nó tới hàm tạo. Cách tiếp cận này khiến cho các bên thứ ba độc hại khó khăn hơn trong việc sửa đổi chuỗi khóa cấp phép công khai công khai trong tệp APK của bạn.

2

Lý do khác lỗi này có thể xuất hiện trong v3 của IAB là nếu bạn mua sản phẩm (nói, đăng ký) trên một thiết bị và thông tin mua không hoàn toàn vào bộ nhớ cache của ứng dụng Cửa hàng Play trên một thiết bị khác.

Tôi đã có một khoảng thời gian đáng sợ, sau khi mua đăng ký trên điện thoại Kitkat, điện thoại khác (bánh gừng) đã bị lỗi -1003 này. Tôi truy tìm nó xuống thực tế là phương thức getpurchases() đã trả về CHỈ INAPP_PURCHASE_ITEM_LIST với một lần mua danh sách (đúng). INAPP_PURCHASE_DATA_LIST và INAPP_DATA_SIGNATURE_LIST đã được trả về là rỗng. (Điều này mặc dù tôi có thể thấy đăng ký trong ứng dụng Play.)

Chữ ký là không có giá trị, do đó tất nhiên nó có lỗi xác minh chữ ký. Sau nhiều lần gãi đầu/hoảng loạn về lý do tại sao nó không hoạt động, đột nhiên nó làm việc mà không có tôi làm bất cứ điều gì. Tôi cho rằng ứng dụng Google Services/Play cuối cùng đã xóa bộ nhớ cache và tự cập nhật.

Với điều này, tôi nghĩ rằng giải pháp có thể để chỉ im lặng lỗi đó cho đến khi các thông tin mua đầy đủ truyền để chơi Dịch vụ .... w/iabhelper nó là một cái gì đó như:

if (result.getResponse() != IabHelper.IABHELPER_VERIFICATION_FAILED) 
        complain("Failed to query inventory: " + result); 
Log.d(TAG, "Query inventory was NOT successful."); 

Điều này có vẻ giống như một lỗi khá lớn-- cửa hàng Play nên đợi cho đến khi nó biết mọi thứ về giao dịch mua trước khi chuyển nó sang ứng dụng, tôi nghĩ vậy. Tôi không biết liệu vấn đề này có hiển thị chính nó trong các lĩnh vực khác của luồng mua hàng hay không, nhưng có vấn đề.

0

Hãy chắc chắn để mã hóa trong UTF8 file với phím

1

Tôi có vấn đề này với đăng ký của tôi, vì tôi đã không đặt "itemtype"

mHelper.launchPurchaseFlow(this, 
      SKU_INFINITE_GAS, IabHelper.ITEM_TYPE_SUBS, 
      RC_REQUEST, mPurchaseFinishedListener, payload); 
Các vấn đề liên quan