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

来源:https://www.cnblogs.com/developer-huawei/archive/2022/04/18/16159934.html
-Advertisement-
Play Games

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


核酸檢測結果包含個人隱私數據且數據量較大,如何在雲端讓核酸檢測人員實現海量數據的安全存儲/查詢成為了核酸檢測數據存儲的首要難題。華為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】核酸檢測結果認證查詢系統-數據導入與查詢

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • linux伺服器網路配置 環境:ubuntu 18.04 配置IP地址 通過ifconfig命令查看網卡信息 chen@ubuntu:~$ ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.16. ...
  • 如果一個任務獲取信號量失敗,該任務就必須等待,直到其他任務釋放信號量。本文的重點是,在Linux中,當有任務釋放信號量之後,如何喚醒正在等待該信號量的任務。 信號量定義如下: struct semaphore { raw_spinlock_t lock; unsigned int count; st ...
  • Centos 7 開機進入選擇系統界面 按e選擇進入系統,一般預設第一個(進入系統過程中可以持續按上下鍵,避免跳過此頁面) 修改Grud 進入界面後往下找,找到以linux16開頭的一串命令,在此行末尾添加 init=/bin/bash 在同一行命令中找到ro 改成 rw 讓用戶有寫許可權,修改密碼用 ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 環境需求 環境配置 ①配置靜態地址、主機名 vi /etc/sysconfig/network-scripts/ifcfg-eth0 BOOTPROTO=static IPADDR=192.168.153.70 NETMASK=255.255.2 ...
  • 針對MIPS指令集本身的講解,主要是它上層的彙編表示和下層的機器表示,以及它的訪存方式、操作數等等。同時也對MIPS指令集日落西山表示感慨。 ...
  • 安裝軟體 pacman -S (軟體名):安裝軟體,若有多個軟體包,空格分隔 pacman -S --needed (軟體名):安裝軟體,若存在,不重新安裝最新的軟體 pacman -Sy (軟體名):安裝軟體前,先從遠程倉庫下載軟體包資料庫 pacman -Sv (軟體名):輸出操作信息後安裝 p ...
  • MySQL 的 GRANT和REVOKE 命令 GRANT - 授權 將指定 操作對象 的指定 操作許可權 授予指定的 用戶; 發出該 GRANT語句的可以是資料庫管理員,也可以是該資料庫對象的創建者; 查詢 查看用戶自己許可權 SHOW GRANTS; 查看其他用戶許可權 SHOW GRANTS FOR ...
  • 我們設計了一款分散式菜單應用,不需要個人去關註公眾號或下載小程式,服務員會提供幾個點單的平板,連接店鋪網路,區域網內通信,這樣大家點單、查看訂單詳情等都不受網路限制。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...