Flutter调用Youtube Data API设置安卓应用限制后报403错误如何解决?
错误原因
- 缺失安卓校验必填请求头:针对设置了安卓应用限制的GCP API密钥,服务端要求请求必须携带
X-Android-Package和X-Android-Cert两个请求头,用于校验请求来源是否符合配置的应用信息。当前请求仅携带了API密钥参数,未传递这两个头,导致服务端识别不到客户端应用信息,返回<empty>客户端被拦截的错误。 - 签名值格式不匹配:如果已添加请求头但SHA1值格式错误(保留了冒号分隔符、大小写不符),也会导致校验失败。
- 配置未生效:GCP凭据页的修改最多需要15分钟才能全网生效,刚修改完配置立即调用可能出现校验失败。
解决方法
修改请求代码手动添加对应请求头即可,示例代码如下:
const FETCH_LINK = "$BASE_URL?part=$PART&playlistId=$PLAYLIST_ID&key=$API_KEY&maxResults=$MAX_RESULTS"; var response = await http.get( Uri.parse(FETCH_LINK), headers: { // 替换为安卓项目的applicationId,需和GCP配置的包名完全一致 "X-Android-Package": "com.your.application.id", // 替换为GCP填写的SHA1签名,去掉所有冒号并转全大写 "X-Android-Cert": "YOURPROCESSEDSHA1VALUE" } );
注意事项
X-Android-Package的值必须和GCP凭据页填写的包名完全匹配,对应安卓模块build.gradle中的applicationId字段X-Android-Cert需要对原始SHA1做处理:比如原始SHA1为AA:BB:CC:11:22:33...,处理后为AABBCC112233...,需完全删除冒号并转为全大写- 若刚修改完GCP凭据配置,建议等待15分钟后再进行测试,避免配置未生效导致校验失败
内容的提问来源于stack exchange,提问作者Apoorv pandey
相关产品推荐
相关产品推荐

