关于android:Codelabs挑战赛示例讲解1核酸检测结果认证查询系统认证登录

2次阅读

共计 6803 个字符,预计需要花费 18 分钟才能阅读完成。

核酸检测后果蕴含个人隐私数据且数据量较大,如何在云端让核酸检测人员实现海量数据的平安存储 / 查问成为了核酸检测数据存储的首要难题。华为 AppGallery Connect 提供了认证服务和云数据库服务两大 Serverless 服务,可别离实现用户认证登录、数据写入 / 查问等根本端云协同性能,可完满解决核酸检测数据查问 / 存储问题,并可通过平安的身份验证性能保证数据的安全性。

《Codelabs 挑战赛——零根底搭建认证查问零碎》流动正在炽热进行中,分享作品有机会取得华为 freebuds pro 无线耳机、华为手环 6nfc 版、联盟背包等丰富大礼,快来参加吧>>https://developer.huawei.com/…

本文从上述需要及业务痛点登程,利用认证服务和云数据库两大 Serverless 服务,构建了核酸检测后果认证查问零碎,零碎性能及技术选型如下:

开发筹备
开明服务
应用 AppGallery Connect(简称 AGC)的服务,须要在 AGC 治理台上开明(在 AGC 管制台上能够一站式体验 AGC 提供的所有服务)。开明服务之前须要先注册华为开发者帐号,依照领导文档即可,在此不再赘述。

本文次要介绍零碎的登录认证性能,故仅介绍对应服务 - 认证服务在利用中的开明。开明服务前须要创立对应的我的项目和我的项目下的利用:

1. 登录 AGC 治理台,点击“我的我的项目”,抉择“增加我的项目”,填写项目名称。


2. 点击跳转到的我的项目设置页面的“增加利用”,填写利用信息后确认。

至此,我的项目及我的项目下的利用便创立实现了。

3. 在菜单目录下找打“构建 - 认证服务”,点击右上角“立刻开明”,抉择数据处理地位(数据处理地位即为冀望的解决您利用及用户的数据的存储地位),国内个别抉择“中国”。而后,抉择启用“手机号码”这一认证形式。

至此,认证服务曾经开明胜利了。
集成 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 文件要从新下载放入。

界面设计
简略来说,应用手机帐号借助认证服务实现登录认证性能对界面的要求只有以下两点:具备必要的注册界面(包含帐号、明码和验证码的输出)和具备必要的登录界面即可(此次我应用的是验证码登录,故有账号输出和验证码输出即可),示例界面及代码如下:

注册界面:

登录界面:

帐号注册
核酸检测查问零碎应具备残缺的帐号注册和登录的性能,保证系统的安全性和可靠性。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”即示意验证码申请胜利,接管到的验证码示例如下:


在 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 认证服务登录利用的形式有验证码登录和明码登录两种。此处仅实现了验证码登录,明码登录实现请参考[领导文档](https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-auth-android-phone-0000001053333941#section113465541619)

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/…

认证服务注册和登录相干 API 参考:

https://developer.huawei.com/…

开发筹备和集成 SDK 必读:

https://developer.huawei.com/…

正文完
 0