فهرست منبع

Dispatch callback on main queue when retrieving products info and refreshing the receipt (#211)

Andrea Bizzotto 8 سال پیش
والد
کامیت
ff410381fe
2فایلهای تغییر یافته به همراه15 افزوده شده و 5 حذف شده
  1. 8 2
      SwiftyStoreKit/InAppProductQueryRequest.swift
  2. 7 3
      SwiftyStoreKit/InAppReceiptRefreshRequest.swift

+ 8 - 2
SwiftyStoreKit/InAppProductQueryRequest.swift

@@ -59,7 +59,7 @@ class InAppProductQueryRequest: NSObject, SKProductsRequestDelegate {
 
         let retrievedProducts = Set<SKProduct>(response.products)
         let invalidProductIDs = Set<String>(response.invalidProductIdentifiers)
-        callback(RetrieveResults(retrievedProducts: retrievedProducts,
+        performCallback(RetrieveResults(retrievedProducts: retrievedProducts,
             invalidProductIDs: invalidProductIDs, error: nil))
     }
 
@@ -68,6 +68,12 @@ class InAppProductQueryRequest: NSObject, SKProductsRequestDelegate {
     }
 
     func request(_ request: SKRequest, didFailWithError error: Error) {
-        callback(RetrieveResults(retrievedProducts: Set<SKProduct>(), invalidProductIDs: Set<String>(), error: error))
+        performCallback(RetrieveResults(retrievedProducts: Set<SKProduct>(), invalidProductIDs: Set<String>(), error: error))
+    }
+    
+    private func performCallback(_ results: RetrieveResults) {
+        DispatchQueue.main.async {
+            self.callback(results)
+        }
     }
 }

+ 7 - 3
SwiftyStoreKit/InAppReceiptRefreshRequest.swift

@@ -66,11 +66,15 @@ class InAppReceiptRefreshRequest: NSObject, SKRequestDelegate {
          print("\(k): \(v)")
          }
          }*/
-        callback(.success)
+        performCallback(.success)
     }
     func request(_ request: SKRequest, didFailWithError error: Error) {
         // XXX could here check domain and error code to return typed exception
-        callback(.error(e: error))
+        performCallback(.error(e: error))
+    }
+    private func performCallback(_ result: ResultType) {
+        DispatchQueue.main.async {
+            self.callback(result)
+        }
     }
-
 }