Skip to content

Instantly share code, notes, and snippets.

@doraeminemon
Created December 22, 2017 10:04
Show Gist options
  • Save doraeminemon/13561f00fadc1e696e5d0c0a97e37a52 to your computer and use it in GitHub Desktop.
Save doraeminemon/13561f00fadc1e696e5d0c0a97e37a52 to your computer and use it in GitHub Desktop.
How to get user info with birthday from GoogleSignIn
// 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