使用.NET客户端库调用Admob API时遭遇HttpStatusCode 401未授权错误
解决AdMob API服务账号认证未授权问题
问题根源
你遇到的Google.GoogleApiException(未授权)错误,主要由以下几个常见原因导致:
1. 服务账号未获得AdMob账户授权
服务账号无法直接访问AdMob数据,必须手动将其添加到AdMob账户的权限列表:
- 登录AdMob后台,进入设置 > 访问权限
- 点击添加用户,输入服务账号邮箱,分配对应权限(如只读)
- 保存后等待5-10分钟让权限生效
2. .NET Core下p12证书兼容性问题
.NET Core对p12格式证书的加载存在兼容性问题,建议改用JSON格式的服务账号密钥:
- 登录Google Cloud Console,找到目标服务账号,下载JSON密钥文件
- 替换原有认证代码为:
using Google.Apis.Auth.OAuth2; using Google.Apis.AdMob.v1; using Google.Apis.Services; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { // 加载JSON密钥文件 var credential = GoogleCredential.FromFile("your-service-account-key.json") .CreateScoped(AdMobService.ScopeConstants.AdmobReadonly); // 初始化AdMob服务 var service = new AdMobService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = "Admob API Sample", }); // 异步调用API(避免同步阻塞引发死锁) var accounts = await service.Accounts.List().ExecuteAsync(); } }
3. AdMob API未在Google Cloud Console启用
- 登录Google Cloud Console,搜索AdMob API,确认其状态为已启用
- 若未启用,点击启用按钮并等待生效
4. 作用域配置错误
确保使用的作用域是AdMob API官方支持的:
- 只读权限:
AdMobService.ScopeConstants.AdmobReadonly - 读写权限:
AdMobService.ScopeConstants.Admob
额外提示
- 避免在控制台程序中使用
GetAwaiter().GetResult(),推荐使用async/await异步模式,防止线程死锁 - 确保JSON密钥文件路径正确,且程序拥有读取权限
内容的提问来源于stack exchange,提问作者Thi Pham
相关产品推荐
相关产品推荐

