如何快速集成Android版Serverless認證服務-手機號碼篇

大部分的應用都需要對用戶的業務訪問進行身份認證,以便爲用戶提供個性化體驗。但是端到端完整構建一套用戶認證系統會面臨很多挑戰。認證服務可以爲應用快速構建安全可靠的用戶認證系統,開發者只需在應用中訪問認證服務的相關能力,而不需要關心雲側的設施和實現。今天就來教大家如何快速集成AGConnect的認證服務中的手機號碼認證方式。

1、在AGC上開通認證服務並啓用手機號碼認證方式:

我的項目 下選擇你的開發項目,在構建下面,找到認證服務服務,點擊開通:

沒有Android項目的話,可以先自己創建一個。開通認證服務後,我們可以看到一列認證方式,找到手機號碼認證方式,點擊右側的啓用按鈕將認證服務啓用。

1.png

2、在Android項目裏集成SDK

a) 集成SDK

1、在項目級的gradle文件中添加華爲Maven,即配置下面標紅的內容

buildscript {
    repositories {
        google()
        jcenter()
        maven {url 'https://developer.huawei.com/repo/'}
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:4.0.1'
        classpath 'com.huawei.agconnect:agcp:1.5.2.300'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven {url 'https://developer.huawei.com/repo/'}
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

2、打開應用級的build.gradle文件,配置好華爲認證服務的SDK,配置下面標紅的內容即可。  注意別落了上面的agcp插件

apply plugin: 'com.android.application'
apply plugin: 'com.huawei.agconnect'
android {…..}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

    implementation 'com.huawei.agconnect:agconnect-auth:1.5.2.300'
}

b) 下載json文件,並且配置默認存儲實例

1、在AGC界面上,選擇 我的項目 -> 項目設置–> 常規 下面,下載agconnect-services.json文件到你的Android項目的app路徑下。

2.png

3、功能開發:

對於手機號碼認證,認證服務SDK提供了兩個階段的操作,一個是註冊,另一個是登錄。這兩個操作都需要用到獲取短信驗證碼的功能,所以認證服務SDK也提供了發送驗證碼的功能:

  1. 發送驗證碼的步驟如下:
    VerifyCodeSettings settings = VerifyCodeSettings.newBuilder()
    
                .action(VerifyCodeSettings.ACTION_REGISTER_LOGIN)
    
                .sendInterval(30) //shortest send interval ,30-120s
    
                .locale(Locale.SIMPLIFIED_CHINESE) //optional,must contain country and language eg:zh_CN
    
                .build();

    首先我們需要創建一個VerifyCodeSettings對象,裏面包含了發送短信的相關設置,包括action,語言等

讀取用戶輸入的國家碼與手機號,調用RequestVerifyCode方法向認證服務服務器請求發送驗證碼,傳入國家碼,手機號以及剛剛我們創建的setting對象

String countCode = countryCode.getText().toString().trim();

    String phoneNumber = phoneNumeber.getText().toString().trim();
    if (notEmptyString(countCode) && notEmptyString(phoneNumber)) {
        Task<VerifyCodeResult> task = PhoneAuthProvider.requestVerifyCode(countCode, phoneNumber, settings);
        task.addOnSuccessListener(TaskExecutors.uiThread(), new OnSuccessListener<VerifyCodeResult>() {
            @Override
            public void onSuccess(VerifyCodeResult verifyCodeResult) {
                Toast.makeText(MainActivity.this, "verify code has been sent.", Toast.LENGTH_SHORT).show();
            }
        }).addOnFailureListener(TaskExecutors.uiThread(), new OnFailureListener() {
            @Override
            public void onFailure(Exception e) {
                Toast.makeText(MainActivity.this, "Send verify code failed.", Toast.LENGTH_SHORT).show();
                Log.e(TAG, "requestVerifyCode fail:" + e);
            }
        });
    } else {
        Toast.makeText(MainActivity.this, "Please enter the phone number and country code", Toast.LENGTH_SHORT).show();
    }

     2. 用戶獲取驗證碼後就可以開始註冊流程了

首先我們需要讀取用戶的輸入並構建一個PhoneUser對象,裏面存放了手機用戶的相關信息,包括手機號,國家碼,驗證碼和密碼。這裏用戶在創建的時候可以選擇是否設置密碼,如果設置則後續在登錄的時候就需要輸入密碼。PhoneUser創建成功後我們就可以調用CreateUser方法創建用戶了

PhoneUser phoneUser = new PhoneUser.Builder()
        .setCountryCode(countryCode)
        .setPhoneNumber(accountNumber)
        .setVerifyCode(verifyCode)
        .setPassword(password)
        .build();
AGConnectAuth.getInstance().createUser(phoneUser).addOnSuccessListener(signInResult -> {
    String phoneNumber = signInResult.getUser().getPhone();
    String uid = signInResult.getUser().getUid();

    Bundle data = new Bundle();
    data.putString("phone", phoneNumber);
    data.putString("uid", uid);
    Intent intent = new Intent(RegisterActivity.this, ImageListActivity.class);
    intent.putExtras(data);
    startActivity(intent);
    finish();
}).addOnFailureListener(e -> {
    Log.e(TAG, "register error, " + e);
    ToastUtils.showToast(RegisterActivity.this, "Register failed. "+e.getMessage());
});

用戶創建完成後,SDK會自動爲用戶進行登錄,無需再調用登錄接口了

       3. 對於非首次使用的用戶,我們就需要進行登錄操作了,基於之前註冊時的設置,登錄分爲兩種,驗證碼登錄和密碼登錄,如果是密碼登錄,我們調用的是CredentialwithPassword來創建一個credential,而驗證碼登錄則是使用CredentialWithVerifyCode來創建credential。而後我們調用SignIn方法傳入這個credential進行登錄的操作。這裏給大家展示一下驗證碼登錄的示例

private void phoneLogin(String phoneAccount, String photoPassword) {
    String countryCode = "86";
    AGConnectAuthCredential credential = PhoneAuthProvider.credentialWithVerifyCode(
            countryCode,
            phoneAccount,
            photoPassword,
            null ); // password, can be null
    AGConnectAuth.getInstance().signIn(credential).addOnSuccessListener(signInResult -> {
       String phoneNumber = signInResult.getUser().getPhone();
        String uid = signInResult.getUser().getUid();
        signInResult.getUser().getToken(true).addOnSuccessListener(new OnSuccessListener<TokenResult>() {

            @Override
            public void onSuccess(TokenResult tokenResult) {
                String token = tokenResult.getToken();
                Log.i("getToken", token);
            }
        });

        Bundle data = new Bundle();

        data.putString("account", this.getString(R.string.phone_user)+phoneNumber.substring(11, 15));
        data.putString("uid", uid);
        ToastUtils.showToast(LoginActivity.this, "Login Success");
        Intent intent = new Intent(LoginActivity.this, ImageListActivity.class);
        intent.putExtras(data);
        startActivity(intent);
        finish();
    }).addOnFailureListener(e -> {
        Log.e(TAG, "Login failed: " + e.getMessage());
        ToastUtils.showToast(LoginActivity.this, "Account Error,Confirm and try again");
    });

}

以上我們就成功接入了Android版本認證服務中的手機賬號認證。如果覺得簡單那就趕快行動起來試試吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章