Android Studio接谷歌原生登入
目錄
- 前言
- AndroidStudio
- server_client_id
@
前言
準備
近日,公司要求上線海外市場,需要接入海外SDK,首先上架的是GooglePlay,需要先接入GooglePlay登入,這裡我們選擇的接安卓原生,需要手機安裝谷歌三件套,如果沒有安裝好的就去下載一個Go谷歌安裝器,裡面有一鍵安裝。注:“手機必須搭梯子(這裡不讓說,否則稽核不通過)”。
開始
剛開始肯定要先查閱文件,我為此翻閱了不少博文,但是好多文章都說的一知半解的,搞半天也沒頭緒(每個公司都有自己的專案,我們在原專案上開發,註定要多走些路子)。首先,你先確定你是接Google原生登入,還有一種是整合FireBase的(不知道說法對不對),這裡只說前者,後者我也沒做,等後面再說吧。
這裡非常感謝一名在稀土掘金的叫Silence瀟湘夜雨的大佬兩句話就把我的活說明白啦。在這裡我結合他的博文來做一下我工作的詳細記錄。
AndroidStudio
我們開發的專案先匯出安卓,因為我們專案接過好幾個渠道,所以比較亂一點,搞得我也很頭痛,專案裡也有分渠道打包,我看到不是很懂,只有以後再重新弄一下。
首先我們要先匯入Google登入所要用到的庫,在app下的build.gradle裡面的的dependencies裡配置一下Google服務
implementation 'com.google.android.gms:play-services-auth:16.0.0'
然後在最上面點選Sync Now (有問題可以降一個版本,比如開發文件說要用17.0.0我的專案就適配不了用的是16.0.0)
然後我們就可以在MainActivity裡面開始寫我們的程式碼了。
先宣告一個 private GoogleSignInClient mGoogleSignInClient;
在onCreate()方法裡寫上
//TODO Google登入 //配置登入以請求使用者的ID,電子郵件地址和基本配置檔案.ID和基本配置檔案包含在DEFAULT_SIGN_IN中. GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .requestIdToken(Constants.GoogleAppID) .build(); //使用gso指定的選項構建一個GoogleSignInClient. mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
Constants.GoogleAppID裡面配置的是server_client_id,(server_client_id怎麼獲取下面會說明)
Google登入肯定有按鈕,用按鈕事件呼叫googleLogin()方法
public void googleLogin() {
Intent signInIntent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(signInIntent, 1000);
}
上面兩行的程式碼是調起Google賬號登入的介面
授權成功後肯定要回調,在onActivityResult()方法接收回調,這裡面我寫了兩種方式,用哪一種都可以。這裡handleSignInResult方法過載了一下,用一個就好。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1000) {
//方式一
// GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
// handleSignInResult(result);
//方式二
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
handleSignInResult(task);
}
}
private void handleSignInResult(GoogleSignInResult result){
Constants.Log("handleSignInResult方法呼叫----" + result.isSuccess());
if (result.isSuccess()) {
GoogleSignInAccount account = result.getSignInAccount();
//account裡可以直接獲取到ID,name,和頭像
Constants.Log( "id--------" + account.getId() + "----name----" + account.getDisplayName() + "---photo--" + account.getPhotoUrl());
String idToken = account.getIdToken();
Constants.Log("Token-----"+idToken+"-----");
}
}
private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
try {
GoogleSignInAccount account = completedTask.getResult(ApiException.class);
//account裡可以直接獲取到ID,name,和頭像
Constants.Log( "id--------" + account.getId() + "----name----" + account.getDisplayName() + "---photo--" + account.getPhotoUrl());
String idToken = account.getIdToken();
Constants.Log("Token-----"+idToken+"-----");
} catch (ApiException e) {
Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
Constants.Log("錯誤資訊為"+e.toString());
}
}
這裡面的Token值驗證賬號的時候會用的到。至於還要用到什麼資料你就和後臺溝通一下,直接傳過去就好。
可見,接入谷歌登入還是很簡單的,明白了流程,一會就弄好,個人感覺主要是不知道怎麼弄API後臺的設定
server_client_id
先弄一下OAuth同意螢幕的描述,按照你專案填寫
再建立一下OAuth客戶端id,其中
這個就是server_client_id,傳入專案就可以啦。
如果有什麼問題的話下方給我留言,我看到的話就會盡快回復的哦
現在沒寫完的,後面待寫................