当我尝试使用YouTube API for Search时,我收到此错误:
发生了服务错误:403:请求未指定任何错误 Android软件包名称或签名证书指纹。请确保 客户端正在发送它们或使用API控制台更新您的 关键限制。
在MainActivity中我有这段代码:
youtube = new YouTube.Builder(new NetHttpTransport(), JSON_FACTORY, new HttpRequestInitializer() {
@Override
public void initialize(HttpRequest httpRequest) throws IOException {
}
}).setYouTubeRequestInitializer(new YouTubeRequestInitializer(apiKey)).setApplicationName("Some Name").build();
在云控制台中,我有一个Android的ApiKey,包名设置和使用keytool命令获得的SHA-1号。
答案 0 :(得分:13)
最后我找到了解决这个问题的方法:)
在Google Developer Console中创建API_KEY并使用"包名称"和" SHA-1证书指纹",您必须在每个youtube api请求中提供这些数据。步骤如下:
1-获取包名:
lint
2-获取SHA-1:
String packageName = context.getPackageName();
3-准备youtube api http标题:
private String getSHA1(String packageName){
try {
Signature[] signatures = context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_SIGNATURES).signatures;
for (Signature signature: signatures) {
MessageDigest md;
md = MessageDigest.getInstance("SHA-1");
md.update(signature.toByteArray());
return BaseEncoding.base16().encode(md.digest());
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
4-根据需要构建youtube api查询: 例如,搜索视频:
youTube = new YouTube.Builder(new NetHttpTransport(), JacksonFactory.getDefaultInstance(), new HttpRequestInitializer() {
@Override
public void initialize(HttpRequest request) throws IOException {
String packageName = context.getPackageName();
String SHA1 = getSHA1(packageName);
request.getHeaders().set("X-Android-Package", packageName);
request.getHeaders().set("X-Android-Cert",SHA1);
}
}).setApplicationName(appName).build();
然后处理返回的搜索结果。
答案 1 :(得分:11)
经过大量的反复试验,最终对我有用的是将 API KEY 限制更改为无,而不是来自API的 Android 经理控制台,只需保存。
执行上述步骤后,我可以使用我的API KEY从我的Android设备进行搜索API调用。
答案 2 :(得分:2)
尝试仔细检查在创建OAuth凭据时是否正确遵循设置。并确保在开发者控制台中启用YouTube数据API。
这是您需要做的steps。
在包名称字段中,输入您的Android应用package name
- 醇>
在终端中,运行Keytool utility至 获取经过数字签名的.apk文件公开的SHA1指纹 证书。
keytool -exportcert -alias androiddebugkey -keystore path-to-debug-or-production-keystore -list -v
- 将SHA1指纹粘贴到请求的表单中。
醇>
我也在这里找到了Google员工回答的SO question,用户必须通过OAuth2。因为Data API v3不支持服务帐户。