Browse Source

Unwrap receipt["receipt"]?["in_app"] in two steps to work around cast returning nil

Andrea Bizzotto 7 years ago
parent
commit
e64ab020a3
1 changed files with 6 additions and 4 deletions
  1. 6 4
      SwiftyStoreKit/InAppReceipt.swift

+ 6 - 4
SwiftyStoreKit/InAppReceipt.swift

@@ -92,9 +92,10 @@ internal class InAppReceipt {
     ) -> VerifyPurchaseResult {
 
         // Get receipts info for the product
-        let receipts = receipt["receipt"]?["in_app"] as? [ReceiptInfo]
-        let receiptsInfo = filterReceiptsInfo(receipts: receipts, withProductId: productId)
-        let nonCancelledReceiptsInfo = receiptsInfo.filter { receipt in receipt["cancellation_date"] == nil }
+        let appReceipt = receipt["receipt"] as? [String: AnyObject]
+        let receiptsInfo = appReceipt?["in_app"] as? [ReceiptInfo]
+        let filteredReceiptsInfo = filterReceiptsInfo(receipts: receiptsInfo, withProductId: productId)
+        let nonCancelledReceiptsInfo = filteredReceiptsInfo.filter { receipt in receipt["cancellation_date"] == nil }
 
         let receiptItems = nonCancelledReceiptsInfo.flatMap { ReceiptItem(receiptInfo: $0) }
         // Verify that at least one receipt has the right product id
@@ -174,7 +175,8 @@ internal class InAppReceipt {
         case .autoRenewable:
             return (receipt["latest_receipt_info"] as? [ReceiptInfo], nil)
         case .nonRenewing(let duration):
-            return (receipt["receipt"]?["in_app"] as? [ReceiptInfo], duration)
+            let appReceipt = receipt["receipt"] as? [String: AnyObject]
+            return (appReceipt?["in_app"] as? [ReceiptInfo], duration)
         }
     }