Youtube API密钥

时间:2016-09-17 05:19:05

标签: android android-studio youtube-api youtube-data-api android-youtube-api

当我尝试使用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号。

3 个答案:

答案 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 经理控制台,只需保存。 enter image description here

执行上述步骤后,我可以使用我的API KEY从我的Android设备进行搜索API调用。

答案 2 :(得分:2)

尝试仔细检查在创建OAuth凭据时是否正确遵循设置。并确保在开发者控制台中启用YouTube数据API。

这是您需要做的steps

  
      
  1. 包名称字段中,输入您的Android应用package name

  2.   
  3. 在终端中,运行Keytool utility至   获取经过数字签名的.apk文件公开的SHA1指纹   证书。

  4.   

keytool -exportcert -alias androiddebugkey -keystore path-to-debug-or-production-keystore -list -v

  
      
  1. 将SHA1指纹粘贴到请求的表单中。
  2.   

我也在这里找到了Google员工回答的SO question,用户必须通过OAuth2。因为Data API v3不支持服务帐户。