【问题标题】:Android Google Translate API Permission DeniedAndroid Google Translate API 权限被拒绝
【发布时间】:2018-04-11 18:39:37
【问题描述】:

我一直在尝试让 Google Translate API 正常工作。我已经阅读并重新阅读了许多帖子,以及 Google Cloud 身份验证指南 (http://cloud.google.com/docs/authentication/getting-started#auth-cloud-implicit-java),但仍然必须遗漏一些东西。 根据指南并遵循http://stackoverflow.com/questions/49379897/missing-a-valid-api-key-about-google-translation-api-client-issue,我创建了一个名为 ABCD 的服务帐户,并在 GCP Console 中让自己成为项目所有者。我下载了 JSON 文件并将其放在名为 JSON 的文件夹中。然后我手动创建了一个系统环境变量——GOOGLE_APPLICATION_CREDENTIALS,值为 C:\Users\aaa\AndroidStudioProjects\JSON。

当我查看 GCP 控制台中的 IAM 和管理页面时,它会显示我的服务帐户,其 ID 为 ABCD@helpful-monitorxxxxxxxxx.com 以及密钥 ID。

这是我的 MainActivity 类以及用于进行翻译的 Aync 任务类。

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;


public class MainActivity extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Context context = getApplicationContext();
        Trans translate = new Trans();
        String text = ("Hello world");
        String res = translate.execute(text).toString();
    }
}


import android.os.AsyncTask;
import com.google.cloud.translate.Translate;
import com.google.cloud.translate.Translate.TranslateOption;
import com.google.cloud.translate.TranslateOptions;
import com.google.cloud.translate.Translation;

public class Transl extends AsyncTask<String, Void, String> {

    protected String doInBackground(String... params) {
        String text = "Hello friend"; //text to translate
        Translate translate = TranslateOptions.getDefaultInstance().getService();
        Translation translation =
                translate.translate(
                        text,
                        Translate.TranslateOption.sourceLanguage("en"),
                        Translate.TranslateOption.targetLanguage("fr"));
        return translation.getTranslatedText();Fatal Exception 
    }
    protected void onPostExecute(String result) {
        System.out.printf("Translation: %s%n", result);
    }
}

当我运行它时,我得到一个致命的运行时异常-

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"
    }

我真的找不到任何调试它的方法。我需要做进一步的事情来启用帐户/API 密钥吗?是否缺少代码?

感谢您的支持。

【问题讨论】:

  • 您在创建系统环境变量 GOOGLE_APPLICATION_CREDENTIALS 时是否包含了整个 jsonPath? (不仅是文件所在的文件夹,还有整个路径,例如 C:\Users\aaa\AndroidStudioProjects\JSON[xxxxxxxxxxx.json] )。你也可以provide service account credentials manually

标签: android google-api google-translate


【解决方案1】:

你是在这个地址发帖吗?

https://translation.googleapis.com/language/translate/v2/?key=>这里是http编码的API密钥

如果是这样,您是否使用了实际的 API 密钥?

如果没有,当您在控制台中为您的应用查看“Google Cloud Platform”时,点击左侧的小键,带您进入“Credentials”页面。

如果您没有看到“API 密钥”,请点击“创建凭据”蓝色按钮,然后选择“API 密钥”

然后在我上面提到的 POST 到的 URL 地址中使用它作为密钥。

【讨论】:

    猜你喜欢
    • 2019-12-31
    • 2022-08-03
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 2022-06-26
    • 1970-01-01
    • 2013-07-03
    • 2015-12-21
    相关资源
    最近更新 更多