do { if let result = try await openfort.initOAuth( params: OFInitOAuthParams( provider: provider.rawValue, options: ["redirectTo": AnyCodable(RedirectManager.makeLink(path: "login")?.absoluteString ?? "")] ) ), let urlString = result.url, let url = URL(string: urlString) { await UIApplication.shared.open(url) }} catch { print("\(error)")}// Handle OAuth redirect carrying access/refresh tokens and player idif url.host == "login", let comps = URLComponents(url: url, resolvingAgainstBaseURL: false) { let qp: [String: String] = comps.queryItems?.reduce(into: [:]) { dict, item in if let v = item.value { dict[item.name] = v } } ?? [:] if let accessToken = qp["access_token"], let refreshToken = qp["refresh_token"], let playerId = qp["player_id"], !accessToken.isEmpty, !refreshToken.isEmpty, !playerId.isEmpty { do { // Store credentials into Openfort SDK try await openfort.storeCredentials(params: OFStoreCredentialsParams(player: playerId, accessToken: accessToken, refreshToken: refreshToken)) } catch { print("\(error)") } }}
Parameters
struct OFInitOAuthParams: OFCodableSendable { public let provider: String public let options: [String: AnyCodable]? public let ecosystemGame: String?}struct OFStoreCredentialsParams: OFCodableSendable { public let player: String? public let accessToken: String public let refreshToken: String}
Returns
struct OFInitOAuthResponse: OFCodableSendable { public let url: String? public let key: String?}