什么是AppGallery Connect认证服务?

AppGallery Connect认证服务提供了云侧服务和SDK,可以帮助开发者为应用快速构建安全可靠的用户认证系统,以便应用可以对用户进行身份认证。AppGallery Connect认证服务支持多种认证方式,并与其他Serverless服务紧密集成,开发者可以通过简单的规则定义来保护用户的数据安全。
通过集成AppGallery Connect认证服务提供的Auth Service SDK,开发者可以对接包括华为帐号、微信、Facebook、Twitter在内的多种第三方用户认证系统,并将认证凭据上报给AppGallery Connect认证服务云侧。在下次登录时应用便可直接通过AppGallery Connect认证服务获取用户的个人基本信息和其他Serverless服务中的受安全规则保护的数据。
AppGallery Connect认证服务可以极大减少开发者在用户认证系统构建和运维上的投入和成本。

您将建立什么

在本次Codelab中,您将建立一个能够具备使用AppGallery Connect认证服务认证手机号码与匿名账号的Android应用程序,您的应用程序将包含:

您将会学到什么

开发环境及技能要求

运行终端要求

集成AppGallery Connect认证服务,需要完成以下准备工作

具体操作,请按照《AppGallery Connect集成准备》中详细说明来完成。

开通认证服务

  1. 在AppGallery Connect页面点击"我的项目",在项目的应用列表中选择您需要开通认证服务的应用。在导航栏选择"构建 > 认证服务"。如果您为首次使用认证服务,请点击"立即开通"开通服务。
  2. 点击需要启动的认证方式所在行的"启用"。本次Codelab选择启用"手机号码"和"匿名帐号"。

集成SDK

针对Android Studio开发环境,华为提供了maven仓集成方式的SDK包,开发前需集成SDK到您的Android Studio项目中。

  1. 在AppGallery Connect页面点击"我的项目",在项目下的应用列表中选择您需要开通认证服务的的应用。
  2. 在项目设置的"常规"页签下,点击"应用"栏下的"agconnect-services.json"下载配置文件。
  3. 将"agconnect-services.json"文件拷贝到应用级根目录下。
  4. 打开Android Studio应用级build.gradle文件,添加如下代码集成Auth SDK。
    //配置如下地址 apply plugin: 'com.huawei.agconnect' dependencies { //配置如下地址 implementation 'com.huawei.agconnect:agconnect-auth:1.4.1.300' }
  5. 点击界面上的"Sync Now"链接同步已完成的配置。

本次Codelab中您可以在Android Studio工程中创建一个布局页面,参照下图进行UI设计,具备简单的匿名帐号、绑定手机号入口即可。

  1. 点击匿名帐号登录,在登录成功后打印当前用户的uid到按钮下方的TextView中,以便后续对比。
    public void anonymousLogin() { AGConnectAuth.getInstance().signInAnonymously().addOnSuccessListener(new OnSuccessListener<SignInResult>() { @Override public void onSuccess(SignInResult signInResult) { AGConnectUser user = signInResult.getUser(); String uid = user.getUid(); anonymousResult.setText("Uid: " + uid); anonymousResult.setVisibility(View.VISIBLE); Log.i(TAG, "UidValue: " + uid); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { anonymousResult.setText("Anonymous SignIn failed"); anonymousResult.setVisibility(View.VISIBLE); Log.e(TAG, "UidValue: " + e.getMessage()); } }); }
  2. 在EditText中分别输入国家码与手机号,点击获取验证码,SDK向认证服务服务器请求发送验证码,将接收到的验证码输入到验证码EditText中。
    public void sendVerifCode() { 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(); 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(); } }
  3. 点击绑定手机号,利用国家码、手机号和接收到的验证码构造关联账号所需要的凭证。
    String phoneNumber = phoneNumeber.getText().toString().trim(); String countCode = countryCode.getText().toString().trim(); String verifyCode = verfiCode.getText().toString().trim(); //登录逻辑 AGConnectAuthCredential credential = PhoneAuthProvider.credentialWithVerifyCode( countCode, phoneNumber, null, // password, can be null verifyCode);
  4. 调用AGConnectUser.link关联手机号码与当前用户,打印关联手机号码后的用户uid到按钮下方的TextView,与匿名账号登录打印的uid对比,查看是否一致。
    AGConnectAuth.getInstance().getCurrentUser().link(credential).addOnSuccessListener(new OnSuccessListener<SignInResult>() { @Override public void onSuccess(SignInResult signInResult) { String phoneNumber = signInResult.getUser().getPhone(); String uid = signInResult.getUser().getUid(); result.setText("phone number: " + phoneNumber + ", uid: " + uid); result.setVisibility(View.VISIBLE); Log.i(TAG, "phone number: " + phoneNumber + ", uid: " + uid); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { result.setText("Login error, please try again, error:" + e.getMessage()); result.setVisibility(View.VISIBLE); Log.e(TAG, "Login error, please try again, error:" + e.getMessage()); } });
  1. 运行Android Studio工程生成APK包,并在测试手机中安装APK包。
  2. 点击匿名账号登录,观察界面是否可以打印出当前匿名账号用户的uid。
  3. 输入国家码与手机号,点击获取验证码,查看对应手机号是否可以收到认证服务服务器发送的验证码
  4. 输入验证码,点击绑定手机号,观察界面是否可以打印出手机号对应的用户uid。
  5. 对比匿名账号登录与绑定手机号码后打印的uid,查看是否一致。

祝贺您,您已经成功地构建了您的第一个集成AppGallery Connect认证服务的应用程序,并学到了:

AppGallery Connect认证服务的相关API介绍请参见API索引
本Codelab中所用demo源码下载地址如下:

源码下载

已复制代码