前提:
1.必须有那啥。
2.客户端必须在AndroidMainfest文件添加BILLING权限,格式如下:
<uses-permission android:name="com.android.vending.BILLING" />
流程:
1.在
https://console.cloud.google.com/home/dashboard
打开已有项目。
2.选择API和服务,点击 启用API和服务
3.搜索框输入Google Play Android Developer API ,然后启用服务。
4.开启Auth同意同屏
4.创建web客户端凭据。
点击进去,就能看到客户端ID和客户端秘钥
5.到google play控制后台关联此项目(之前关联过的,可以跳过此步。)
至此基本设置流程已经走完,接下来就是获取code然后换取refresh code的流程。
6.获取code
在浏览器里输入如下url:
https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/androidpublisher&response_type=code&access_type=offline&redirect_uri={凭据页签设置的重定向地址}&client_id={创建的凭据的clientId}
大概是这个样子的:
https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/androidpublisher&response_type=code&access_type=offline&redirect_uri=https://developers.google.com&client_id=111223337-bbbbumlsimo.apps.googleusercontent.com
注意将参数client_id替换你自己的客户端ID.
跳转之后就按照提示选择你的登录邮箱登录,进入之后,url里就替换成了code和scope,大概这个样子的。
https://developers.google.com/?code=4%FSOFAGDB323_4324l_777777&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fandroidpublisher
我们要用的的是code参数,将此参数进行urldecode
7.换取refresh code
使用postman或者curl,或者你熟悉的http工具,创建http请求,postman的请求大致如下:
地址:
https://accounts.google.com/o/oauth2/token
请求方式:post
参数:
grant_type=authorization_code
code=获取到的code(需要看看code中是否有%号,如果有需要urldecode)
client_id=创建api项目是的clientId(客户端ID)
client_secret=创建api项目时的clientSecret(客户端密钥)
redirect_uri=创建api项目时的重定向地址
至此就可以换取到refresh token 这个要自己保存起来,用来定时更新access_token.refresh token基本是不变的,除非你重新再走一遍上面的流程,刷新了refresh token。
如果此处返回
{
"error": "invalid_grant",
"error_description": "Bad Request"
}
应该是你上一步获取的code过期了,重新执行一下第6步,获取新的code替换下就好。
8.代码逻辑定时刷新acces token。
返回的access token有效期是1个小时,所以要定时刷新,请求刷新的逻辑大致是这个样子的:
地址:
https://accounts.google.com/o/oauth2/token
请求方式:post
参数:
grant_type=refresh_token
refresh_token=刚刚获取到的refreshToken
client_id=创建api项目是的clientId(客户端ID)
client_secret=创建api项目时的clientSecret(客户端密钥)
LUA代码:
local httpc = http.new()
local params = "grant_type=refresh_token&refresh_token="..refresh_token.."&client_id="..client_id.."&client_secret="..client_secret
local function req_token()
return httpc:request_uri("https://accounts.google.com/o/oauth2/token", {
method = "POST",
body = params,
headers = {
["Content-Type"] = "application/x-www-form-urlencoded; charset=UTF-8",
}
})
end
local ret, err = req_token()
-- refresh_token 上一步已获取保存的 refresh_token
-- client_id 同上一步使用的
-- client_secret OAuth凭据里的。