主頁 > 移動端開發 > 【Codelabs挑戰賽示例講解1】核酸檢測結果認證查詢系統-認證登錄

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

2022-04-19 08:39:21 移動端開發

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

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/458579.html

標籤:Android

上一篇:技術傳遞溫度,HMS Core手語服務走進暖心課堂

下一篇:招募兼職軟體開發、程式定制人員

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more