Hello I’m trying to not save my API keys in my SwiftUI code and instead get these codes from my backend server for security from hacking. The class and code below for APIKeyHandler successfully pulls the two API keys from the backend server and prints them to screen. However when I try to access IS_API and AS_API they are returning empty strings
import Foundation
import SwiftUI
class APIKeyHandler: ObservableObject {
@EnvironmentObject var gloVars: GlobalVars
private let backendtUrl = URL(string: "https://test.net")!
var IS_API: String = ""
var AS_API: String = ""
func getAPIKeys() {
let url = backendtUrl.appendingPathComponent("get-my-apis")
var request = URLRequest(url: url)
request.httpMethod = "POST"
let task = URLSession.shared.dataTask(with: request, completionHandler: { [weak self] (data, response, error) in
guard let data = data,
let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String : Any],
let asin = json["asin_key"] as? String,
let isbn = json["isbndb_key"] as? String,
let self = self else {
print("Failed to retrieve api keys")
return
}
self.IS_API = isbn
self.AS_API = asin
print("IS_API ", self.IS_API)
print("AS_API ", self.AS_API)
})
task.resume()
}
}
Below is the partial code from the view where I try and access IS_API from the APIKeyHandler and it returns an empty string
struct SelectFavoriteBookView: View {
@StateObject var apiModel = APIKeyHandler()
func fetchAPIData() {
isbndbBookURL = isbndbBookURL1 + searchTextTitle + isbndbBookURL2
print("apiModel.IS_API = ", apiModel.IS_API)
let headers: HTTPHeaders = [
"accept": "application/json",
"Authorization": "\(apiModel.IS_API)"
]
AF.request(isbndbBookURL, method: .get, parameters: nil, encoding: URLEncoding.default, headers: headers, interceptor: nil)
.response{ resp in
switch resp.result{
case .success(let data):
do{
let jsonData = try JSONDecoder().decode(BookDataStore.self, from: data!)
//print(jsonData)
books = jsonData.books
} catch {
print(String(describing: error))
}
case .failure(let error):
print(String(describing: error))
}
} //end response
} //end fetch API
You need to sign in to view this answers
Leave feedback about this