Android 应用内结算 SecurityException "Binder invocation to an incorrect interface"

标签 android in-app-billing aidl securityexception

我正在尝试让 google In App Billing 服务正常工作。

到目前为止,我已经知道服务已绑定(bind)并连接,但是一旦我尝试从服务中获取一些数据,它就会崩溃并显示日志:

04-02 10:36:32.795  10569-10651/my.app.package E/IAP﹕ java.lang.SecurityException: Binder invocation to an incorrect interface
            at android.os.Parcel.readException(Parcel.java:1425)
            at android.os.Parcel.readException(Parcel.java:1379)
            at billing.IInAppBillingService$Stub$Proxy.getSkuDetails(IInAppBillingService.java:251)
            at my.app.package.libs.clientbackend.iap.IAPHelper$FetchItemsCallable.call(IAPHelper.java:102)
            at my.app.package.libs.clientbackend.iap.IAPHelper$FetchItemsCallable.call(IAPHelper.java:89)
            at java.util.concurrent.FutureTask.run(FutureTask.java:234)
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:390)
            at java.util.concurrent.FutureTask.run(FutureTask.java:234)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
            at java.lang.Thread.run(Thread.java:856)

到目前为止,这是我的代码:

显示购买的 Activity :

Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND");
serviceIntent.setPackage("com.android.vending");
bindService(serviceIntent, this, Context.BIND_AUTO_CREATE);

服务连接后 IAB 调用:

Bundle itemBundle = new Bundle();
itemBundle.putStringArrayList("ITEM_ID_LIST", new ArrayList<>(Arrays.asList(itemIds)));
Bundle detailsBundle = service
        .getSkuDetails(3, context.getPackageName(), "inapp", itemBundle);

它在最后一行 ...getSkuDetails(... 上失败,并出现上面发布的错误。


我对这个问题做了一些研究,发现它可能是由错误的包名引起的。我已经包含了 IInAppBillingService.aidl,就像它在 google 文档中的描述一样,但我仍然在导入时收到错误的包:

文件位于:src/main/aidl/com/android/vending/billing/IInAppBillingService.aidl

但是当我导入生成的类时,Android Studio 使用这个导入路径:

import billing.IInAppBillingService;

根据文档,这实际上应该是:

import com.android.vending.billing.IInAppBillingService;

我的项目设置是否还有问题,或者有人知道这个错误的原因吗?

非常感谢, 麦克法兰

最佳答案

我有同样的问题,我发现 aidl 文件必须在 src 文件夹的 com.android.vending.billing 包中,但你把它放在 src/main/aidl/com/android/vending/billing 这是不正确的。

关于Android 应用内结算 SecurityException "Binder invocation to an incorrect interface",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22806236/

相关文章:

java - 如何获取 Wi-Fi 出现的事件?

android - 当具有测试帐户的 Alpha 应用程序时,开发人员有效负载是否有效?

android - 向 Android.mk 添加 aidl 文件

android - Android 中的 ServiceManager 类在哪里?

Android异步服务调用策略

android - 创建表语句中的 Sqlite 异常

android - Toast.makeText(...).show() 有时会错位

java - '需要身份验证。测试 IAB 时,您必须登录您的 Google 帐户

android - 其他人看到我的 Google Play Dev RSA 公钥是否安全?

android - 将一个文件移动到另一个包后,aidl 文件不起作用