?Google的第三方登錄摸航,簡單的記錄一下笤昨。
配置 Google Cloud Platform
首先訪問 Google Cloud Platform 控制臺
地址:https://console.cloud.google.com/projectselector2/home
OAuth 同意屏幕
在左邊的側邊欄中選擇?API和服務
網域驗證
憑據
客戶端ID用戶用戶登錄搔驼,密鑰用于服務器驗證Token是否有效以及獲取用戶信息
獲取登錄地址
Google的文檔其實寫的很清楚了:傳送門
生成臨時的用戶ID主要是為了識別觸發(fā)OAuth登錄的用戶。這里最好還是后端服務器生成。
主要說的是如何生成Google的登錄鏈接瞳筏,下面是一個生成好的IdToken 給到服務端 大功告成。
eyJhbGciOiJSUzI1NiIsImtpZCI6ImQ0ZTA2Y2ViMjJiMDFiZTU2YzIxM2M5ODU0MGFiNTYzYmZmNWE1OGMiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI1ODQxNzk2NTc0MzgtcGVmNW9kb2dlbmppMGhuNDR0dHQ4dmdjN2dxcWgxbXMuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI1ODQxNzk2NTc0MzgtaGw5ZHQwZGR1a2VtYTJwdWwwazlhbG10aWh0NHZyZ24uYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTgzNzU4NzAzMjI2NjExMDA3OTAiLCJlbWFpbCI6ImFzNzUyNDk3NTc2QGdtYWlsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJpYXQiOjE2Mzc4Mjg5MTUsImV4cCI6MTYzNzgzMjUxNX0.C4rlebGZusEO79lapKm4vZsWLaxpY8iG8iqmVF_JhiCwmYEYdqhYdtujeZ7P_og_8ldExQ9GuJO0mSWf-jkjPZyVO5zDVApSr3dgJ8tMR5_vLLQwFl0KCjTemwUvKmbKssO67y8xOqhwvqG53Ss0FK8PpIOM0m6bUlI8fEhrqmBRynrXEl8VwVZC9jRq4q-iMmG9svq8V_pmkvMnFxnyy3uVpjIYP8qpcaPpqk7lMle7MGsrBzCYuOaT3aPVb3LNnTDsQNRZt-PHfcOiijb7rTW0yTI1XJh23tb3zLg_jmeqjDP_tlDSiUk1_c2Rb5zbPAQj_6MJnpbsyt362NqgCw
后端GET這個地址牡昆,獲取用戶的郵箱:?
https://www.googleapis.com/oauth2/v2/userinfo
?access_token=ya29.a0AfH6SMB3rFcyq-d8NW3IlCriJvdpPCNBqZvnoKrrcDipoP9A234KtdKpDdXbyzOVp_1PbLbyIMjO5Hx5c_vm0A9PWDTIfXfmwVsugPlUp8VcRCNHnsXVwds2GT
通過令牌可以獲取用戶的信息姚炕,比如郵箱,昵稱丢烘,頭像等等
{
? "id": "XXXXXXXXXXXXXXXXX",
? "email": "dingzd1995@gmail.com",
? "verified_email": true,
? "picture": "https://lh3.googleusercontent.com/a-/AOh14GjW7-O4rqIeKtGB_rorN6KIDYd6fRzaEaPYPoKV=s96-c"
}
OK柱宦,到這步,就直接根據郵箱和id播瞳,來建立對應的賬號關系就可以了~
關鍵代碼
private void onGoogleSignInClicked() { Intent intent = mSignInClient.getSignInIntent(); startActivityForResult(intent, RC_SIGN_IN); }
if (requestCode ==RC_SIGN_IN) {
Task task = GoogleSignIn.getSignedInAccountFromIntent(data);
? ? try {
GoogleSignInAccount account = task.getResult(ApiException.class);
? ? ? ? Toast.makeText(this ,? account.getIdToken(),Toast.LENGTH_LONG).show();
? ? ? ? String s = account.getIdToken();
? ? ? ? ((EditText) findViewById(R.id.edit_text_email)).setText( s);
? ? }catch (ApiException e) {
Toast.makeText(this , "失敗" ,Toast.LENGTH_LONG).show();
? ? ? ? e.printStackTrace();
? ? }
}