Проблема DispatchGroup при аутентификации Apple Id - PullRequest
0 голосов
/ 22 марта 2019

У меня сейчас есть одна странная проблема.Я использую DispatchGroup() для проверки подписок в приложении при загрузке.Это работает, только если я уже прошел проверку подлинности с идентификатором Apple.

    let dispatchGroup = DispatchGroup()

    var index = 0  // <--- Just For test
    for a in inAppPurchaseIds {
        index = index + 1
        print("INDEX ENTER --> \(index)")
        dispatchGroup.enter()   // <<---

        MPInAppPurchases.verifySubscription(a) { [weak self] status, data, error, expDate in
            print("LOOP COUNT --> YES")

            guard let me  = self else {
                print("INDEX LEAVE ME --> \(a)")

                dispatchGroup.leave()
                return
            }

            print("DATA ---- \(String(describing: data))")

            print("INDEX LEAVE --> \(a)")

            dispatchGroup.leave()
        }
    }

    dispatchGroup.notify(queue: .main) {
        print("NOTIFY")
    }

Функция, которая проверяет получение

 static func verifySubscription(_ id: String, completion: purchaseHandler?) {
    let appleValidator = AppleReceiptValidator(service: .production, sharedSecret: sharedSecret)
    SwiftyStoreKit.verifyReceipt(using: appleValidator) { result in
        switch result {
        case .success(let receipt):
            // Verify the purchase of a Subscription
            let purchaseResult = SwiftyStoreKit.verifySubscription(
                ofType: .autoRenewable, // or .nonRenewing (see below)
                productId: id,
                inReceipt: receipt)

            switch purchaseResult {
            case .purchased(let expiryDate, _):
                print("\(id) is valid until \(expiryDate)")
                completion?(true, "Product Purchased", nil, expiryDate)
            case .expired(let expiryDate, _):
                print("\(id) is expired since \(expiryDate)")
                completion?(false, "Product Expired", nil, expiryDate)
            case .notPurchased:
                print("The user has never purchased \(id)")
                completion?(false, "Product Not Purchased", nil, nil)
            }

        case .error(let error):
            print("Receipt verification failed: \(error)")
            completion?(false, "Receipt verification failed", error.localizedDescription, nil)
        }
    }
}

LOG

INDEX ENTER --> 1
INDEX ENTER --> 2
INDEX ENTER --> 3

LOOP COUNT --> YES
DATA ---- Optional("Product Not Purchased")
INDEX LEAVE --> kr.co.proPackage

Функция возвращает данные по завершении, но здесь я не могу получить какие-либо данные из функции и только после того, как она покинет группу.Есть идеи, почему это происходит?Это происходит только тогда, когда я не вошел в систему с моим Apple ID в моем устройстве.После того, как все сделано, оно работает отлично.

Действия по воспроизведению проблемы

Выйти из моего идентификатора Apple> удалить приложение с моего устройства> перезапустить приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...