Android应用通过开发者邮箱访问Google Developer API及Token生成疑问
理解Google Android Publisher OAuth2授权流程:从授权码到Token
我来帮你把这个OAuth2授权的流程掰碎了讲清楚——你已经搞定Client ID了,剩下的就是走授权码流程来拿到能调用API的Token,这是服务端/后台应用访问Google API的标准玩法,我一步步给你拆解:
一、先搞懂你提到的授权URL里的每个参数
你贴的那个授权URL其实是用来触发用户授权的核心入口,每个参数都不能乱填:
scope=https://www.googleapis.com/auth/androidpublisher:指定你的应用要获取的权限,这个是Android Publisher API必须的,不能改response_type=code:告诉Google你要返回授权码(authorization code),而不是直接返回Token(这是安全的做法,授权码只能用一次)access_type=offline:这个很关键!它表示你需要刷新Token(refresh_token),因为access_token有效期只有1小时,有了refresh_token就能在后台自动刷新,不用每次都让用户手动授权redirect_uri=...:这个必须和你创建Client ID时在Google Cloud控制台里填的完全一致(包括http/https、结尾的斜杠都不能差)。如果是本地测试,你可以填http://localhost:8080或者桌面应用专用的urn:ietf:wg:oauth:2.0:oob(这种会让Google直接在页面显示授权码,你手动复制就行)
二、获取授权码的步骤
- 把你的Client ID加到授权URL里,拼成完整的链接:
https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/androidpublisher&response_type=code&access_type=offline&redirect_uri=YOUR_REDIRECT_URI&client_id=YOUR_CLIENT_ID - 用浏览器打开这个链接,用你的开发者邮箱账号登录(必须是拥有Android Publisher权限的账号)
- 页面会提示你授权你的应用访问Android Publisher数据,点击“允许”
- 之后Google会跳转到你指定的
redirect_uri:- 如果是Web回调,URL参数里会带
code=xxx,你需要在后端代码里捕获这个code - 如果是
urn:ietf:wg:oauth:2.0:oob,页面会直接显示一串授权码,复制下来就行
- 如果是Web回调,URL参数里会带
三、用授权码换Token
拿到授权码后,你需要调用Google的Token接口来换取真正能用的access_token和refresh_token,这里用curl举个例子(你也可以用你熟悉的语言发POST请求):
curl -X POST https://oauth2.googleapis.com/token \ -d client_id=YOUR_CLIENT_ID \ -d client_secret=YOUR_CLIENT_SECRET \ -d code=刚才拿到的授权码 \ -d redirect_uri=YOUR_REDIRECT_URI \ -d grant_type=authorization_code
请求成功后,你会得到类似这样的JSON响应:
{ "access_token": "ya29.a0AfH6SMB...", "expires_in": 3599, "refresh_token": "1//0g...", "scope": "https://www.googleapis.com/auth/androidpublisher", "token_type": "Bearer" }
access_token:用来调用Android Publisher API的凭证,有效期1小时refresh_token:当access_token过期时,用它来获取新的access_token(只要用户不撤销授权,这个refresh_token可以一直用)
四、后续维护Token
当access_token过期后,你可以用refresh_token来刷新,不用再走授权流程:
curl -X POST https://oauth2.googleapis.com/token \ -d client_id=YOUR_CLIENT_ID \ -d client_secret=YOUR_CLIENT_SECRET \ -d refresh_token=你的refresh_token \ -d grant_type=refresh_token
这个请求会返回新的access_token和过期时间。
几个容易踩的坑
redirect_uri必须和控制台里的完全匹配,差一个字符都会报错- 授权码只能用一次,用过就失效,所以要尽快换取Token
- 一定要保存好
client_secret和refresh_token,这是敏感信息,不能泄露给前端或用户 - 如果是后台服务,建议用“服务端应用”类型的Client ID,不要用移动端的
内容的提问来源于stack exchange,提问作者lavanya velu
相关产品推荐
相关产品推荐

