Кодовое имя одного IAP Fails на Android - PullRequest
0 голосов
/ 07 июня 2018

Мы разрабатываем приложение, сосредоточенное на покупках приложений.
Я следовал этому руководству;

https://www.codenameone.com/blog/intro-to-in-app-purchase.html

И осуществил покупки следующим образом:

public static boolean brought(String sku) {
    try{
        boolean brought = Purchase.getInAppPurchase().wasPurchased(sku);
        return brought;
    }catch(Exception e){
    }
    return false;//error
}

public static void buy(String sku){
    Purchase.getInAppPurchase().purchase(sku);
}

Покупки были правильно настроены с помощью Google Play, но когда «диалог покупки»завершил сбой приложения со следующей ошибкой / трассировкой стека (взятой из консоли Google Play);

java.lang.RuntimeException:  
  at android.app.ActivityThread.deliverResults (ActivityThread.java:3736)
  at android.app.ActivityThread.handleSendResult (ActivityThread.java:3779)
  at android.app.ActivityThread.access$1400 (ActivityThread.java:157)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1406)
  at android.os.Handler.dispatchMessage (Handler.java:102)
  at android.os.Looper.loop (Looper.java:148)
  at android.app.ActivityThread.main (ActivityThread.java:5459)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:728)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:618)
Caused by: java.lang.IllegalArgumentException: 
  at com.codename1.payments.v3.Security.generatePublicKey (Security.java:90)
  at com.codename1.payments.v3.Security.verifyPurchase (Security.java:67)
  at com.codename1.payments.v3.IabHelper.handleActivityResult (IabHelper.java:480)
  at com.codename1.impl.android.CodenameOneActivity.onActivityResult (CodenameOneActivity.java:537)
  at android.app.Activity.dispatchActivityResult (Activity.java:6470)
  at android.app.ActivityThread.deliverResults (ActivityThread.java:3732)
Caused by: com.codename1.impl.android.util.Base64DecoderException: 
  at com.codename1.impl.android.util.Base64.decode (Base64.java:546)
  at com.codename1.impl.android.util.Base64.decode (Base64.java:474)
  at com.codename1.impl.android.util.Base64.decode (Base64.java:420)
  at com.codename1.payments.v3.Security.generatePublicKey (Security.java:80)

Затем после совершения покупки любой вызов на

Purchase.getInAppPurchase().wasPurchased(sku)

, кажется, блокирует приложение и блокирует пользовательский интерфейс без ошибок в журнале.

Я вполне уверен, что раньше это работало, так как мы использовали это в прошлом.

1 Ответ

0 голосов
/ 08 июня 2018

Убедитесь, что вы установили подсказку android.licenseKey для правильной строки в консоли Google Play.Это исключение срабатывает, когда мы пытаемся проанализировать значение base64 от Google, чтобы подтвердить покупку.Если вы просто зададите пустое значение или у вас будет дополнительный символ, который может завершиться ошибкой.

...