我目前正尝试在我的应用中添加应用内结算功能,以便用户可以进行小额捐款。我使用最新版本的Android Studio进行开发,并遵循本指南(一步一步,我正在完成所有提到的...至少我认为我做:-)):https://developer.android.com/google/play/billing/billing_integrate.html
AIDL文件放在上面提到的位置(在com.android.vending.billing包中src/main
下),我看到它是在gen
文件夹下生成的。
当我测试产品的检索时,我注意到方法onServiceConnected
从未被调用,它在这样的活动中实现:
IInAppBillingService mService;
ServiceConnection mServiceConn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
mService = null;
}
@Override
public void onServiceConnected(ComponentName name,
IBinder service) {
mService = IInAppBillingService.Stub.asInterface(service);
}
};
对服务的绑定是这样的(在同一个活动中):
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_donation);
Intent serviceIntent =
new Intent("com.android.vending.billing.InAppBillingService.BIND");
serviceIntent.setPackage("com.android.vending");
bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE);
}
我注意到两件事:
... has leaked ServiceConnection ... that was originally bound here
- 我看到有些人建议在应用程序上下文中替换使用bindService而不是活动,如果我这样做,问题就消失了。但我认为这与我从未调用的onServiceConnected
的主要问题无关,而且,为什么它会在关于活动的官方指南中呢?bindService
返回布尔值,我检查了返回值,它是 false 。所以我想这就是问题的来源。我看到有人说必须将该服务的条目添加到AndroidManifest.xml中 - 如下所示:
试过这个,但没有区别,官方指南中也没有提到这个条目,所以我认为不需要。
任何想法我做错了什么?
答案 0 :(得分:10)
实际上我发现了什么是"错误"与此同时。
根据官方测试应用内结算指南(https://developer.android.com/google/play/billing/billing_testing.html):
在Android设备上安装您的应用程序。
您无法使用模拟器测试应用内结算;你必须安装 您在设备上的应用程序,以测试应用内结算。
不幸的是,这些信息不在其他指南中,我通常首先在模拟器上测试所有内容。将应用程序部署到真实设备并在那里进行测试后,很明显没有问题。
我现在添加了一条消息,当bindService
返回 false 时会显示一条消息,告知用户如果确实存在连接问题或无法建立与服务的连接如果我在模拟器上测试功能,那就更好了。
答案 1 :(得分:0)
我实施了这个示例googles的应用内购买,如果你阅读它,你会在课程IabHelper
中看到上面的代码(它是为你实现的)。
https://github.com/googlesamples/android-play-billing/tree/master/TrivialDrive