Browse Source

Removed password parameter from signature of ReceiptValidator.validate method.
This is now supplied as `sharedSecret` in the AppleReceiptValidator initialiser.

Andrea Bizzotto 7 years ago
parent
commit
fe93bb387b

+ 2 - 3
SwiftyStoreKit-iOS-Demo/ViewController.swift

@@ -116,9 +116,8 @@ class ViewController: UIViewController {
     
     func verifyReceipt(completion: @escaping (VerifyReceiptResult) -> Void) {
         
-        let appleValidator = AppleReceiptValidator(service: .production)
-        let password = "your-shared-secret"
-        SwiftyStoreKit.verifyReceipt(using: appleValidator, password: password, completion: completion)
+        let appleValidator = AppleReceiptValidator(service: .production, sharedSecret: "your-shared-secret")
+        SwiftyStoreKit.verifyReceipt(using: appleValidator, completion: completion)
     }
 
     func verifyPurchase(_ purchase: RegisteredPurchase) {

+ 2 - 3
SwiftyStoreKit-macOS-Demo/ViewController.swift

@@ -112,9 +112,8 @@ class ViewController: NSViewController {
     
     func verifyReceipt(completion: @escaping (VerifyReceiptResult) -> Void) {
         
-        let appleValidator = AppleReceiptValidator(service: .production)
-        let password = "your-shared-secret"
-        SwiftyStoreKit.verifyReceipt(using: appleValidator, password: password, completion: completion)
+        let appleValidator = AppleReceiptValidator(service: .production, sharedSecret: "your-shared-secret")
+        SwiftyStoreKit.verifyReceipt(using: appleValidator, completion: completion)
     }
 
     func verifyPurchase(_ purchase: RegisteredPurchase) {

+ 8 - 7
SwiftyStoreKit/AppleReceiptValidator.swift

@@ -34,15 +34,16 @@ public struct AppleReceiptValidator: ReceiptValidator {
 		case sandbox = "https://sandbox.itunes.apple.com/verifyReceipt"
 	}
 
-	public init(service: VerifyReceiptURLType = .production) {
+    private let service: VerifyReceiptURLType
+    private let sharedSecret: String?
+
+    public init(service: VerifyReceiptURLType = .production, sharedSecret: String? = nil) {
 		self.service = service
+        self.sharedSecret = sharedSecret
 	}
 
-	private let service: VerifyReceiptURLType
-
 	public func validate(
 		receipt: String,
-		password autoRenewPassword: String? = nil,
 		completion: @escaping (VerifyReceiptResult) -> Void) {
 
 		let storeURL = URL(string: service.rawValue)! // safe (until no more)
@@ -51,7 +52,7 @@ public struct AppleReceiptValidator: ReceiptValidator {
 
 		let requestContents: NSMutableDictionary = [ "receipt-data": receipt ]
 		// password if defined
-		if let password = autoRenewPassword {
+		if let password = sharedSecret {
 			requestContents.setValue(password, forKey: "password")
 		}
 
@@ -101,8 +102,8 @@ public struct AppleReceiptValidator: ReceiptValidator {
 				*/
 				let receiptStatus = ReceiptStatus(rawValue: status) ?? ReceiptStatus.unknown
 				if case .testReceipt = receiptStatus {
-					let sandboxValidator = AppleReceiptValidator(service: .sandbox)
-					sandboxValidator.validate(receipt: receipt, password: autoRenewPassword, completion: completion)
+                    let sandboxValidator = AppleReceiptValidator(service: .sandbox, sharedSecret: self.sharedSecret)
+					sandboxValidator.validate(receipt: receipt, completion: completion)
 				} else {
 					if receiptStatus.isValid {
 						completion(.success(receipt: receiptInfo))

+ 4 - 8
SwiftyStoreKit/InAppReceiptVerificator.swift

@@ -51,7 +51,6 @@ class InAppReceiptVerificator: NSObject {
      *  - Parameter completion: handler for result
      */
     public func verifyReceipt(using validator: ReceiptValidator,
-                              password: String? = nil,
                               forceRefresh: Bool,
                               refresh: InAppReceiptRefreshRequest.ReceiptRefresh = InAppReceiptRefreshRequest.refresh,
                               completion: @escaping (VerifyReceiptResult) -> Void) {
@@ -59,7 +58,7 @@ class InAppReceiptVerificator: NSObject {
         fetchReceipt(forceRefresh: forceRefresh, refresh: refresh) { result in
             switch result {
             case .success(let encryptedReceipt):
-                self.verify(receipt: encryptedReceipt, using: validator, password: password, completion: completion)
+                self.verify(receipt: encryptedReceipt, using: validator, completion: completion)
             case .error(let error):
                 completion(.error(error: error))
             }
@@ -79,9 +78,7 @@ class InAppReceiptVerificator: NSObject {
                              completion: @escaping (FetchReceiptResult) -> Void) {
 
         if let receiptData = appStoreReceiptData, forceRefresh == false {
-
             fetchReceiptSuccessHandler(receiptData: receiptData, completion: completion)
-
         } else {
             
             receiptRefreshRequest = refresh(nil) { result in
@@ -111,12 +108,11 @@ class InAppReceiptVerificator: NSObject {
     /**
      *  - Parameter receiptData: encrypted receipt data
      *  - Parameter validator: Validator to check the encrypted receipt and return the receipt in readable format
-     *  - Parameter password: Your app’s shared secret (a hexadecimal string). Only used for receipts that contain auto-renewable subscriptions.
      *  - Parameter completion: handler for result
      */
-    private func verify(receipt: String, using validator: ReceiptValidator, password: String? = nil, completion: @escaping (VerifyReceiptResult) -> Void) {
-
-        validator.validate(receipt: receipt, password: password) { result in
+    private func verify(receipt: String, using validator: ReceiptValidator, completion: @escaping (VerifyReceiptResult) -> Void) {
+     
+        validator.validate(receipt: receipt) { result in
             
             DispatchQueue.main.async {
                 completion(result)

+ 1 - 1
SwiftyStoreKit/SwiftyStoreKit+Types.swift

@@ -45,7 +45,7 @@ public struct PurchaseDetails {
 
 //Conform to this protocol to provide custom receipt validator
 public protocol ReceiptValidator {
-	func validate(receipt: String, password autoRenewPassword: String?, completion: @escaping (VerifyReceiptResult) -> Void)
+	func validate(receipt: String, completion: @escaping (VerifyReceiptResult) -> Void)
 }
 
 // Payment transaction

+ 2 - 2
SwiftyStoreKit/SwiftyStoreKit.swift

@@ -233,9 +233,9 @@ extension SwiftyStoreKit {
      *  - Parameter forceRefresh: If true, refreshes the receipt even if one already exists.
      *  - Parameter completion: handler for result
      */
-    public class func verifyReceipt(using validator: ReceiptValidator, password: String? = nil, forceRefresh: Bool = false, completion: @escaping (VerifyReceiptResult) -> Void) {
+    public class func verifyReceipt(using validator: ReceiptValidator, forceRefresh: Bool = false, completion: @escaping (VerifyReceiptResult) -> Void) {
 
-        sharedInstance.receiptVerificator.verifyReceipt(using: validator, password: password, forceRefresh: forceRefresh, completion: completion)
+        sharedInstance.receiptVerificator.verifyReceipt(using: validator, forceRefresh: forceRefresh, completion: completion)
     }
 
     /**