我制作了一个具有搜索功能的应用,该功能设置为从我创建的自定义 Google 搜索中进行搜索(使用他们的自定义搜索服务)。它没有 Java 库,因此我使用 Retrofit 来请求 REST API ( https://developers.google.com/custom-search/json-api/v1/using_rest ),但是我遇到了问题:
Retrofit 工作正常,但请求始终返回 400 错误,并包含以下信息: "domain": "usageLimits", "reason": "keyInvalid"
我在请求中使用的 API key 是 Google 开发控制台中我的项目的 Android 应用程序 key 。但我认为这不起作用,因为 Retrofit 不会让 Google 知道我正在从我的应用程序发送请求?
对于这种情况有哪些可能的解决方法?
谢谢。
编辑:我已确认我的 APK 已使用正确的 key 进行签名,并且我检查了用于生成 apikey 的 SHA1。我已经生成了大约 3 或 4 次新的 api key ,看看是否可以解决问题。
编辑2:
我成功了!
您不创建 Android API key (它不适用于此),而是创建浏览器 API key ,在其中将允许的引用者设置为全部(可能存在危险)。
您可以使用该 API key 来通过 Retrofit 进行请求。我觉得谷歌应该注意到这一点:毫无疑问,很多人会认为Android应用程序? -> Android API key - 但这只是 Google 为 API 制作了库时的情况。
最佳答案
听起来您只需将 key 作为查询参数传递到休息界面即可。
例如,如果您想执行下面的 GET 命令
获取 https://www.googleapis.com/customsearch/v1?key=INSERT_YOUR_API_KEY&cx=017576662512468239146:omuauf_lfve&q=lectures
然后你的界面将像这样声明
public interface RestApi {
GET ("/customsearch/v1")
Response customSearch(@Query("key") String key, @Query("cx") String cx, @Query("q") String query);
}
然后你可以像这样执行调用
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("https://www.googleapis.com")
.build();
RestApi restApi = restAdapter.create(RestApi.class)
restApi.customSearch("INSERT_YOUR_API_KEY", "017576662512468239146:omuauf_lfve", "lectures");
现在,请不要忘记将 INSERT_YOUR_API_KEY 替换为您从 Google Dev Console 生成的 key 。
关于android - 通过 Google 的 REST API 使用 Retrofit 进行 Google 的自定义搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24933875/