Python中文网

一个关于 编程问题的解答网站.

有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Amazon IAP未启动购买对话框

我正在将一个应用程序从play store迁移到Amazon app store,考虑到这样它也将适用于Windows 11

为此,我制作了一个名为PurchaseActivity的活动,其中包含亚马逊IAP指南PDF带来的代码

通过对话框窗口的“立即购买”按钮调用该活动,代码如下:

public class PurchaseActivity extends Activity {
String parentSKU = "com.amazon.sample.iap.subscription.mymagazine";
//Define UserId and MarketPlace
private String currentUserId;
private String currentMarketplace;
private ProgressDialog progress;

@Override
protected void onStart(){
    super.onStart();
    progress = new ProgressDialog(this);
    progress.setTitle("Purchasing");
    progress.setMessage("Wait while making the purchase...");
    progress.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            progress.dismiss();//dismiss dialog
            finish();
        }
    });
    progress.setCancelable(false); // disable dismiss by tapping outside of the dialog
    progress.show();

    PurchasingService.registerListener(this, purchasingListener);

    PurchasingService.purchase(parentSKU);
}

@Override
protected void onResume() {
    super.onResume();

    //getUserData() will query the Appstore for the Users information
    PurchasingService.getUserData();
    //getPurchaseUpdates() will query the Appstore for any previous purchase
    PurchasingService.getPurchaseUpdates(true);
    //getProductData will validate the SKUs with Amazon Appstore
    final Set<String> productSkus = new HashSet<String>();
    productSkus.add(parentSKU);
    PurchasingService.getProductData(productSkus);
    Log.v("Validating SKUs", "Validating SKUs with Amazon");
}


PurchasingListener purchasingListener = new PurchasingListener() {
    @Override
    public void onUserDataResponse(UserDataResponse response) {
        final UserDataResponse.RequestStatus status = response.getRequestStatus();
        switch (status) {
            case SUCCESSFUL:
                currentUserId = response.getUserData().getUserId();
                currentMarketplace = response.getUserData().getMarketplace();
                Log.v("IAP SDK", "loaded userdataResponse");
                break;
            case FAILED:
            case NOT_SUPPORTED:
                // Fail gracefully.
                Log.v("IAP SDK", "loading failed");
                break;
        }
    }

    @Override
    public void onProductDataResponse(ProductDataResponse productDataResponse) {
        switch (productDataResponse.getRequestStatus()) {
            case SUCCESSFUL:

                //get informations for all IAP Items (parent SKUs)
                final Map<String, Product> products = productDataResponse.getProductData();
                for (String key : products.keySet()) {
                    Product product = products.get(key);
                    Log.v("Product:", String.format("Product: %s\n Type: %s\n SKU: %s\n Price: %s\n Description: %s\n", product.getTitle(), product.getProductType(),
                            product.getSku(), product.getPrice(), product.getDescription()));
                }
                //get all unavailable SKUs
                for (String s : productDataResponse.getUnavailableSkus()) {
                    Log.v("Unavailable SKU:" + s, "Unavailable SKU:" + s);
                }
                break;
            case FAILED:
                Log.v("FAILED", "FAILED");
                progress.dismiss();
                finish();
                break;
        }
    }

    @Override
    public void onPurchaseResponse(PurchaseResponse purchaseResponse) {
        switch (purchaseResponse.getRequestStatus()) {
            case SUCCESSFUL:
                PurchasingService.notifyFulfillment(purchaseResponse.getReceipt().getReceiptId(),
                        FulfillmentResult.FULFILLED);
                break;
            case FAILED:
                progress.dismiss();
                finish();
                break;
        }
    }

    @Override
    public void onPurchaseUpdatesResponse(PurchaseUpdatesResponse response) {

        // Process receipts
        switch (response.getRequestStatus()) {
            case SUCCESSFUL:
                for (final Receipt receipt : response.getReceipts()) {
                    // Process receipts
                    if (!receipt.isCanceled()) {
                        // sharedprefs
                         SharedPreferences sharedPreference = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
                        SharedPreferences.Editor sharedPrefEditor = sharedPreference.edit();
                        sharedPrefEditor.putBoolean("isPro",true);
                        sharedPrefEditor.apply();
                        progress.dismiss();
                        finish();
                    }
                }
                if (response.hasMore()) {
                    PurchasingService.getPurchaseUpdates(true);
                }
                break;
            case FAILED:
                Log.d("FAILED", "FAILED");
                progress.dismiss();
                finish();
                break;
        }
    }
};

}

是的,我知道我不应该调用onStart()方法中的所有内容,但我稍后会用UI创建onCreate()

从这段代码中可以看到,我正在沙箱模式下进行测试

问题是:实际上,当活动开始时,我看到progressDialog,我在调试日志中读到“V/Validating SKU:Validating SKU with Amazon”,但我没有看到Amazon buy窗口。而且,侦听器代码似乎从未被调用过,即使我在其中设置了一些断点,它们也从未被访问过,这非常奇怪,因为它显然是通过方法“PurchasingService.registerListener(这个,purchasingListener)”初始化并成功调用的

任何帮助都将不胜感激

谢谢,晚上好


共 (0) 个答案