Мы разрабатываем приложение, сосредоточенное на покупках приложений.
Я следовал этому руководству;
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)
, кажется, блокирует приложение и блокирует пользовательский интерфейс без ошибок в журнале.
Я вполне уверен, что раньше это работало, так как мы использовали это в прошлом.