У меня сейчас есть одна странная проблема.Я использую 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> удалить приложение с моего устройства> перезапустить приложение.