Files
TPInAppReceipt/Sources/Extras.swift
T
2020-10-22 03:48:21 +03:00

88 lines
2.0 KiB
Swift

//
// InAppReceiptManager.swift
// TPInAppReceipt
//
// Created by Pavel Tikhonenko on 13.02.2020.
// Copyright © 2020 Pavel Tikhonenko. All rights reserved.
//
#if canImport(StoreKit)
import Foundation
import StoreKit
@available(watchOSApplicationExtension 6.2, *)
fileprivate var refreshSession: RefreshSession?
public extension InAppReceipt
{
/**
* Refresh local in-app receipt
* - Parameter completion: handler for result
*/
@available(watchOSApplicationExtension 6.2, *)
static func refresh(completion: @escaping IAPRefreshRequestResult)
{
if refreshSession != nil { return }
refreshSession = RefreshSession()
refreshSession!.refresh { (error) in
completion(error)
InAppReceipt.destroyRefreshSession()
}
}
@available(watchOSApplicationExtension 6.2, *)
static fileprivate func destroyRefreshSession()
{
refreshSession = nil
}
}
public typealias IAPRefreshRequestResult = ((Error?) -> ())
@available(watchOSApplicationExtension 6.2, *)
fileprivate class RefreshSession : NSObject, SKRequestDelegate
{
private let receiptRefreshRequest = SKReceiptRefreshRequest()
private var completion: IAPRefreshRequestResult?
override init()
{
super.init()
receiptRefreshRequest.delegate = self
}
func refresh(completion: @escaping IAPRefreshRequestResult)
{
self.completion = completion
receiptRefreshRequest.start()
}
func requestDidFinish(_ request: SKRequest)
{
requestDidFinish(with: nil)
receiptRefreshRequest.cancel()
}
func request(_ request: SKRequest, didFailWithError error: Error)
{
print("Something went wrong: \(error.localizedDescription)")
requestDidFinish(with: error)
}
func requestDidFinish(with error: Error?)
{
DispatchQueue.main.async { [weak self] in
self?.completion?(error)
}
receiptRefreshRequest.cancel()
}
}
#endif