【发布时间】:2021-06-04 18:19:51
【问题描述】:
我的 Fragment 中有一个简单的订阅按钮,我想测试订阅(我使用的是 anjlab/android-inapp-billing-v3)。我尝试在模拟器中进行测试,但没有任何反应,计费处理器甚至没有初始化。不会出现任何类型的消息。如果我尝试在我的设备上进行测试,则:
bp.getSubscriptionTransactionDetails("my_id");
返回 null,我收到一条消息“此版本未配置为计费”。
我阅读了有关此问题的信息,发现我必须上传 alpha 或 beta。
这是现有应用的新版本。旧版本没有订阅。我上传了一个用于 Alpha 测试的版本。它在清单中包含 BILLING 权限:
<uses-permission android:name="com.android.vending.BILLING" />
它目前出现在控制台的 Alpha 轨道中。
如果我从封闭测试下载应用到我的手机,订阅按钮会显示订阅表,但有实时选项(这意味着它告诉我将通过我的实际信用卡付费)。
我当前的项目和我上传的签名包中的版本名称和版本代码相同(上传到控制台后我没有触及这些数字,所以它们是相同的)。应用ID相同。
我不知道还能做什么。
如何使用测试卡在本地设备上测试订阅成功/失败?
这是我的示例屏幕上的代码 (SubscriptionFragment),它有一个按钮:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_subscription, container, false);
subscribeBtn = v.findViewById(R.id.subscribeBtn);
// Initialize
bp = new BillingProcessor(getActivity(), getResources().getString(R.string.play_console_license), this);
bp.initialize();
return v;
}
@Override
public void onBillingInitialized() {
Log.d(TAG, "onBillingInitialized: ");
// Check if user is already subscribed
subscriptionTransactionDetails = bp.getSubscriptionTransactionDetails("my_id");
Log.d(TAG, "onBillingInitialized: " + subscriptionTransactionDetails);
subscribeBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (bp.isSubscriptionUpdateSupported()) {
bp.subscribe(getActivity(), "my_id");
} else {
Log.d(TAG, "onClick: Subscription update is not supported.");
}
}
});
if (hasSubscription()) {
// update UI
}
}
private boolean hasSubscription() {
if (subscriptionTransactionDetails != null) {
return subscriptionTransactionDetails.purchaseInfo != null;
}
return false;
}
@Override
public void onProductPurchased(String productId, TransactionDetails details) {
Log.d(TAG, "onProductPurchased: ");
}
@Override
public void onPurchaseHistoryRestored() {
Log.d(TAG, "onPurchaseHistoryRestored: ");
}
@Override
public void onBillingError(int errorCode, Throwable error) {
Log.d(TAG, "onBillingError: ");
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (!bp.handleActivityResult(requestCode, resultCode, data)) {
}
}
@Override
public void onDestroy() {
if (bp != null) {
bp.release();
}
super.onDestroy();
}
【问题讨论】:
标签: android in-app-billing in-app-subscription