谷歌云视觉API权限被拒绝。

12

我试图运行样例应用程序,可以在Github Sample中找到,我已经创建了证书并创建了API密钥,并按照说明进行了申请。但是当我上传图片时,出现了这个异常。我不知道我犯了什么错误。我有什么遗漏吗?

failed to make API request because {
    "code": 403,
    "errors": [{
        "domain": "global",
        "message": "Requests from this Android client application <empty> are blocked.",
        "reason": "forbidden"
    }],
    "message": "Requests from this Android client application <empty> are blocked.",
    "status": "PERMISSION_DENIED"
}

2
有什么进展吗?我也遇到了同样的问题! - stack_ved
2
我也遇到了同样的问题。 - KnowIT
1
@amalan-dhananjayan 你有没有在API密钥中设置捆绑标识符的机会?我猜这可能是我们在iOS示例中看到的相同问题。https://github.com/GoogleCloudPlatform/cloud-vision/issues/16 我会看看是否有一个特定于Android的客户端库集,我们应该使用它们而不是Java库。 - Tim Swast
@TimSwast 是的。我已经设置了捆绑名称/标识符和SHA-1密钥来创建API密钥。我也尝试了示例应用程序,使用我的自己的SHA-1密钥。它也出现了相同的问题。 - Amalan Dhananjayan
1
它对我起作用。在创建API KEY时,在API Manager - Credentials下,我正在创建浏览器密钥而不是Android密钥。由于某种奇怪的原因,它正在工作。 - stack_ved
显示剩余3条评论
6个回答

9

我猜想你正在创建一个Android API密钥,并将其注册到你的app中,同时限制访问。

这很棒!但是非Android专用的Google API Java客户端库还不能完全支持Android API密钥发出的API请求,而像Android专用库那样。这意味着 API 请求没有包含一些头部信息来验证该密钥/应用程序与API终端点的身份,导致错误(请注意错误消息中的client application <empty> - 如果请求按预期的方式形成,则<empty>会是你的包名)。

我仍在寻找解决方法-如果我找到了,将会更新。


5

我遇到了同样的问题,但是我解决了。

如果你添加浏览器API密钥,你的代码就可以正常工作了。


你的答案是正确的。它能够工作,但这不是正确的方法,我们无法通过这个快速修复程序正确地跟踪数据配额。@Tim_Swat正在从谷歌解决这个问题。感谢你,伙计 :) - Amalan Dhananjayan
1
运行良好,甚至为我的案例跟踪使用情况 @AmalanDhananjayan - Parth Kapadia
如何获取浏览器API密钥?我只有我的API_KEY。请帮忙。 - Tapan Kumar Patro
1
使用浏览器密钥并不是使用API密钥的真正解决方案。 - MonsieurBeilto

0

这里有一些问题,我已经解决了!!!

只需放置服务器密钥即可!!

enter image description here

希望能对某人有所帮助


0

我相信使用浏览器密钥可以解决您的问题。但实际解决方案是使用OAuth密钥,就像Android应用程序应该做的那样。

  1. 要这样做,请转到Cloud Developer Console侧边菜单中的凭据部分。
  2. 单击凭据下拉菜单,然后选择OAuth客户端ID。
  3. 将应用程序类型设置为Android。
  4. 添加一个合适的名称,例如“Cloud Vision API的Android客户端”。
  5. 以所需格式输入您的SHA1指纹。使用屏幕上提到的命令。
  6. 输入您的应用程序包名称,可以在gradle的defaultConfig块中找到。
  7. 单击创建。

这是完整教程此处的摘录。


0
你在安卓项目中都做了哪些更改?确保启用了云视觉 API 并启用计费。我所要做的就是在 MainActivity 中使用来自 Github 的相同示例添加我的 API 密钥。

看一下我的截图


可以告诉我你添加了哪些应用程序包吗?我遇到了相同的问题,收费功能已经启用,但每个请求都失败了。 - Prathamesh Shetye
sample.google.com.cloudvision是示例提供的包名,我没有将其重构为自己的包名。希望这可以帮到您。 - Derivative
请问您能帮我们解决这个问题吗?我猜是需要开启计费功能。我已经创建了一个 API 密钥并将其分配给变量 CLOUD_VISION_API_KEY。同时,我也已经为我的项目启用了计费和云 API。 - stack_ved
你是否在使用Github的示例?如果没有,请检查你的Android清单文件中的权限设置。应该包括以下内容:<uses-permission android:name="android.permission.INTERNET" />、<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>和<uses-permission android:name="android.permission.CAMERA"/>。 - Derivative

0

你可能已经将API密钥限制为仅允许来自Android应用的请求。将其更改为,它将接受所有请求,但这也意味着安全性较低。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接