代号一 IAP 在 Android 上失败
Codename one IAP Fails on Android
我们一直在开发一款以应用购买为中心的应用。
我已经按照这里的指南进行操作;
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 播放正确设置购买,但当 "Buy dialog" 完成后,应用程序崩溃并显示以下 error/stack 跟踪(取自 google 播放安慰);
java.lang.RuntimeException:
at android.app.ActivityThread.deliverResults (ActivityThread.java:3736)
at android.app.ActivityThread.handleSendResult (ActivityThread.java:3779)
at android.app.ActivityThread.access00 (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)
似乎锁定了应用程序并冻结了 UI,日志中没有任何错误。
我相当确定这曾经有效,因为我们过去使用过它。
确保您已将 android.licenseKey
构建提示设置为来自 google 播放控制台的正确字符串。当我们尝试从 Google 解析 base64 值以验证购买时,会触发此异常。
如果您只是将其设置为空白值或有一个额外的字符可能会失败。
我们一直在开发一款以应用购买为中心的应用。
我已经按照这里的指南进行操作;
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 播放正确设置购买,但当 "Buy dialog" 完成后,应用程序崩溃并显示以下 error/stack 跟踪(取自 google 播放安慰);
java.lang.RuntimeException:
at android.app.ActivityThread.deliverResults (ActivityThread.java:3736)
at android.app.ActivityThread.handleSendResult (ActivityThread.java:3779)
at android.app.ActivityThread.access00 (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)
似乎锁定了应用程序并冻结了 UI,日志中没有任何错误。
我相当确定这曾经有效,因为我们过去使用过它。
确保您已将 android.licenseKey
构建提示设置为来自 google 播放控制台的正确字符串。当我们尝试从 Google 解析 base64 值以验证购买时,会触发此异常。
如果您只是将其设置为空白值或有一个额外的字符可能会失败。