Created
December 22, 2017 10:04
-
-
Save doraeminemon/13561f00fadc1e696e5d0c0a97e37a52 to your computer and use it in GitHub Desktop.
How to get user info with birthday from GoogleSignIn
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Về cơ bản, đầu tiên có được access sau khi sử dụng Gooogle SDk | |
// Trong Google SDK cần 1 sô thành phần để tiếp tục : | |
// - user.authentication.accessToken | |
// - user.userID | |
// - user.authentication.idToken | |
/// | |
/// Dùng để lấy tât cả mọi trương trừ DOB | |
/// | |
struct TokenInfo : TargetType { | |
let token : String | |
let baseURL: URL = URL(string:"https://www.googleapis.com")! | |
let path = "oauth2/v3/tokeninfo" | |
let method = Method.post | |
let parameterEncoding: ParameterEncoding = JSONEncoding() | |
var parameters: [String : Any]? { | |
return ["id_token": token] | |
} | |
let task : Task = .request | |
} | |
/// | |
/// Cân truyền accessToken vào 'Authorization' Header dươi dạng 'Bearer' + token | |
/// Dùng để lấy một số thông tin có đi kèm DOB | |
/// | |
struct UserInfo : APITargetType { | |
let id : String | |
let parameterEncoding: ParameterEncoding = JSONEncoding() | |
let baseURL: URL = URL(string:"https://www.googleapis.com")! | |
let method = Method.get | |
var path : String { | |
return "plus/v1/people/\(id)" | |
} | |
let params: [String : Any]? = nil | |
let task: Task = .request | |
} | |
/// Gộp 2 request vào, lấy giá trị trả về rồi combine thành Object GoogleTokenInfo để tống lên server lúc register | |
let userID = user?.userID ?? "" | |
let googleAPIProvider = APIProvider(plugins : [AuthPlugin { user.authentication.accessToken! }]) | |
let googleRequestUserInfo = googleAPIProvider.request(MultiTarget(GoogleTarget.UserInfo(id: userID))) | |
.mapObject(type: GooglePlusUserInfo.self) | |
let googleRequestTokenInfo = API.request(target: GoogleTarget.TokenInfo(token: user!.authentication!.idToken!)) | |
.mapObject(type: GoogleTokenInfo.self) | |
let googleLoginAttempt = Observable.combineLatest(googleRequestUserInfo, googleRequestTokenInfo) { userInfo, tokenInfo -> GoogleTokenInfo in | |
return GoogleTokenInfo(email : tokenInfo.email, | |
name : tokenInfo.name, | |
avatar : tokenInfo.avatar, | |
birthday: userInfo.birthday) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment