Android 使用谷歌';s通过谷歌定制搜索';s REST API

Android 使用谷歌';s通过谷歌定制搜索';s REST API,android,rest,google-api,retrofit,Android,Rest,Google Api,Retrofit,我制作了一个应用程序,它有一个搜索功能,设置为从我制作的自定义谷歌搜索(使用他们的自定义搜索服务)进行搜索。这没有Java库,所以我使用REFORMING来请求使用REST API(),但是我遇到了一个问题: 改装工作正常,但请求始终返回400错误,并包含以下信息: “域”:“usageLimits”,“原因”:“keyInvalid” 我在请求中使用的API键是googledev控制台中我的项目的Android应用程序键。但我认为这不起作用,因为改型不会让谷歌知道我正在从我的应用程序发送请求

我制作了一个应用程序,它有一个搜索功能,设置为从我制作的自定义谷歌搜索(使用他们的自定义搜索服务)进行搜索。这没有Java库,所以我使用REFORMING来请求使用REST API(),但是我遇到了一个问题:

改装工作正常,但请求始终返回400错误,并包含以下信息: “域”:“usageLimits”,“原因”:“keyInvalid”

我在请求中使用的API键是googledev控制台中我的项目的Android应用程序键。但我认为这不起作用,因为改型不会让谷歌知道我正在从我的应用程序发送请求

对于这种情况,可能的解决方法是什么

谢谢

编辑:我已经确认我的APK是用正确的密钥签名的,并且我将用于生成apikey的SHA1检查的所有内容三倍于五倍。我已经生成了一个新的api密钥大约3到4次,看看它是否能修复

编辑2: 我成功了

您不制作Android API键(它不适用于此),而是制作浏览器API键,在该键中,您将允许的引用设置为all(潜在危险)


您可以使用该API密钥请求使用改装。我觉得谷歌应该注意到这一点:毫无疑问,许多人会认为Android应用程序?->Android API密钥-但只有当Google为API创建了一个库时,才会出现这种情况。

听起来您只需要将密钥作为查询参数传递到rest界面

例如,如果您想执行下面的GET命令

GEThttps://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");

现在别忘了用从Google开发控制台生成的密钥替换INSERT\u YOUR\u API\u密钥。

我从一开始就让我的应用程序安装程序执行此操作,但响应总是相同的错误。请确保API密钥正确。还要更改RestAdapter上的日志级别(.setLogLevel(RestAdapter.LogLevel.FULL)),并验证最终url是否有效。另外,我建议您使用不同的rest客户端,并尝试使用相同的值调用,以验证是否得到相同的结果。我已经“部分解决”了我的问题,我现在使用的是浏览器api密钥(允许各种引用),但现在Google告诉我我的密钥已过期(不是)看来这把钥匙或是怎么用的有问题。你能生成一个新的吗?不幸的是,我以前从未真正使用过RESTAPI,我对它不熟悉,所以我只能做到这一点。也许其他人能帮上忙。我已经通过试验开发控制台解决了自己的问题(请参阅我的编辑)。谢谢你的帮助!:)