首先要申請API KEY跟Oauth要用的Client ID
Oauth2的驗證url記錄
https://accounts.google.com/o/oauth2/auth?client_id=<你的CLIENTID>.apps.googleusercontent.com&redirect_uri=http://localhost&scope=https://www.googleapis.com/auth/youtube&response_type=code&access_type=offline403的爆炸
用webview直接丟Oauth2的連結,google會爆給你不允許存取的403 (disallowed_user-agent)
所以改用NSURLSession來處理request,在把結果丟給webview來呈現
成功後你會取得一個auth code: 例如
http://localhost/oauth2callback?code=
如何取得Access Token (Exchange authorization code for refresh and access tokens)
拿到code之後就要去換access token了,換打以下網址
POST /o/oauth2/token HTTP/1.1 Host: accounts.google.com Content-Type: application/x-www-form-urlencoded code=4/ux5gNj-_mIu4DOD_gNZdjX9EtOFf& client_id=1084945748469-eg34imk572gdhu83gj5p0an9fut6urp5.apps.googleusercontent.com&client_secret=hDBmMRhz7eJRsM9Z2q1oFBSe&redirect_uri=http://localhost/oauth2callback& grant_type=authorization_code
以下二點注意:
1. 請注意content-type用錯會噴400的invalid request給你看,另外post送出去的參數未正確用url encode也會無法正常解析。
2. iOS OAuth是不用帶 client_secret才對,因為只有web 應用程式才會派發client_secret
成功的話就會拿到以下的東西
{ "access_token" : "ya29.AHES6ZTtm7SuokEB-RGtbBty9IIlNiP9-eNMMQKtXdMP3sfjL1Fc", "token_type" : "Bearer", "expires_in" : 3600, "refresh_token" : "1/HKSmLFXzqP0leUihZp2xUt3-5wkU7Gmu2Os_eBnzw74" }
記得把Access Token跟Refresh Token保存好,不然逾時後沒辦法重新刷token,又要跑一次Oauth的流程
打以下的api會跟你講api token的狀況
https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=
{
"issued_to": "xxxxxxxxx.apps.googleusercontent.com",
"audience": "xxxxxxxxx.apps.googleusercontent.com",
"scope": "https://www.googleapis.com/auth/youtube",
"expires_in": 3578,
"access_type": "offline"
}
通常會遇到content-type送不對的話會噴
Code was already redeemed.
如果token失效再呼叫會噴
驗證token有沒有逾期
打以下的api會跟你講api token的狀況
https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=
{
"issued_to": "xxxxxxxxx.apps.googleusercontent.com",
"audience": "xxxxxxxxx.apps.googleusercontent.com",
"scope": "https://www.googleapis.com/auth/youtube",
"expires_in": 3578,
"access_type": "offline"
}
一些遇到爆炸的情況
Invalid request通常會遇到content-type送不對的話會噴
Code was already redeemed.
如果token失效再呼叫會噴
沒有留言:
張貼留言
留個話吧:)