【Codelabs挑戰賽示例講解1】核酸檢測結果認證查詢系統-認證登錄


核酸檢測結果包含個人隱私數據且數據量較大,如何在雲端讓核酸檢測人員實現海量數據的安全存儲/查詢成為了核酸檢測數據存儲的首要難題。華為AppGallery Connect提供了認證服務和雲數據庫服務兩大Serverless服務,可分別實現用戶認證登錄、數據寫入/查詢等基本端雲協同功能,可完美解決核酸檢測數據查詢/存儲問題,並可通過安全的身份驗證功能保證數據的安全性。

《Codelabs挑戰賽——零基礎搭建認證查詢系統》活動正在火熱進行中,分享作品有機會獲得華為freebuds pro無線耳機、華為手環6nfc版、聯盟背包等豐厚大禮,快來參與吧>>https://developer.huawei.com/consumer/cn/forum/topic/0202851788421280176?fid=0102822233052010012

本文從上述需求及業務痛點出發,利用認證服務和雲數據庫兩大Serverless服務,構建了核酸檢測結果認證查詢系統,系統功能及技術選型如下:

開發准備

開通服務

使用AppGallery Connect (簡稱AGC)的服務,需要在AGC管理台上開通(在AGC控制台上可以一站式體驗AGC提供的所有服務)。開通服務之前需要先注冊華為開發者帳號,按照指導文檔即可,在此不再贅述。

本文主要介紹系統的登錄認證功能,故僅介紹對應服務-認證服務在應用中的開通。開通服務前需要創建對應的項目和項目下的應用:

1. 登錄AGC管理台,點擊“我的項目”,選擇“添加項目”,填寫項目名稱。

cke_1075286.png

2. 點擊跳轉到的項目設置頁面的“添加應用”,填寫應用信息后確認。

cke_1118047.png

至此,項目及項目下的應用便創建完成了。

3. 在菜單目錄下找打“構建-認證服務”,點擊右上角“立即開通”,選擇數據處理位置(數據處理位置即為期望的處理您應用及用戶的數據的存儲位置),國內一般選擇“中國”。然后,選擇啟用“手機號碼”這一認證方式。

cke_1237881.png

至此,認證服務已經開通成功了。

集成SDK

AGC以SDK的方式開放了其對華為帳號、游戲帳號等帳號的匿名登錄能力,在開發認證功能之前,需要先集成認證服務SDK,且需要下載AGC提供的JSON文件獲取應用的基本信息和數據處理位置信息等。

1.1 集成SDK

當您在Android Studio中創建項目后,在項目中SDK的集成步驟如下:

1. 在項目級build.gradle文件下配置maven倉和AGC插件地址:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
  repositories {
    google()
    jcenter()
    //maven倉地址
    maven {url 'https://developer.huawei.com/repo/'}
  }
  dependencies {
    classpath "com.android.tools.build:gradle:4.1.0"
    //AGC插件地址
    classpath 'com.huawei.agconnect:agcp:1.6.5.300'
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
  }
}

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

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

2. 在應用級build.gradle文件下配置編譯依賴和認證服務SDK

plugins {
    id 'com.android.application'
    //添加AGC的依賴
    id 'com.huawei.agconnect'
}

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.1"

    defaultConfig {
        applicationId "com.huawei.covid19detection"
        minSdkVersion 19
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    //agc-core的依賴
    implementation 'com.huawei.agconnect:agconnect-core:1.6.5.300'
    implementation 'androidx.appcompat:appcompat:1.3.0'
    implementation 'com.google.android.material:material:1.3.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
    //認證服務sdk
    implementation 'com.huawei.agconnect:agconnect-auth:1.6.5.300'
}

上述SDK或依賴添加完成后,需要點擊右上角“Sync Now”等待同步完成。

1.2 添加配置文件

為了簡化開發者的配置步驟,向開發者提供了保存應用配置信息的配置文件,只需要將配置文件添加到工程目錄並集成AGC插件,AGC插件可以自動將應用信息加載到開發環境中。

1.打開剛剛創建項目的“項目設置”,下載配置文件“agconnect-services.json”。

2.將下載的JSON文件放到Android Studio項目的應用級目錄下,后續集成雲數據庫后JSON文件要重新下載放入。

cke_1441412.png

 

界面設計

簡單來說,使用手機帳號借助認證服務完成登錄認證功能對界面的要求只有以下兩點:具備必要的注冊界面(包括帳號、密碼和驗證碼的輸入)和具備必要的登錄界面即可(此次我使用的是驗證碼登錄,故有賬號輸入和驗證碼輸入即可),示例界面及代碼如下:

注冊界面:

cke_1487763.png

登錄界面:

cke_35243.png

帳號注冊

核酸檢測查詢系統應具備完整的帳號注冊和登錄的功能,保證系統的安全性和可靠性。AGC認證服務提供了手機帳號注冊的功能,注冊成功后即可快速登錄。

1.查閱官方文檔后發現,注冊手機帳號需要先獲取驗證碼,AGC也提供了獲取驗證碼的接口AGConnectAuth.requestVerifyCode,從API文檔來看,填寫國家碼和手機號,點擊“OBTAIN”即可申請。

findViewById(R.id.verification_code_obtain).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        String phoneNumberStr = editText_num.getText().toString().trim();
        VerifyCodeSettings settings = new VerifyCodeSettings.Builder()
            .action(VerifyCodeSettings.ACTION_REGISTER_LOGIN)
            .sendInterval(30)
            .locale(Locale.CHINA)
            .build();
        Task<VerifyCodeResult> task = AGConnectAuth.getInstance().requestVerifyCode(countryCodeStr, phoneNumberStr, settings);
        task.addOnSuccessListener(TaskExecutors.uiThread(), new OnSuccessListener<VerifyCodeResult>() {
            @Override
            public void onSuccess(VerifyCodeResult verifyCodeResult) {
                //驗證碼申請成功
                Log.d(TAG, "onSuccess: message send successfully"+phoneNumberStr);
                Toast.makeText(RegisterActivity.this,"send phone verify code success",Toast.LENGTH_LONG).show();
            }
        }).addOnFailureListener(TaskExecutors.uiThread(), new OnFailureListener() {
            @Override
            public void onFailure(Exception e) {
                //失敗就銷戶
                //AGConnectAuth.getInstance().deleteUser();
                Log.e(TAG, "onSuccess: message send failed"+phoneNumberStr);
                Toast.makeText(RegisterActivity.this, "requestVerifyCode fail:" + e, Toast.LENGTH_SHORT).show();
            }
        });
    }
});

頁面Toast提示“send phone verify code success”即表示驗證碼申請成功,接收到的驗證碼示例如下:

cke_49288.png

在EditText中填寫驗證碼,點擊“Rigister”即可注冊成功。

對應為AGConnectAuth.createUser注冊用戶接口。注冊成功后,請前往登錄頁面登錄。

findViewById(R.id.register).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        String phoneNumberStr = editText_num.getText().toString().trim();
        String vericode = veri_code.getText().toString().trim();
        String rePsd = repsd_txt.getText().toString().trim();
        PhoneUser phoneUser = new PhoneUser.Builder()
            .setCountryCode(countryCodeStr)
            .setPhoneNumber(phoneNumberStr)
            .setVerifyCode(vericode)
            .setPassword(rePsd)
            .build();
        AGConnectAuth.getInstance().createUser(phoneUser)
            .addOnSuccessListener(new OnSuccessListener<SignInResult>() {
            @Override
            public void onSuccess(SignInResult signInResult) {
                //創建帳號成功后,默認已登錄,進入主頁面
                Intent intent = new Intent();
                intent.setClass(RegisterActivity.this, LoginActivity.class);
                startActivity(intent);
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(Exception e) {
                Toast.makeText(RegisterActivity.this, "register fail:" + e, Toast.LENGTH_SHORT).show();
            }
        });
    }
});

登錄認證

注冊成功后,使用AGC認證服務登錄應用的方式有驗證碼登錄和密碼登錄兩種。此處僅實現了驗證碼登錄,密碼登錄實現請參考指導文檔

1. 申請驗證碼涉及接口與帳號注冊一致,參考申請即可。

2. 使用獲取的驗證碼生成手機帳號登錄憑證,由於我們並未設置輸入密碼框,此處password參數填null即可。

AGConnectAuthCredential credential = PhoneAuthProvider.credentialWithVerifyCode(countryCodeStr, phoneNumberStr, null, userVeri);

3. 使用生成的帳號憑證登錄應用,詳見AGConnectAuth.signIn

findViewById(R.id.btn_login).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        String phoneNumberStr = loginText_num.getText().toString().trim();
        String vericode = loginVeri_code.getText().toString().trim();
        AGConnectAuthCredential credential = PhoneAuthProvider.credentialWithVerifyCode(countryCodeStr,phoneNumberStr,"",vericode);
        AGConnectAuth.getInstance().signIn(credential)
            .addOnSuccessListener(new OnSuccessListener<SignInResult>() {
            @Override
            public void onSuccess(SignInResult signInResult) {
                Intent intent = new Intent();
                intent.setClass(LoginActivity.this, DatabaseActivity.class);
                startActivity(intent);
                Log.i(TAG, "onSuccess: login success");
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(Exception e) {}
        });
    }
});

登錄成功后,即可跳轉到應用主界面。主界面展示核酸檢測結果數據,數據的導入及展示我們會在下一篇指導詳細闡述。

總結

使用AGC認證服務通過申請驗證碼的方式進行帳號注冊和登錄整個開發過程主要的工作量在前期的服務開通和SDK集成方面,核心功能代碼開發量不大,SDK大小控制在了MB以內(可參考華為AGC SDK大小大揭秘)。

下篇我們將介紹如何使用AGC的雲數據庫導入/記錄核酸檢測結果數據並進行查詢展示。

參考文檔:

如何使用手機帳號實現應用的注冊登錄:https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-auth-android-phone-0000001053333941#section204291139102115

認證服務注冊和登錄相關API參考:

https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-References/agconnectauth-0000001054482530

開發准備和集成SDK必讀:

https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-get-started-android-0000001058210705

附另一篇示例講解:【Codelabs挑戰賽示例講解2】核酸檢測結果認證查詢系統-數據導入與查詢

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM