Firebase authentification works but I get error when using the Google Text to Speech API

夙愿已清 提交于 2019-12-11 03:03:37

问题


I've set up a small android and firebase app... Authentification works like a charm, and in the firebase console, I can see my user, logged in with the Google account.

Now I am trying to experiment a little with the Text to Speech api, and in doing so, I followed this tutorial:

https://github.com/GoogleCloudPlatform/java-docs-samples/tree/master/texttospeech/cloud-client

I managed to make the small java app work, by setting the GOOGLE_APPLICATION_CREDENTIALS Environment variable (I followed this tutorial for this step: https://cloud.google.com/docs/authentication/getting-started), but I am not sure what I need to do to make that code work in the Android app where the users are authentificated..

The Error that I get when trying to make a call to the TextToSpeech API is:

The Application Default Credentials are not available. They are available if running in Google Compute Engine. Otherwise, the environment variable GOOGLE_APPLICATION_CREDENTIALS must be defined pointing to a file defining the credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information.

The error mentioned comes from the line:

TextToSpeechClient textToSpeechClient = TextToSpeechClient.create();

This error appears because of the fact that on the android emulator I don't have access to the credentials that are set as environment variable in my OS..So I have to provide the credentials in another way.

In the case of other Google APIs, like Storage, I found out that this can be done like this:

// You can specify a credential file by providing a path to GoogleCredentials.
// Otherwise credentials are read from the GOOGLE_APPLICATION_CREDENTIALS environment variable.
GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream(jsonPath))
 .createScoped(Lists.newArrayList("https://www.googleapis.com/auth/cloud-platform"));
Storage storage = StorageOptions.newBuilder().setCredentials(credentials).build().getService();

I managed to create the GoogleCredentials object with the contents of the json file, however the TextToSpeech client doesn't seem to provide a functionality similar to this:

StorageOptions.newBuilder().setCredentials(credentials).build()

So my question is....is there a way to provide the Credentials object to the TextToSpeech client?

Thanks


回答1:


Currently, there is not a way to provide credentials to the TTS Client from this page.

Due to Security / Auth reasons, I believe the best suggested approach is to use Firebase Functions.

  1. Get the Text
  2. Call Firebase Functions
  3. Have Firebase Functions call the TTS API
  4. Return the results.

This way, no keys are leaked inside the application and you can use Firebase Auth.

Let me know if that helps!

Update:

Option 2: iOS Tutorial (should be adaptable to Android)

  1. Get the Text
  2. Call Firebase Functions
  3. Have Firebase Functions return an OAuth2 Token
  4. Use the token directly with the API


来源:https://stackoverflow.com/questions/52393225/firebase-authentification-works-but-i-get-error-when-using-the-google-text-to-sp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!