You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Cloud翻译API Android客户端403错误求助:请求被阻止

解决GCP Translation API Android客户端403 "Requests from this Android client application are blocked" 问题

我来帮你拆解这个问题——你遇到的403错误本质是GCP的API访问限制在生效:当你给翻译API设置了Android应用限制(指定包名+SHA-1指纹),但请求没有正确携带应用的身份信息时,就会被拦截。而设置为“无限制”时能正常工作,也验证了这一点。

下面是针对性的解决步骤:


1. 先确认GCP控制台的限制配置是否准确

先去GCP控制台的翻译API页面,检查「API限制」的设置:

  • 确认选择的是「Android应用」,并且填写的包名和SHA-1指纹完全匹配你的Android项目
  • 注意区分debug和release版本的SHA-1!很多人在这里踩坑——debug签名的SHA-1和打包发布的SHA-1是不同的,要根据测试环境对应配置

2. 正确配置客户端,让请求携带应用身份信息

你猜测的setApplicationName()确实是配置的一部分,但更关键的是要让请求携带Android应用的凭证信息,而不是单纯用API Key请求(API Key请求不会自动上报应用身份)。

如果你用的是官方Google Cloud Translation Android客户端库,按下面的方式修改代码:

第一步:确保依赖最新版库

在你的build.gradle(Module级别)里添加最新的翻译库依赖:

implementation 'com.google.cloud:google-cloud-translate:2.32.0' // 可替换为最新稳定版

第二步:用AndroidCredentials初始化客户端

替换你现有的初始化逻辑,让客户端自动携带应用的包名和签名信息:

import com.google.auth.oauth2.AndroidCredentials;
import com.google.cloud.translate.Translate;
import com.google.cloud.translate.TranslateOptions;
import com.google.cloud.translate.Translation;

private void translate(String textToTranslate, String targetLanguage) {
    try {
        // 加载Android应用默认凭证,自动获取当前应用的包名和SHA-1
        AndroidCredentials credentials = AndroidCredentials.getApplicationDefault();
        
        // 初始化Translate客户端,这里加上setApplicationName
        Translate translate = TranslateOptions.newBuilder()
            .setCredentials(credentials)
            .setApplicationName("你的应用名称(建议和GCP控制台的项目名称一致)")
            .build()
            .getService();
            
        // 执行翻译请求
        Translation translation = translate.translate(
            textToTranslate,
            Translate.TranslateOption.targetLanguage(targetLanguage)
        );
        
        // 处理翻译结果...
        String translatedText = translation.getTranslatedText();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

3. 排查其他可能的干扰因素

  • 关掉debug时用的代理工具(比如Charles):代理可能会篡改请求头,导致GCP无法正确识别应用身份
  • 确认AndroidManifest.xml里有网络权限:
    <uses-permission android:name="android.permission.INTERNET" />
    

如果还是不行,可以在GCP控制台开启「详细日志」,查看被拦截请求的具体细节,能帮你更快定位问题。

内容的提问来源于stack exchange,提问作者ZN123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:40:34