在 android 中获取意外的响应代码 403,同时在谷歌云控制台中将 API 密钥限制为 Android 应用程序
Posted
技术标签:
【中文标题】在 android 中获取意外的响应代码 403,同时在谷歌云控制台中将 API 密钥限制为 Android 应用程序【英文标题】:Getting Unexpected response code 403 in android while Restrict API key to Android apps in google cloud console 【发布时间】:2021-09-21 00:16:28 【问题描述】:我正在使用 Google Cloud API 从 Blogger 获取一些帖子到我的 android 应用程序中。我正在使用 Volly 进行请求。当对 API 密钥没有限制时,一切正常。但是当我限制我的 Android API 密钥时,它停止工作,我得到:
E/Volley: [89773] NetworkUtility.shouldRetryException: Unexpected response code 403 for https://www.googleapis.com/blogger/v3/blogs/[my blog id]/posts/search?q=[my query]&key=[my API key]
E/onErrorResponse:: com.android.volley.AuthFailureError
另外,我已经交叉检查了我的包名和 SHA-1 密钥,都正确。
如果我现在取消限制,它会再次正常工作。但我想将其限制在我的应用程序本身。
如何在谷歌云控制台中限制我的 android 密钥...任何帮助..?
【问题讨论】:
【参考方案1】:我在下面遇到同样的问题是工作代码,你只需要覆盖请求的标头
class MainActivity : AppCompatActivity(), NewsItemClicked
private lateinit var mAdapter: NewsListAdapter
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
recyclerView.layoutManager = LinearLayoutManager(this)
fetchData()
mAdapter = NewsListAdapter(this)
recyclerView.adapter = mAdapter
private fun fetchData()
val url = "https://newsapi.org/v2/top-headlines?country=in&apiKey=b85b8dedeaaa4cd391d2e211ca5faf96"
val jsonObjectRequest = object: JsonObjectRequest(
Request.Method.GET,
url,
null,
Response.Listener
val newsJsonArray = it.getJSONArray("articles")
val newsArray = ArrayList<News>()
for(i in 0 until newsJsonArray.length())
val newsJsonObject = newsJsonArray.getJSONObject(i)
val news = News(
newsJsonObject.getString("title"),
newsJsonObject.getString("author"),
newsJsonObject.getString("url"),
newsJsonObject.getString("urlToImage"),
)
newsArray.add(news)
mAdapter.updatedNews(newsArray)
,
Response.ErrorListener
Log.e("ERRORFETCH", "Something went wrong in fething")
,
)
override fun getHeaders(): MutableMap<String, String>
val headers = HashMap<String, String>()
headers["User-Agent"] = ": Mozilla/5.0"
return headers
MySingleton.getInstance(this).addToRequestQueue(jsonObjectRequest)
override fun onItemClicked(item: News)
【讨论】:
感谢您的回复。但在这里我正在处理 Google Cloud API 以及它对 android 的限制问题。我认为在我的标题中添加headers["User-Agent"] = ": Mozilla/5.0"
并不能解决我的问题。
好吧@Venkat,您可能缺少一些标头,例如当 api 需要 req 中的某些标头时会出现此错误。
我在 google 的官方页面中看到了文档并相应地传递了标题。如果在我将限制设置为仅在 Android 中工作之前对该 API 没有限制,它也可以正常工作。以上是关于在 android 中获取意外的响应代码 403,同时在谷歌云控制台中将 API 密钥限制为 Android 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
(tornadio2) 失败:WebSocket 握手期间出错:意外的响应代码:403
https://www.googleapis.com/games/v1/players/1123xxxxxx11712506520 和其他播放服务错误的意外响应代码 403
TortoiseSVN 中继结帐“服务器发送了意外的返回值(403 禁止)以响应 OPTIONS”错误
获取 403:禁止访问:当用户意外关闭登录会话时,访问被拒绝
在 pyspark 中使用 S3a 保存文件时获取 S3 响应代码(仅限 HTTP 代码,如 200,300,400,403,500 等)