Firebase и Google Cloud Platform Перевести - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть приложение 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()
        }
...