我正在尝试使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(...
上失败,并显示了上面的错误。我对此事进行了一些研究,发现它可能是由错误的程序包名称引起的。我已经包含了googlet文档中描述的
IInAppBillingService.aidl
,但是导入时我仍然得到了错误的包:该文件位于:
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 In App Billing SecurityException "Binder invocation to an incorrect interface",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22806236/