У меня есть приложение IOS и оно интегрировано с Firebase. Я бы хотел, чтобы Google Cloud Translate был интегрирован в это приложение. Приложение имеет встроенный пользовательский интерфейс с помощью Firebase Authentication. Я хотел бы использовать этот вход для Google Cloud Platform. Я проверил перевод через терминал json (ключ), и он работает нормально. Когда я проверял перевод текста в приложении IOS, появилось сообщение об ошибке ниже. пользователь подписан в firebase, и я передал токен, но не уверен, почему он не работает. Код ниже тоже, и я получил токен firebase по - currentUser?.getIDTokenForcingRefresh(true)
, но он не работает. Я довольно новичок в OAuth2 и у меня много проблем, чтобы заставить его работать. Вот код ниже -
{
"error": {
"code": 401,
"message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
"errors": [
{
"message": "Invalid Credentials",
"domain": "global",
"reason": "authError",
"location": "Authorization",
"locationType": "header"
}
],
"status": "UNAUTHENTICATED"
}
}
let url = URL(string : "https://translation.googleapis.com/language/translate/v2")!
var request = URLRequest(url : url)
let json: [String: Any] = [
"q": "Hello",
"source": "en",
"target": "es",
"format": "text"
]
let valid = JSONSerialization.isValidJSONObject(json) // true
let jsonData = try! JSONSerialization.data(withJSONObject: json)
if let JSONString = String(data: jsonData, encoding: .utf8) {
print(JSONString)
}
let currentUser = Auth.auth().currentUser
currentUser?.getIDTokenForcingRefresh(true) { idToken, error in
if let error = error {
// Handle error
return;
}
request.httpMethod = "POST"
request.setValue("Bearer \(idToken)", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = jsonData
let session = URLSession(configuration : .default)
let task = session.dataTask(with: request) {
(data, response, error) in
if let data = data {
if let postResponse = String(data:data, encoding: .utf8) {
print(postResponse)
}
}
}
task.resume()
}