【发布时间】: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