我正在尝试构建包含包含订阅选项的应用程序。我已将apk上传到Google Play帐户并获得了SKU ID。实施后,出现了此异常“ IabResult:用户取消。(响应:-1005:User cancelled)”。
这是我的订阅课程:
public class SubscriptionUtil {
private static final int REQUEST_CODE = 10001;
private static final String base64EncodedPublicKey = GlobalVar.base64EncodedPublicKey;
private IabHelper iabHelper;
private Context context;
private SubscriptionUtil() {
//No instance
}
public SubscriptionUtil(Context context) {
this.context = context;
iabHelper = new IabHelper(context, base64EncodedPublicKey);
iabHelper.enableDebugLogging(true, "TEST");
setup();
}
private void setup() {
if (iabHelper != null) {
iabHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
@Override
public void onIabSetupFinished(IabResult result) {
if (result.isFailure()) {
Log.d("TEST", "Problem setting up In-app Billing: " + result);
dispose();
}
}
});
}
}
public void initSubscription(final String subscriptionType,
SubscriptionFinishedListener subscriptionFinishedListener) {
initSubscriptionWithExtras(subscriptionType, subscriptionFinishedListener, "");
}
public void initSubscriptionWithExtras(final String subscriptionType,
final SubscriptionFinishedListener subscriptionFinishedListener,
String payload) {
if (iabHelper != null) {
try {
iabHelper.launchSubscriptionPurchaseFlow((Activity) context,
subscriptionType,
REQUEST_CODE,
new IabHelper.OnIabPurchaseFinishedListener() {
@Override
public void onIabPurchaseFinished(IabResult result, Purchase info) {
if (result.isFailure()) {
Log.e("TEST", "Error purchasing: " + result);
return;
}
if (info.getSku().equals(subscriptionType)) {
if(subscriptionFinishedListener != null){
subscriptionFinishedListener.onSuccess();
}
Log.e("TEST", "Thank you for upgrading to premium!");
}
}
},
payload
);
} catch (IabHelper.IabAsyncInProgressException e) {
e.printStackTrace();
}
//In case you get below error:
//`Can't start async operation (refresh inventory) because another async operation (launchPurchaseFlow) is in progress.`
//Include this line of code to end proccess after purchase
//iabHelper.flagEndAsync();
}
}
public void getSkuDetailsList(
final ArrayList<String> skuIdsList,
final SubscriptionInventoryListener subscriptionInventoryListener
) {
if (iabHelper != null) {
try {
iabHelper.queryInventoryAsync(true, null, skuIdsList, new IabHelper.QueryInventoryFinishedListener() {
@Override
public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
if (result.isFailure()) {
Log.d("TEST", "Problem querying inventory: " + result);
dispose();
return;
}
ArrayList<SkuDetails> skuDetailsList = new ArrayList<>();
for (String skuId : skuIdsList) {
SkuDetails sku = inventory.getSkuDetails(skuId);
if (sku.getSku().equals(skuId)) {
skuDetailsList.add(sku);
sku.getPrice();
}
}
if (subscriptionInventoryListener != null) {
subscriptionInventoryListener.onQueryInventoryFinished(skuDetailsList);
}
}
});
} catch (IabHelper.IabAsyncInProgressException e) {
Log.e("TEST", "EXCEPTION:" + e.getMessage());
}
}
}
public void dispose() {
if (iabHelper != null) {
try {
iabHelper.dispose();
} catch (IabHelper.IabAsyncInProgressException e) {
e.printStackTrace();
}
iabHelper = null;
}
}
public IabHelper getIabHelper() {
if (iabHelper == null) {
iabHelper = new IabHelper(context, base64EncodedPublicKey);
}
return iabHelper;
}
public interface SubscriptionInventoryListener {
void onQueryInventoryFinished(ArrayList<SkuDetails> skuList);
}
public interface SubscriptionFinishedListener{
void onSuccess();
}
}
这是我的订阅按钮:
subscriptionUtil.initSubscription(GlobalVar.skuOneId, new SubscriptionUtil.SubscriptionFinishedListener() {
@Override
public void onSuccess() {
//Do whatever you want on subscription success
Toast.makeText(SubsCriptionActivity.this, "subscription done!", Toast.LENGTH_SHORT).show();
}
});
OnActivityResult是:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (!subscriptionUtil.getIabHelper().handleActivityResult(requestCode, resultCode, data)) {
super.onActivityResult(requestCode, resultCode, data);
}
}
我找不到任何解决方案。我的apk处于活动状态,但未发布。我上载的Play帐户和测试版本的APK的APK是相同的,我也将我的电子邮件添加到了Play帐户(“具有测试访问权限的gmail帐户”)。
谢谢。