调用androidpublisher接口报401权限不足问题咨询
问题描述
我已完成如下配置操作:
- 创建GCP项目
- 在GCP项目中启用Google Play Android Developer API
- 创建服务账号并授予
Service Account Admin与Service Account User权限 - 为服务账号创建json密钥,下载json文件后在后端服务器完成配置
- 在Google Play console中关联已创建的GCP项目
- 在Google Play console中启用Play Android Developer API
- 为服务账号授予财务权限
- 将服务账号添加至licensing test名单
参考网络公开实践方案操作,后续补充操作:
- 编辑更新in-app product/subscription信息
- 等待超过24小时后多次尝试调用仍失败,不确定是否需要继续等待权限生效。
完成配置后,我通过后端服务器调用接口:androidpublisher.SubscriptionPurchasesService.Get
调用后返回401错误,具体错误信息如下:
{ "msg":{ "error":{ "code":401, "message":"The current user has insufficient permissions to perform the requested operation.", "errors":[ { "message":"The current user has insufficient permissions to perform the requested operation.", "domain":"androidpublisher", "reason":"permissionDenied" } ] } } }
相关操作记录:
- 在GCP项目中创建服务账号
- 创建json密钥
- Google Play console关联GCP项目
- Google Play console中显示的服务账号
- 在Google Play console为服务账号授予财务权限
- 将服务账号添加至licensing test名单
- 通过后端服务器访问API
- 返回401错误
现咨询该问题的产生原因及有效解决方案。
解决方案
该401权限不足错误是Google Play Developer API对接的高频问题,按以下优先级逐项排查即可定位解决:
- 权限授予层级错误
仅授予全局财务权限无法满足接口调用要求,调用订阅/内购查询接口需要给服务账号授予查看应用信息、查看财务数据、管理订单和订阅三类权限。操作路径:Google Play Console -> 用户和权限 -> 找到对应服务账号 -> 除了勾选全局权限,必须在应用权限列表中选中你要操作的目标App,单独给该App勾选上述权限,漏选应用级权限是该错误的第一大诱因。 - API关联项目不匹配
两个API启用入口必须对应同一个项目:GCP侧启用Google Play Android Developer API的项目,必须和Google Play Console关联的GCP项目完全一致,跨项目授权不会生效。 - 授权流程未走完
关联GCP项目后,需要进入Google Play Console的API访问页面,查看「服务账号」列表中对应账号的状态,如果显示「待授权」,必须点击右侧的「授予访问权限」按钮走完授权流程,仅把服务账号添加到用户列表不会自动开通API调用权限。 - 缓存导致权限不生效
官方标注权限最长生效周期为36小时,而非24小时,改完权限后可通过两个操作跳过缓存等待:- 重新生成一份新的服务账号JSON密钥,替换服务器上存储的旧密钥
- 重启后端服务,清空本地缓存的OAuth2鉴权token,Google接口返回的有效token默认缓存1小时,旧token携带旧权限信息,会持续报错直到过期。
- 参数错误触发误报
Google Play Developer API的报错提示存在误导性,当调用SubscriptionPurchasesService.Get时传入的packageName(大小写敏感)、subscriptionId与后台配置不一致,或purchaseToken存在截断、多余转义时,也会返回权限不足的401错误,而非参数错误提示,排查时需要先确认三个入参与客户端上报、后台配置完全一致。
如果以上步骤全部确认无误仍报错,直接删除原有服务账号,新建一个服务账号重新走一遍全流程授权即可,旧服务账号偶发出现权限同步异常的问题,不需要等待超过48小时。
内容的提问来源于stack exchange,提问作者Lxw
相关产品推荐
相关产品推荐

