Восстановление автоматически возобновляемых подписок после

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

Если пользователь сбросит свой iPhone до заводских настроек, он не сможет восстановить автоматически возобновляемую подписку в нашем приложении (или, похоже, у нас сейчас только два таких случая).

Мы используем SwiftyStoreKit, но я считаю, что с нашей стороны есть логическая ошибка.

Сейчас мы восстанавливаем покупки следующим образом:

func checkOldSubscriptions()->Bool {

     //validator
     let appleValidator = AppleReceiptValidator(service: .production, sharedSecret: ss)

      for i in 0..<products.count {

           //checking every available product in receipt
           SwiftyStoreKit.verifyReceipt(using: appleValidator, completion: { (result) in
               switch result {
                   case .success(let receipt):

                let purchaseResult = SwiftyStoreKit.verifySubscription(
                    type: .autoRenewable, 
                    productId: products[i].name,
                    inReceipt: receipt)

                    switch purchaseResult {
                        case .purchased(let expiresDate):
                        print("Product is valid until \(expiresDate)")

       ...
       }
       }

Моя гипотеза заключается в том, что после сброса у нас просто нет квитанции для проверки, и я должен получить ее напрямую. Это довольно сложно проверить на устройстве, потому что, честно говоря, у меня нет настоящего тестового устройства, которое было бы легко убить для меня.

Поэтому я хочу добавить что-то подобное (вручную обновить квитанцию ​​перед попыткой ее проверки):

SwiftyStoreKit.verifyReceipt(using: appleValidator, forceRefresh: true) { result in
    switch result {
    case .success(let receipt):

Есть ли смысл? Это поможет?

1 ответ

Решение

Ты прав. Квитанция вряд ли будет доступна после сброса. Вам необходимо вызвать restoreCompletedTransactions() для SKPaymentQueue, чтобы получить все транзакции, которые ранее были отмечены как завершенные.

Поскольку вы используете SwiftyStoreKit, вы можете использовать SwiftyStoreKit.restorePurchases. Проверьте документацию для деталей.

Другие вопросы по тегам