如何在 Google API 请求中提供 Header 信息,例如包名称和 SHA1?

How do I supply Header info such as Package Name and SHA1 in Google API request?

我正在尝试使用 dotNet SDK 访问 Google API。当我没有 API 限制时,我可以使用以下代码访问并获取 JSON 。我仍然可以访问 IP 地址限制。但是当我想使用应用程序限制时,我必须提供我已经生成的包名称和 SHA-1。

我只是不知道如何在请求 API 获取时提供此 header 信息。 有几种方法可以实现凭据。通过使用服务帐户,我只需要提供电子邮件和私钥,但我不想使用 OAuth 访问权限。请让我知道是否有最好的实现方式。

var youtubeService = new YouTubeService(new BaseClientService.Initializer()
{
    ApiKey = "****",
    // HttpClientInitializer = credential,
    ApplicationName = "*****"
});

Xamarin 和 Google APIs .net 客户端库

您似乎在尝试将 Google apis .net client library 与 Xamarin. Google apis .net 客户端库不支持 Xamarin。

请看问题Investigate Xamarin support #984

我怀疑您至少需要自己编写所有身份验证代码,然后您才能使某些 class 库正常工作。我的调查使我相信库和 Xamarin 的主要问题是授权实现。

服务帐户和 YouTube

YouTube API 不支持服务帐户身份验证,您需要使用 Oauth2 并以这种方式对您的用户进行身份验证。

所以我找到了提供包名称和 SHA1 的正确方法。现在我可以通过应用程序限制正确获取 Json return。

youtubeService.HttpClient.DefaultRequestHeaders.Add("X-Android-Package", AppInfo.PackageName);
youtubeService.HttpClient.DefaultRequestHeaders.Add("X-Android-Cert","******");

SHA-1 证书指纹在 API 请求中发送时必须是 不带分号的小写字符串 header.

有没有办法在代码中获取 SHA1 而不是简单地将其作为字符串?也请让我知道是否有更好的编码方式 youtubeService.HttpClient.DefaultRequestHeaders.Add

我从 this post 那里得到了线索。