Skip to content

Commit cfefeef

Browse files
authored
Merge pull request #283 from bizz84/feature/parse-receipt-info-fix
Unwrap receipt["receipt"]?["in_app"] in two steps to work around cast returning nil
2 parents dc82285 + 048c1f8 commit cfefeef

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ All notable changes to this project will be documented in this file.
77
* Add `fetchReceipt` method. Update `verifyReceipt` to use it ([#278](https://github.com/bizz84/SwiftyStoreKit/pull/278), related issues: [#272](https://github.com/bizz84/SwiftyStoreKit/issues/272), [#223](https://github.com/bizz84/SwiftyStoreKit/issues/223)).
88
* Update `fetchReceipt` and `ReceiptValidator` to use receipt as `Data` rather than `String`. This is consistent with `localReceiptData` ([#284](https://github.com/bizz84/SwiftyStoreKit/pull/284), see [#272](https://github.com/bizz84/SwiftyStoreKit/issues/272)).
99
* Remove `password` from `ReceiptValidator` protocol as this is specific to `AppleReceiptValidator` ([#281](https://github.com/bizz84/SwiftyStoreKit/pull/281/), see [#263](https://github.com/bizz84/SwiftyStoreKit/issues/263)). **Note**: This is an API breaking change.
10+
* Unwrap `receipt["receipt"]?["in_app"]` in two steps (addresses casting problems) ([#283](https://github.com/bizz84/SwiftyStoreKit/pull/283), related issue [#256](https://github.com/bizz84/SwiftyStoreKit/issues/256)).
1011

1112

1213
## [0.10.8](https://github.com/bizz84/SwiftyStoreKit/releases/tag/0.10.8) Update to swiftlint 0.22.0

SwiftyStoreKit/InAppReceipt.swift

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,9 @@ internal class InAppReceipt {
9292
) -> VerifyPurchaseResult {
9393

9494
// Get receipts info for the product
95-
let receipts = receipt["receipt"]?["in_app"] as? [ReceiptInfo]
96-
let receiptsInfo = filterReceiptsInfo(receipts: receipts, withProductId: productId)
97-
let nonCancelledReceiptsInfo = receiptsInfo.filter { receipt in receipt["cancellation_date"] == nil }
95+
let receipts = getInAppReceipts(receipt: receipt)
96+
let filteredReceiptsInfo = filterReceiptsInfo(receipts: receipts, withProductId: productId)
97+
let nonCancelledReceiptsInfo = filteredReceiptsInfo.filter { receipt in receipt["cancellation_date"] == nil }
9898

9999
let receiptItems = nonCancelledReceiptsInfo.flatMap { ReceiptItem(receiptInfo: $0) }
100100
// Verify that at least one receipt has the right product id
@@ -174,7 +174,7 @@ internal class InAppReceipt {
174174
case .autoRenewable:
175175
return (receipt["latest_receipt_info"] as? [ReceiptInfo], nil)
176176
case .nonRenewing(let duration):
177-
return (receipt["receipt"]?["in_app"] as? [ReceiptInfo], duration)
177+
return (getInAppReceipts(receipt: receipt), duration)
178178
}
179179
}
180180

@@ -186,6 +186,12 @@ internal class InAppReceipt {
186186
}
187187
return Date(millisecondsSince1970: requestDateString)
188188
}
189+
190+
private class func getInAppReceipts(receipt: ReceiptInfo) -> [ReceiptInfo]? {
191+
192+
let appReceipt = receipt["receipt"] as? ReceiptInfo
193+
return appReceipt?["in_app"] as? [ReceiptInfo]
194+
}
189195

190196
/**
191197
* Get all the receipts info for a specific product

0 commit comments

Comments
 (0)