-
Notifications
You must be signed in to change notification settings - Fork 795
Subscription Groups
Abdullah Mohammad Daihan edited this page Oct 16, 2024
·
2 revisions
From Apple Docs - Offering Subscriptions:
A subscription group is a set of in-app purchases that you can create to provide users with a range of content offerings, service levels, or durations to best meet their needs. Users can only buy one subscription within a subscription group at a time. If users would want to buy more that one type of subscription — for example, to subscribe to more than one channel in a streaming app — you can put these in-app purchases in different subscription groups.
You can verify all subscriptions within the same group with the verifySubscriptions
method:
let appleValidator = AppleReceiptValidator(service: .production, sharedSecret: "your-shared-secret")
SwiftyStoreKit.verifyReceipt(using: appleValidator) { result in
switch result {
case .success(let receipt):
let productIds = Set([ "com.musevisions.SwiftyStoreKit.Weekly",
"com.musevisions.SwiftyStoreKit.Monthly",
"com.musevisions.SwiftyStoreKit.Yearly" ])
let purchaseResult = SwiftyStoreKit.verifySubscriptions(productIds: productIds, inReceipt: receipt)
switch purchaseResult {
case .purchased(let expiryDate, let items):
print("\(productIds) are valid until \(expiryDate)\n\(items)\n")
case .expired(let expiryDate, let items):
print("\(productIds) are expired since \(expiryDate)\n\(items)\n")
case .notPurchased:
print("The user has never purchased \(productIds)")
}
case .error(let error):
print("Receipt verification failed: \(error)")
}
}
You can retrieve all product identifiers with the getDistinctPurchaseIds
method:
let appleValidator = AppleReceiptValidator(service: .production, sharedSecret: "your-shared-secret")
SwiftyStoreKit.verifyReceipt(using: appleValidator) { result in
switch result {
case .success(let receipt):
let productIds = SwiftyStoreKit.getDistinctPurchaseIds(inReceipt: receipt)
let purchaseResult = SwiftyStoreKit.verifySubscriptions(productIds: productIds, inReceipt: receipt)
switch purchaseResult {
case .purchased(let expiryDate, let items):
print("\(productIds) are valid until \(expiryDate)\n\(items)\n")
case .expired(let expiryDate, let items):
print("\(productIds) are expired since \(expiryDate)\n\(items)\n")
case .notPurchased:
print("The user has never purchased \(productIds)")
}
case .error(let error):
print("Receipt verification failed: \(error)")
}
}