Kri*_*s B 5 android android-billing
我正在将我的应用程序中的应用程序内结算从版本 3升级到更新的代码。版本 3 工作正常,现在在我的应用程序中生成,但我已经读到它最终将被弃用。
当我尝试使用静态产品 id (android.test.purchased)测试购买流程时,BillingResult结果代码仅返回 -1 并带有“服务连接已断开”的调试消息。AFAIK,较新的库中没有服务连接,但版本 3 中有。
如果我使用真正的应用内产品代码,它会告诉我我已经购买了它,这是正确的,但我需要测试实际的购买流程。
我正在实际设备(Pixel 3 XL)上测试此功能,而不是模拟器。我尝试在使用测试帐户(不是开发人员)登录的单独设备上对其进行测试,但得到了相同的结果。
更新:我在开发人员控制台中设置了一个真实的(测试)应用内托管产品,然后在使用测试(非开发人员)帐户登录的设备上安装了我的应用程序,但我仍然收到“服务连接是已断开”错误。我觉得这是代码之外的东西,但不确定是什么。
更新 2:我创建了一个新项目,除了计费代码之外什么都没有,并且它有效,所以我的应用程序中有一些东西导致它崩溃。
更新 3:我创建了一个新项目并将代码从损坏的应用程序导入到其中,但仍然收到相同的错误消息。我觉得,现在,我的包名称和 Google 服务器返回了错误消息。
更新 4:我创建了一个空白项目,但给它提供了与我损坏的应用程序相同的包名称,并且计费正常,所以它不是包名称。现在我的猜测是旧的 AIDL 计费代码(版本 3)中存在一些干扰。
解决方案!!!在我有这个application节点: 。删除了该属性,现在可以进行计费了。AndroidManifest.xmltools:node="replace"
mBillingClient = BillingClient.newBuilder(this).enablePendingPurchases().setListener(this).build();
mBillingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(BillingResult billingResult) {
if (billingResult.getResponseCode() == OK) {
final Purchase.PurchasesResult purchasesResult = mBillingClient.queryPurchases(BillingClient.SkuType.INAPP);
if (purchasesResult.getResponseCode() == OK) {
final List<Purchase> purchases = purchasesResult.getPurchasesList();
for (final Purchase purchase : purchases) {
}
}
}
}
@Override
public void onBillingServiceDisconnected() {
CommonUtils.showToast(mActivity, "disconnected");
}
});
mUnlockPremiumButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final List<String> skuList = new ArrayList<> ();
skuList.add(getString(R.string.inapp_premium_product_id));
final SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder()
.setSkusList(skuList)
.setType(BillingClient.SkuType.INAPP);
mBillingClient.querySkuDetailsAsync(params.build(),
new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) {
for (SkuDetails skuDetails : skuDetailsList) {
if (getString(R.string.inapp_premium_product_id).equals(skuDetails.getSku())) {
final BillingFlowParams flowParams = BillingFlowParams.newBuilder()
.setSkuDetails(skuDetails)
.build();
final BillingResult result = mBillingClient.launchBillingFlow(mActivity, flowParams);
if (result.getResponseCode() == ITEM_ALREADY_OWNED)
{
CommonUtils.showToast(mActivity, getString(R.string.alert_purchased));
}
else if (result.getResponseCode() != OK)
{
//always returns a getResponseCode of -1 (service disconnected)
}
}
}
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
这是 AndroidManifest 中计费中断时的应用程序节点:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:node="replace">
...
</application>
Run Code Online (Sandbox Code Playgroud)
删除tools:node="replace"修复了计费。希望这能挽救某人我浪费的日子。
| 归档时间: |
|
| 查看次数: |
2671 次 |
| 最近记录: |