Механизм iap.subscribe (Skus []) возвращает false, даже если мой пользователь уже подписан (песочница) - PullRequest
1 голос
/ 27 июня 2019

Я использовал демонстрационное приложение для автоматического продления подписок, чтобы реализовать автопродление подписок в моем приложении.Я могу войти и подписаться, что вызовет стандартные диалоги подписки ios.Однако в следующий раз, когда я вхожу в систему, я вызываю механизм iap.isSubscribeed () из Codenameone, результат всегда ложный (это потому, что я нахожусь в среде testflight?).Когда метод isSubscribeed возвращает ошибку, я отправляю пользователя на страницу подписки, на которой есть кнопка для подписки. Когда эта кнопка нажата, я получаю диалоговое окно, информирующее меня, что я уже подписан.

Я попытался использовать эмулятор, а также настоящий Apple iphone6 ​​+, ни один из которых не получил успешно подписанную квитанцию ​​для пользователя

@Override
public void initForm() {
    theme = UIManager.initFirstTheme("/theme");
    //create a new content container
    Container content = new Container();
    iap = Purchase.getInAppPurchase();
    // Pro only feature, uncomment if you have a pro subscription
    // Log.bindCrashProtection(true);
    // Define a receipt loader
    iap.setReceiptStore(createReceiptStore());
    /*
    The form needs to be split up into 3 parts 1 part for Successful subscriptions 
    1 part for paymens that have not been sucecssful yet 
    and  1 part for people who have not subscribed yet
     */
    if (!iap.isSubscribed(Skus)) {
        EMCDialogFactory.showMessageDialog("Subscription Failed", "Is Subscribed upon login: " + iap.isSubscribed(SKU_1_MONTH));
        content = createNonSubscribedHomeScreen();
    } else {
        EMCDialogFactory.showMessageDialog("Subscription Failed", "Is Subscribed upon login: " + iap.isSubscribed(SKU_1_MONTH));
        content = createSuccessfulHomeScreen();
    }

    setLayout(new BorderLayout());
    add(BorderLayout.CENTER, content);

}


/**
 * Creates a receipt loader to load receipts from our web service
 *
 * @return
 */
private ReceiptStore createReceiptStore() {
    //fetch all your receipts from the server to be used by the receipt store 
    listOfReceipts = fetchReceipts();
    return new ReceiptStore() {
        @Override
        public void fetchReceipts(SuccessCallback<Receipt[]> callback) {
            List<Receipt> out = new ArrayList<>();
            //loop through the receipts
            for (Receipt res : listOfReceipts) {
                //create a new receipt
                Receipt r = new Receipt();
                r.setTransactionId(res.getTransactionId());
                r.setPurchaseDate(res.getPurchaseDate());
                r.setQuantity(1);
                r.setSku(res.getSku());
                //check cancellation and expiry
                if (res.getCancellationDate() != null) {
                    r.setCancellationDate(res.getCancellationDate());
                }
                if (res.getExpiryDate() != null) {
                    r.setExpiryDate(res.getExpiryDate());
                }
                out.add(r);
            }
            callback.onSucess(out.toArray(new Receipt[out.size()]));
        }

        @Override
        public void submitReceipt(Receipt r, SuccessCallback<Boolean> callback) {
            submitTheReceipt(r, callback);
        }

    };
}

Нет сообщения об ошибке, которое показывает егопросто возвращает false, что я не подписан, и он возвращается на мою страницу подписки.Однако, если я снова нажимаю кнопку подписки, это говорит о том, что я уже подписан.

...