api와 통신을 하기 위해선 헤더부분과 사용자에게 갈 문자메시지 내용 바디부분을 만들어야합니다. 그전까지 만들어놨던 메서드를 사용하여 요청에 필요한 정보들을 가공할겁니다.
func sendVerificationCode(number: String) {
let urlString = "https://sens.apigw.ntruss.com/sms/v2/services/\(serviceId)/messages"
let signature = makeSignature()
let randomCode = configRandomCode()
let message = """
PICO 인증번호: \(randomCode)
"""
let number = number.replacingOccurrences(of: "-", with: "")
let smsRequest = SMSRequest(type: SMSRequestType.sms.name,
from: senderPhoneNumber,
subject: "PICO 인증번호 발송",
content: message,
messages: [Message(to: number)],
files: [])
let bodyDict = smsRequest.asDictionary()
...
}
api를 사용하기 위해서는 서버와 통신을 해야합니다.
여태까지 서버와 통신하기 위한 JSON
바디 부분과 api가 요구하는 헤더부분을 만들었습니다.
이제부터 그것들을 가지고 URLSession 사용하여 API와 통신을 할것입니다.
var request = URLRequest(url: URL(string: urlString)!)
request.httpMethod = method
request.setValue("application/json", forHTTPHeaderField: "accept")
request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
request.setValue(accessKey, forHTTPHeaderField: "x-ncp-iam-access-key")
request.setValue(timestamp, forHTTPHeaderField: "x-ncp-apigw-timestamp")
request.setValue(signature, forHTTPHeaderField: "x-ncp-apigw-signature-v2")
request.httpBody = try? JSONSerialization.data(withJSONObject: bodyDict, options: [.prettyPrinted])
이제 요청을 보낸 데이터의 응답을 받아와야 합니다.
서버와 통신하기 위해서는 비동기적으로 서버와 작업을 해야합니다.
그러므로 URLSession을 사용할것입니다.
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error {
print("Error: \(error)")
return
}
guard let data = data else {
print("No data received")
return
}
guard let httpResponse = response as? HTTPURLResponse else {
print("Invalid HTTP response")
return
}
let statusCode = httpResponse.statusCode
print("Status Code: \(statusCode)")
if let responseString = String(data: data, encoding: .utf8) {
print("Response: \(responseString)")
}
}
task.resume()
이렇게 api 와 통신하는 코드를 작성하였고, 성공적이게 문자인증을 하는 기능을 구현하였습니다.