@
前言
准備
近日,公司要求上線海外市場,需要接入海外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,傳入項目就可以啦。
如果有什么問題的話下方給我留言,我看到的話就會盡快回復的哦
現在沒寫完的,后面待寫....................