Mee*_*eep 5 connection android sku play-billing-library
我需要一些关于如何建立连接和查询 sku 详细信息的信息。我正在编写教程并将应用程序内计费逻辑复制到我的应用程序中。
https://codelabs.developers.google.com/codelabs/play-billing-codelab
我按照教程进行操作,没有任何问题。问题在于如何建立连接,然后查询 sku 详细信息。
当我创建 BillingManager 类的实例时,它会尝试建立连接 -
public BillingManager(Activity activity) {
mActivity = activity;
mBillingClient = BillingClient.newBuilder(mActivity).setListener(this).build();
mBillingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponse) {
if (billingResponse == BillingClient.BillingResponse.OK) {
Log.i(TAG, "onBillingSetupFinished() response: " + billingResponse);
} else {
Log.w(TAG, "onBillingSetupFinished() error code: " + billingResponse);
}
}
@Override
public void onBillingServiceDisconnected() {
Log.w(TAG, "onBillingServiceDisconnected()");
}
});
}
Run Code Online (Sandbox Code Playgroud)
然后,我将进行异步查询来获取 sku 详细信息 -
private void handleManagerAndUiReady() {
// Start querying for SKUs
List<String> inAppSkus = mBillingProvider.getBillingManager()
.getSkus(SkuType.INAPP);
mBillingProvider.getBillingManager().querySkuDetailsAsync(SkuType.INAPP,
inAppSkus,
new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(int responseCode,
List<SkuDetails> skuDetailsList) {
if (responseCode == BillingResponse.OK
&& skuDetailsList != null) {
for (SkuDetails details : skuDetailsList) {
Log.w(TAG, "Got a SKU: " + details);
}
}
}
});
// Show the UI
displayAnErrorIfNeeded();
}
Run Code Online (Sandbox Code Playgroud)
然后我让监听器收到错误,但连接没有任何问题。
D/StoreListFragment: onCreate
I/StoreListFragment: SkuDetailsResponseListener response code: -1
D/StoreListFragment: onViewCreated
I/BillingManager: onBillingSetupFinished() response: 0
Run Code Online (Sandbox Code Playgroud)
所以我不得不摸索了一段时间,放弃了查看Play Billing Library的基础知识——
https://medium.com/exploring-android/exploring-the-play-billing-library-for-android-55321f282929
这就是我找到解决方案的地方,我只是将查询放在成功连接的连接中。我意识到播放计费库在查询 sku 详细信息之前不会检查连接,或者我在某个地方做错了,因为教程工作正常?
private void createBillingClient() {
mBillingClient = BillingClient.newBuilder(getActivity()).setListener(this).build();
mBillingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(int billingResponse) {
if (billingResponse == BillingClient.BillingResponse.OK) {
Log.i(TAG, "onBillingSetupFinished() response: " + billingResponse);
//setting up a listener for the queries
SkuDetailsResponseListener responseListener = new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(int responseCode,
List<SkuDetails> skuDetailsList) {
Log.i(TAG, "response code: " + responseCode);
}
};
List<String> skuList = Arrays.asList("sku_01", "sku_02");
SkuDetailsParams skuDetailsParams = SkuDetailsParams.newBuilder()
.setSkusList(skuList).setType(BillingClient.SkuType.SUBS).build();
mBillingClient.querySkuDetailsAsync(skuDetailsParams, responseListener);
} else {
Log.w(TAG, "onBillingSetupFinished() error code: " + billingResponse);
}
}
@Override
public void onBillingServiceDisconnected() {
Log.w(TAG, "onBillingServiceDisconnected()");
}
});
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用此逻辑来检查连接是否已准备好,然后像普通驱动器一样执行可运行文件 - 引用此网址。看起来逻辑不会检查计费连接是否处于待处理状态......
https://github.com/zumrywahid/in_app_example
Is Billing Client connected? : false
Client is already in the process of connecting to billing service.
onBillingSetupFinished() error code: 5
Run Code Online (Sandbox Code Playgroud)
BillingManager 构造函数已经开始连接,如果您初始化管理器并立即调用任何传递 runnable 的方法,executeServiceRequest(Runnable runnable)也会尝试同时启动连接。您可以startServiceConnection()在构造函数中禁用,因为连接状态始终会签入executeServiceRequest()并在需要时启动连接。
| 归档时间: |
|
| 查看次数: |
4278 次 |
| 最近记录: |