来自此 Android 客户端应用程序 <empty> 的请求被阻止 - Google API 错误 Flutter
Requests from this Android client application <empty> are blocked - Google APIs error Flutter
问题描述:
我正在使用 Youtube Data API 在 Flutter 应用程序中使用 API 键获取一些视频。
我使用这段代码来获取我的数据:
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));
当我在项目的 GCP 控制台的凭据选项卡中将应用程序限制设置为“None”时,我正在完美地获取我的数据
现在,当我尝试将数据限制为仅 Android 个应用程序时,它显示此错误:
{error: {code: 403, message: Requests from this Android client application <empty> are blocked., errors: [{message: Requests from this Android client application <empty> are blocked., domain: global, reason: forbidden}], status: PERMISSION_DENIED, details: [{@type: type.googleapis.com/google.rpc.ErrorInfo, reason: API_KEY_ANDROID_APP_BLOCKED, domain: googleapis.com, metadata: {service: youtube.googleapis.com, consumer:
我已经检查过的内容:
我在凭据选项卡中正确添加了调试和发布证书以及 android 包名称。
这可能是什么错误?
在我的请求中有什么需要作为 headers 传递的吗?
这是我要获取的端点
https://youtube.googleapis.com/youtube/v3/playlistItems
我的设置如下所示:
您已经限制了您的密钥,这就是为什么您无法通过 Android 发送请求的原因请不要限制您的密钥,如下所示:
我收到的回复
{
"error":{
"code":403,
"message":"Requests from this iOS client application <empty> are blocked.",
"errors":[
{
"message":"Requests from this iOS client application <empty> are blocked.",
"domain":"global",
"reason":"forbidden"
}
],
"status":"PERMISSION_DENIED",
"details":[
{
"@type":"type.googleapis.com/google.rpc.ErrorInfo",
"reason":"API_KEY_IOS_APP_BLOCKED",
"domain":"googleapis.com",
"metadata":{
"service":"youtube.googleapis.com",
"consumer":"projects/418596848743"
}
}
]
}
}
回答here,我们需要在headers中传递包名和SHA1密钥名。
所以我的新请求看起来像这样:
const SHA1 = "0000000000000000000000000000000000000000";
const PACKAGE_NAME = "com.yourapp.name";
const HEADERS = {
'Content-Type': 'application/json',
'X-Android-Package': PACKAGE_NAME,
'X-Android-Cert': SHA1b,
};
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));
问题描述: 我正在使用 Youtube Data API 在 Flutter 应用程序中使用 API 键获取一些视频。 我使用这段代码来获取我的数据:
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));
当我在项目的 GCP 控制台的凭据选项卡中将应用程序限制设置为“None”时,我正在完美地获取我的数据
现在,当我尝试将数据限制为仅 Android 个应用程序时,它显示此错误:
{error: {code: 403, message: Requests from this Android client application <empty> are blocked., errors: [{message: Requests from this Android client application <empty> are blocked., domain: global, reason: forbidden}], status: PERMISSION_DENIED, details: [{@type: type.googleapis.com/google.rpc.ErrorInfo, reason: API_KEY_ANDROID_APP_BLOCKED, domain: googleapis.com, metadata: {service: youtube.googleapis.com, consumer:
我已经检查过的内容: 我在凭据选项卡中正确添加了调试和发布证书以及 android 包名称。
这可能是什么错误? 在我的请求中有什么需要作为 headers 传递的吗?
这是我要获取的端点
https://youtube.googleapis.com/youtube/v3/playlistItems
我的设置如下所示:
您已经限制了您的密钥,这就是为什么您无法通过 Android 发送请求的原因请不要限制您的密钥,如下所示:
我收到的回复
{
"error":{
"code":403,
"message":"Requests from this iOS client application <empty> are blocked.",
"errors":[
{
"message":"Requests from this iOS client application <empty> are blocked.",
"domain":"global",
"reason":"forbidden"
}
],
"status":"PERMISSION_DENIED",
"details":[
{
"@type":"type.googleapis.com/google.rpc.ErrorInfo",
"reason":"API_KEY_IOS_APP_BLOCKED",
"domain":"googleapis.com",
"metadata":{
"service":"youtube.googleapis.com",
"consumer":"projects/418596848743"
}
}
]
}
}
回答here,我们需要在headers中传递包名和SHA1密钥名。 所以我的新请求看起来像这样:
const SHA1 = "0000000000000000000000000000000000000000";
const PACKAGE_NAME = "com.yourapp.name";
const HEADERS = {
'Content-Type': 'application/json',
'X-Android-Package': PACKAGE_NAME,
'X-Android-Cert': SHA1b,
};
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));