Автоматически возобновляемые подписки не будут продлеваться автоматически

Извините за миллионный вопрос об автопродляемых подписках, но я его не понимаю. Я сделал все, как описано в Руководстве по покупке яблок в приложении, но это не решило проблему.

Моя проблема в том, что я создал автопродление подписок, но они не будут продлеваться автоматически.

Я создал класс наблюдателя платежных транзакций, который реализует интерфейс SKPaymentTransactionObserver. Этот класс будет установлен как paymentObserver при запуске приложения в методе viewDidLoad:.

PaymentTransactionObserver * наблюдатель = [[PaymentTransactionObserver alloc] init];

[[SKPaymentQueue defaultQueue] addTransactionObserver: наблюдатель];

В paymenttransactionobserver у меня есть метод paymentQueue: updateTransactions: (такой же, как описано в документации Apple)

  • (void) paymentQueue: (SKPaymentQueue *) очередь обновлена ​​Транзакции: (NSArray *) транзакции {для (SKPaymentTransaction * транзакция в транзакциях) {
    switch (transaction.transactionState) {

        case SKPaymentTransactionStatePurchased: 

            [self completeTransaction:transaction]; 

            break;

        case SKPaymentTransactionStateFailed: 

            [self failedTransaction:transaction]; 

            break;

        case SKPaymentTransactionStateRestored:

            [self restoreTransaction:transaction]; 

            break;

        default:

            break;
    }
}

Когда я куплю автовозобновляемый товар, товар будет успешно приобретен. Но он никогда не будет обновлен автоматически. Я думал о том, что наблюдатель транзакции каким-то образом будет освобожден, но этого не произойдет (в противном случае я бы получил уведомление от отладчика). Я также удалил наблюдателя, но он никогда не будет удален.

Я использовал отладчик, чтобы убедиться, что метод updateTranscations: будет вызван, но ничего. Когда я покупаю тестовый продукт (в режиме песочницы) со временем автопродления в одну неделю, метод должен вызываться через 3 минуты, но это не так.

Что я делаю неправильно?

Кто-нибудь может помочь?

Br Nic


person NicTesla    schedule 28.09.2011    source источник
comment
Я только что разместил этот вопрос на форуме яблок, так что надеюсь скоро получу ответ!   -  person NicTesla    schedule 30.09.2011
comment
Теперь я также создал запрос на поддержку разработчиков. Похоже, у этой проблемы есть и многие другие!   -  person NicTesla    schedule 05.10.2011


Ответы (2)


Если подписка продлевается автоматически, транзакция не будет проходить через метод paymentQueue: updateTransactions. Обновление просто происходит в Магазине. Если вы хотите проверить это, вам необходимо:

  • Подтвердите квитанцию ​​на сервере приложений, если вы храните квитанцию ​​там.

  • Подтвердите квитанцию ​​на вашем клиенте iOS

(http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/VerifyingStoreReceipts/VerifyingStoreReceipts.html#//apple_ref/doc/uid/TP40008267-CH104-SW1)

Чтобы избежать тестирования на автоматическое продление при каждом запуске / активации, вам следует сохранить дату окончания периода подписки, чтобы впоследствии проверить возможность продления.

Также см:

http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/RenewableSubscriptions/RenewableSubscriptions.html#//apple_ref/doc/uid/TP40008267-CH4-SW4

Однако, похоже, в песочнице есть ошибка. Подписки иногда продлеваются, иногда нет. Трудно проверить ....

person Rene Berlin    schedule 20.10.2011
comment
В песочнице они просто обновляются шесть раз для каждого тестового пользователя, а затем останавливаются, поэтому вам нужно зарегистрировать нового тестового пользователя для этого. - person Nikita Pestrov; 03.04.2012

Автоматическое продление публикуется в очереди покупок вашего приложения только при запуске приложения или при циклическом выходе из фонового режима. Попробуйте нажать кнопку «Домой», а затем вернуться в свое приложение.

person jemmons    schedule 04.10.2011
comment
Но разве это не должно работать во время работы приложения? (Хорошо, обычно вы не позволяете своему приложению запускаться, пока не истечет срок подписки, но с сайта разработчика это было бы нормальным и полезным). Это где-то задокументировано в инструкциях по покупке яблок? Я попробую, но спасибо за ответ! - person NicTesla; 05.10.2011
comment
Вы вызываете [[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; при запуске? - person NicTesla; 05.10.2011
comment
@NicTesla Нет. Это не должно работать, пока приложение работает. Вот почему я сказал, что это не работает :) Посмотрите видео WWDC 2011 № 510 на отметке 47:10. - person jemmons; 05.10.2011
comment
@NicTesla И вы никогда не должны вызывать restoreCompletedTransactions при запуске или в ответ на что-либо, кроме прямого взаимодействия с пользователем. Появляется предупреждение с запросом их учетных данных Apple ID, что может сбивать с толку / раздражать, если это происходит постоянно / случайным образом. - person jemmons; 05.10.2011
comment
Хорошо, спасибо за эту информацию! Во всяком случае, это все еще не работает, поэтому я связался с разработчиком Apple, и они сказали, что в нескольких магазинах есть ошибка в режиме песочницы. Какой магазин вы используете? - person NicTesla; 10.10.2011