嗨,我已经实现了应用内计费V3为一年的订阅一个项目使用android-inapp-计费-v3。我想在我的应用程序中显示剩余的几天。我打电话给getSubscriptionTransactionDetails
是为了获取产品的事务详细信息,但是它总是返回null
。这是我的密码。
private BillingProcessor startInappCheck(){
bp = new BillingProcessor(mContext, BASE64ENCODEDPUBLICKEY, new BillingProcessor.IBillingHandler() {
@Override
public void onProductPurchased(String productId, TransactionDetails details) {
LogUtils.e(TAG, "onProductPurchased :" +productId);
// showToast("onProductPurchased: " + productId);
}
@Override
public void onBillingError(int errorCode, Throwable error) {
LogUtils.e(TAG, "onBillingError :" +errorCode);
}
@Override
public void onBillingInitialized() {
// showToast("onBillingInitialized");
readyToPurchase = true;
try{
SkuDetails subs = bp.getSubscriptionListingDetails(SUBSCRIPTION_ID);
LogUtils.d(TAG, "Owned Subscription: " + subs.toString());
TransactionDetails tr = bp.getSubscriptionTransactionDetails(SUBSCRIPTION_ID);
LogUtils.d(TAG, "Owned Subscription: " + tr.toString());
}catch (Exception e) {
// TODO: handle exception
}
}
@Override
public void onPurchaseHistoryRestored() {
// showToast("onPurchaseHistoryRestored");
for(String sku : bp.listOwnedSubscriptions()){
LogUtils.d(TAG, "Owned Subscription: " + sku);
}
// showToast("onPurchaseHistoryRestored");
}
});
return bp;
}
我从onCreate
调用了这个方法。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if (!bp.handleActivityResult(requestCode, resultCode, data))
super.onActivityResult(requestCode, resultCode, data);
}
我的订阅项按钮在fragment
中实现。还有一个问题,我发现在成功的订阅之后,onProductPurchased
没有被调用,但是我已经在onResume
中实现了更新UI的逻辑,如果bp.isSubscribed(SUBSCRIPTION_ID)
返回true
的话。请告诉我如何获得订阅启动日期和终止日期。
发布于 2015-06-05 06:02:32
我想把Ans给我自己的que's ans,这样如果有人在寻找相同的ans,就可以找到解决方案。经过大量的谷歌搜索之后,我没有找到确切的解决方案,所以我在BillingProcessor
类中创建了一个iabv3 library
项目中的方法,该方法返回一个包含购买细节的Bundle
,在该方法中我得到了购买日期。现在我能找到这个的到期日了。该方法如下所示
public Bundle getPurchases(){
if (!isInitialized())
return null;
try{
return billingService.getPurchases(Constants.GOOGLE_API_VERSION, contextPackageName, Constants.PRODUCT_TYPE_SUBSCRIPTION, null);
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
发布于 2019-07-17 18:51:56
我用这个:
@Nullable
public Date getSubscriptionRenewingDate(String sku) {
// Get the Purchase object:
Purchase purchase = null;
Purchase.PurchasesResult purchasesResult = _billingClient.queryPurchases(BillingClient.SkuType.SUBS);
if (purchasesResult.getPurchasesList() != null) {
for (Purchase p : purchasesResult.getPurchasesList()) {
if (p.getSku().equals(sku) && p.getPurchaseState() == Purchase.PurchaseState.PURCHASED && p.isAutoRenewing()) {
purchase = p;
break;
}
}
}
// Get the SkuDetails object:
SkuDetails skuDetails = null;
for (SkuDetails s : _skuDetails) { // _skuDetails is an array of SkuDetails retrieved with querySkuDetailsAsync
if (s.getSku().equals(sku)) {
skuDetails = s;
break;
}
}
if (purchase != null && skuDetails != null) {
Date purchaseDate = new Date(purchase.getPurchaseTime());
Calendar calendar = Calendar.getInstance();
calendar.setTime(purchaseDate);
Date now = new Date();
while (calendar.getTime().before(now)) {
switch (skuDetails.getSubscriptionPeriod()) {
case "P1W": calendar.add(Calendar.HOUR, 7*24); break;
case "P1M": calendar.add(Calendar.MONTH, 1); break;
case "P3M": calendar.add(Calendar.MONTH, 3); break;
case "P6M": calendar.add(Calendar.MONTH, 6); break;
case "P1Y": calendar.add(Calendar.YEAR, 1); break;
}
}
return calendar.getTime();
}
return null;
}
发布于 2017-06-01 05:58:01
我在计费处理器库中使用了这段代码来获取购买细节。
TransactionDetails transactionDetails = bp.getSubscriptionTransactionDetails(channelModel.getAndroidProductId());
Log.d(TAG, "initializePaymentSetup: " + transactionDetails.toString());
Log.d(TAG, "initializePaymentSetup: " + transactionDetails.purchaseInfo.toString());
transactionDetails.purchaseInfo.purchaseData// this will return the purchase date
https://stackoverflow.com/questions/30620506
复制相似问题