【问题标题】:com.google.cloud.translate.TranslateException: The request is missing a valid API keycom.google.cloud.translate.TranslateException:请求缺少有效的 API 密钥
【发布时间】:2018-05-27 09:19:22
【问题描述】:

我是安卓开发新手。我通过 Android Studio 开发应用程序,使用 firebase 作为后端,并通过模拟器运行所有内容。当我尝试使用 G translate API 构建应用程序时。我已经在 GCP 控制台中启用了每个身份验证。错误:

java.lang.RuntimeException: Unable to start activity ComponentInfo{testing.com.login/testing.com.login.MainActivity}: com.google.cloud.translate.TranslateException: The request is missing a valid API key.
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
    at android.app.ActivityThread.-wrap11(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6494)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
 Caused by: com.google.cloud.translate.TranslateException: The request is missing a valid API key.
    at com.google.cloud.translate.spi.v2.HttpTranslateRpc.translate(HttpTranslateRpc.java:61)
    at com.google.cloud.translate.spi.v2.HttpTranslateRpc.translate(HttpTranslateRpc.java:144)
    at com.google.cloud.translate.TranslateImpl$4.call(TranslateImpl.java:113)
    at com.google.cloud.translate.TranslateImpl$4.call(TranslateImpl.java:110)
    at com.google.api.gax.retrying.DirectRetryingExecutor.submit(DirectRetryingExecutor.java:89)
    at com.google.cloud.RetryHelper.run(RetryHelper.java:74)
    at com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:51)
    at com.google.cloud.translate.TranslateImpl.translate(TranslateImpl.java:110)
    at com.google.cloud.translate.TranslateImpl.translate(TranslateImpl.java:124)
    at testing.com.login.MainActivity.onCreate(MainActivity.java:60)
    at android.app.Activity.performCreate(Activity.java:7009)
    at android.app.Activity.performCreate(Activity.java:7000)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 
    at android.app.ActivityThread.-wrap11(Unknown Source:0) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6494) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
 Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "The request is missing a valid API key.",
    "reason" : "forbidden"
  } ],
  "message" : "The request is missing a valid API key.",
  "status" : "PERMISSION_DENIED"
}
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1065)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
    at com.google.cloud.translate.spi.v2.HttpTranslateRpc.translate(HttpTranslateRpc.java:130)
        ... 21 more

我在基于 Windows 的计算机中添加了环境变量 (GOOGLE_API_KEY,GOOGLE_APPLICATION_CREDENTIALS)。但是,当我使用 System.getProperties() 函数调试代码时,它返回的值类似于 SYSTEMSERVERCLASSPATH、ANDROID_STORAGE、PATH、ANDROID_SOCKET_zygote 等,而不是我计算机的变量。这些变量从何而来?

【问题讨论】:

    标签: android google-api google-cloud-platform google-translate


    【解决方案1】:

    SYSTEMSERVERCLASSPATHANDROID_STORAGE等环境变量是Android系统在初始化时设置的环境变量,

    例如,使用 init.environ.rc.in 初始化文件。如果您已设置具有所需权限的 Google Cloud Platform (GCP) 服务帐户,则需要包含凭据文件并根据本文档导出指向该文件的 GOOGLE_APPLICATION_CREDENTIALS 变量在 https://cloud.google.com/docs/authentication/getting-started#setting_the_environment_variable 上,在 Android 的那个初始化文件上。

    请注意,凭据文件和该凭据文件的路径都将打开并且可以从 Android 系统访问。

    【讨论】:

      猜你喜欢
      • 2018-12-25
      • 2021-10-23
      • 1970-01-01
      • 2018-11-07
      • 1970-01-01
      • 2018-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多