diff --git a/Example/Podfile b/Example/Podfile index ebed895..7b43f3d 100644 --- a/Example/Podfile +++ b/Example/Podfile @@ -29,7 +29,7 @@ target 'iamport-ios_Example' do # cocoapods 사용시 enable # cocoapods 사용시 enable # pod 'iamport-ios', :path => '../' # local - # pod 'iamport-ios', '~> 1.4.1' # remote + # pod 'iamport-ios', '~> 1.4.2' # remote # cocoapods 사용시 enable # cocoapods 사용시 enable diff --git a/README.md b/README.md index c14bfb3..d4e2766 100644 --- a/README.md +++ b/README.md @@ -141,7 +141,7 @@ it, simply add the following line to your Podfile: - cocoapods 이용시 (RxSwift 5.x 사용) ```ruby -pod 'iamport-ios', '~> 1.4.1' +pod 'iamport-ios', '~> 1.4.2' ``` diff --git a/Sources/PrivacyInfo.xcprivacy b/Sources/PrivacyInfo.xcprivacy new file mode 100644 index 0000000..3fea02e --- /dev/null +++ b/Sources/PrivacyInfo.xcprivacy @@ -0,0 +1,43 @@ + + + + + NSPrivacyTracking + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryDiskSpace + NSPrivacyAccessedAPITypeReasons + + E174.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + CA92.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryFileTimestamp + NSPrivacyAccessedAPITypeReasons + + C617.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategorySystemBootTime + NSPrivacyAccessedAPITypeReasons + + 35F9.1 + + + + + diff --git a/Sources/iamport-ios/Classes/Presentation/IamportWebViewMode.swift b/Sources/iamport-ios/Classes/Presentation/IamportWebViewMode.swift index f044820..a0bf722 100644 --- a/Sources/iamport-ios/Classes/Presentation/IamportWebViewMode.swift +++ b/Sources/iamport-ios/Classes/Presentation/IamportWebViewMode.swift @@ -355,24 +355,19 @@ extension IamportWebViewMode: WKScriptMessageHandler { case .START_WORKING_SDK: print("JS SDK 통한 결제 시작 요청") - guard let pay = request else { + guard let request = request else { print(".START_WORKING_SDK payment 를 찾을 수 없음") return } - debug_dump(pay) + debug_dump(request) - let encoder = JSONEncoder() + initSDK(userCode: request.userCode, tierCode: request.tierCode) - initSDK(userCode: pay.userCode, tierCode: pay.tierCode) - - switch pay.payload { - case let .payment(payload): - let jsonData = try? encoder.encode(payload) - requestPay(payloadJsonData: jsonData) - - case let .certification(payload): - let jsonData = try? encoder.encode(payload) - requestCertification(payloadJsonData: jsonData) + switch request.payload { + case let .payment(payment): + requestPay(payment: payment) + case let .certification(certification): + requestCertification(certification: certification) } case .RECEIVED: @@ -408,20 +403,38 @@ extension IamportWebViewMode: WKScriptMessageHandler { evaluateJavaScript(method: jsInitMethod) } - private func requestPay(payloadJsonData: Data?) { - guard let json = payloadJsonData, let request = String(data: json, encoding: .utf8)?.replacingOccurrences(of: "'", with: "\\'") else { - print("Failed to encode payload for `requestPay`") + private func requestPay(payment: IamportPayment) { + guard let requestJsonData = try? JSONEncoder().encode(payment) else { + print("requestPay :: payment 데이터를 JSONEncoder encode 할 수 없습니다.") return } - debug_log("payment request : '\(request)'") - evaluateJavaScript(method: "requestPay('\(request)');") + + guard let requestPayload = String(data: requestJsonData, encoding: .utf8)?.replacingOccurrences(of: "'", with: "\\'") + else { + print("requestPayWithCustomData :: requestJsonData 을 String 화 할 수 없습니다.") + return + } + + if let encodedCustomData = payment.custom_data?.getBase64Encode() { + debug_log("requestPayWithCustomData request : '\(requestPayload)', encodedCustomData : '\(encodedCustomData)'") + evaluateJavaScript(method: "requestPayWithCustomData('\(requestPayload)', '\(encodedCustomData)');") + } else { + debug_log("requestPay request : '\(requestPayload)'") + evaluateJavaScript(method: "requestPay('\(requestPayload)');") + } } - private func requestCertification(payloadJsonData: Data?) { - guard let json = payloadJsonData, let request = String(data: json, encoding: .utf8)?.replacingOccurrences(of: "'", with: "\\'") else { - print("Failed to encode payload for `requestCertification`") + private func requestCertification(certification: IamportCertification) { + guard let certificationJsonData = try? JSONEncoder().encode(certification) else { + print("requestCertification :: certification 데이터를 JSONEncoder encode 할 수 없습니다.") + return + } + + guard let request = String(data: certificationJsonData, encoding: .utf8)?.replacingOccurrences(of: "'", with: "\\'") else { + print("requestCertification :: certificationJsonData를 String으로 변환할 수 없습니다.") return } + debug_log("certification request : '\(request)'") evaluateJavaScript(method: "certification('\(request)');") } diff --git a/iamport-ios.podspec b/iamport-ios.podspec index ca5f387..bdd5267 100644 --- a/iamport-ios.podspec +++ b/iamport-ios.podspec @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.name = 'iamport-ios' - s.version = '1.4.1' + s.version = '1.4.2' s.summary = 'iamport-ios will help develop for your iOS App payments' # This description is used to generate tags and improve search results.