当前位置:   article > 正文

快速集成认证服务-HarmonyOS平台_agconnect-core

agconnect-core

  我们可以通过在应用中集成认证服务SDK来轻松快速地向用户推出注册、登录等相关功能。下面来介绍如何在HarmonyOS平台集成使用AGC认证服务。

集成内容

通过harmony sdk插件集成AGC 验证服务,在AGC上开启认证服务,并添加手机验证与邮箱验证两种方式,同时端侧集成SDK调用后由AGC发送验证码至手机或邮箱,输入验证码和密码后完成用户注册。

集成准备

  1. 安装DevEco Studio开发工具,并熟悉Harmony应用的开发流程
  2. AGC创建工程并开通服务。

        a)在AGC创建Harmony应用并开通验证服务。

cke_202.png

cke_203.png

启用手机和邮箱验证

cke_204.png

3、DevEco Studio中创建Harmony工程

     a)打开IDE工具,选择File-New-New project,选择Java语言编译模板后,点击Next进入创建工程配置界面。

cke_205.png

注意选择应用(Application),包名和AGC创建的应用包名相同。

cke_206.png

  b)将agconnect-services.json文件拷贝到项目的entry模块的目录下

cke_207.png

c)配置Maven仓地址和AGC插件地址。

  打开harmony项目级build.gradle文件。

  在allprojects ->repositories里面配置maven仓地址。

  在buildscript->repositories中配置maven仓地址。

  在buildscript->dependencies中配置AppGallery Connect插件地址。

测试环境需要配置内部私仓地址,正式环境需要配置外部正式仓。

  1. buildscript {
  2. repositories {
  3. maven {
  4. url 'https://repo.huaweicloud.com/repository/maven/'
  5. }
  6. maven {
  7. url 'https://developer.huawei.com/repo/'
  8. }
  9. maven { url 'http://language.cloudartifact.dgg.dragon.tools.huawei.com/artifactory/product_maven' }
  10. maven { url 'http://szg1.artifactory.inhuawei.com/artifactory/sz-maven-public/' }
  11. jcenter()
  12. }
  13. dependencies {
  14. classpath 'com.huawei.ohos:hap:2.4.4.2'
  15. classpath 'com.huawei.ohos:decctest:1.2.4.0'
  16. classpath 'com.huawei.agconnect:agcp-harmony:1.2.0.200'
  17. }
  18. }
  19. allprojects {
  20. repositories {
  21. maven {
  22. url 'https://repo.huaweicloud.com/repository/maven/'
  23. }
  24. maven {
  25. url 'https://developer.huawei.com/repo/'
  26. }
  27. maven { url 'http://language.cloudartifact.dgg.dragon.tools.huawei.com/artifactory/product_maven' }
  28. maven { url 'http://szg1.artifactory.inhuawei.com/artifactory/sz-maven-public/' }
  29. jcenter()
  30. }
  31. }

d)添加编译依赖和集成SDK。

打开harmony项目应用级(entry)的build.gradle文件,添加插件地址。

  1. apply plugin: 'com.huawei.ohos.hap'
  2. apply plugin: 'com.huawei.ohos.decctest'
  3. apply plugin: 'com.huawei.agconnect'

在“dependencies”中添加添加agconnect-core的编译依赖和crash SDK。

  1. dependencies {
  2. implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
  3. implementation 'com.huawei.agconnect:agconnect-auth-harmony:1.2.0.1-snapshot'
  4. implementation 'com.huawei.agconnect:agconnect-tasks-harmony:1.2.0.1-snapshot'
  5. }

e)entry (hap)模块添加配置信息

enrty模块的config.json文件的module/abilities中,加入如下配置,注意包名的替换。

  1. {
  2. "permissions": [
  3. "com.huawei.agconnect.core.DataAbilityShellProvider.PROVIDER"
  4. ],
  5. "name": "com.huawei.agconnect.core.provider.AGConnectInitializeAbility",
  6. "type": "data",
  7. "uri": "dataability://com.huawei.agconnect.auth.AGConnectInitializeAbility"
  8. }

f)同步工程配置

1.png

4、配置签名信息

Harmony应用安装到真机进行测试,需要配置签名信息,有手动签名和自动签名两种方式,具体可以参见:配置签名信息。建议优先使用自动签名方式,如自动签名失败,可以选择手动签名方式。这里使用自动签名方式:

a)连接真机设备,确保DevEco Studio与真机设备已连接,真机连接成功后如下图所示

image.png

b)进入File > Project Structure > Project > Signing Configs界面,点击“Sign In”按钮进行登录,选择Debug,勾选Automatically generate signing,点击try again即可自动进行签名。自动生成签名所需的密钥(.p12)、数字证书(.cer)和Profile文件(.p7b)会存放到用户user目录下的.ohos\config目录下。

image.png

设置完签名信息后,点击OK进行保存,然后可以在工程下的build.gradle中查看签名的配置信息。

image.png

登录AGC,进入“用户与访问”-“证书管理”,点击新增证书,上传前面生成的.csr文件,类型选择调试证书

完成签名配置后即可点击安装应用到调试设备。

功能实现

手机验证登录布局设计

image.png

参考如上布局,四个文本框输入分别输入国家码、手机号、密码、验证码,点击验证后收到验证码短信,输入验证码,点击登录,完成注册和登录布局代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <DirectionalLayout
  3. xmlns:ohos="http://schemas.huawei.com/res/ohos"
  4. ohos:width="match_parent"
  5. ohos:height="match_parent">
  6. <TextField
  7. ohos:id="$+id:countryCode"
  8. ohos:height="match_content"
  9. ohos:width="150vp"
  10. ohos:hint="Your countryCode"
  11. ohos:text_input_type="pattern_number"
  12. ohos:text_size="50"
  13. ohos:top_margin="10vp"
  14. />
  15. <TextField
  16. ohos:id="$+id:phoneNumber"
  17. ohos:height="match_content"
  18. ohos:width="150vp"
  19. ohos:hint="Your phone"
  20. ohos:text_input_type="pattern_number"
  21. ohos:text_size="50"
  22. ohos:bottom_margin="10vp"
  23. />
  24. <TextField
  25. ohos:id="$+id:password"
  26. ohos:height="match_content"
  27. ohos:width="150vp"
  28. ohos:hint="Password"
  29. ohos:text_input_type="pattern_password"
  30. ohos:text_size="50"
  31. ohos:bottom_margin="10vp"
  32. />
  33. <TextField
  34. ohos:id="$+id:verifyCode"
  35. ohos:height="match_content"
  36. ohos:width="150vp"
  37. ohos:hint="verifyCode"
  38. ohos:text_input_type="pattern_number"
  39. ohos:text_size="50"
  40. ohos:bottom_margin="10vp"
  41. />
  42. <DirectionalLayout
  43. ohos:height="match_content"
  44. ohos:width="match_parent"
  45. ohos:orientation="horizontal">
  46. <Button
  47. ohos:id="$+id:Verify"
  48. ohos:height="match_content"
  49. ohos:width="100vp"
  50. ohos:background_element="$graphic:background_ability_main"
  51. ohos:left_margin="15vp"
  52. ohos:text="Verify"
  53. ohos:text_size="16fp"/>
  54. <Button
  55. ohos:id="$+id:Login"
  56. ohos:height="match_content"
  57. ohos:width="100vp"
  58. ohos:background_element="$graphic:background_ability_main"
  59. ohos:left_margin="15vp"
  60. ohos:text="Login"
  61. ohos:text_size="16fp"/>
  62. </DirectionalLayout>
  63. </DirectionalLayout>

验证和登录:

输入国家码、手机号、后点击Verify,返回验证码发送成功日志,手机收到验证码,输入密码和验证码后点击Login返回登录成功日志:

image.png

页面跳转到登录成功页面:

image.png

验证和登录代码如下:

  1. private void verify() {
  2. String countryCode = getCountryCode();
  3. String phoneNumber = getPhoneNumber();
  4. int action = VerifyCodeSettings.ACTION_REGISTER_LOGIN;
  5. VerifyCodeSettings settings = VerifyCodeSettings.newBuilder()
  6. .action(action)
  7. .sendInterval(30)
  8. .build();
  9. HarmonyTask<VerifyCodeResult> task = AGConnectAuth.getInstance()
  10. .requestVerifyCode(countryCode, phoneNumber, settings);
  11. task.addOnSuccessListener(TaskExecutors.uiThread(), new OnSuccessListener<VerifyCodeResult>() {
  12. @Override
  13. public void onSuccess(VerifyCodeResult verifyCodeResult) {
  14. log("verifyPhoneCode success");
  15. }
  16. }).addOnFailureListener(TaskExecutors.uiThread(), new OnFailureListener() {
  17. @Override
  18. public void onFailure(Exception e) {
  19. log("verifyPhoneCode fail:" + e);
  20. }
  21. });
  22. }
  23. private void login() {
  24. String countryCode = getCountryCode();
  25. String phoneNumber = getPhoneNumber();
  26. String password = getPassword();
  27. String verifyCode = getVerify();
  28. AGConnectAuthCredential phoneAuthCredential =
  29. PhoneAuthProvider.credentialWithVerifyCode(countryCode, phoneNumber, password, verifyCode);
  30. /* signIn */
  31. HarmonyTask<SignInResult> task = AGConnectAuth.getInstance().signIn(phoneAuthCredential);
  32. task.addOnSuccessListener(new OnSuccessListener<SignInResult>() {
  33. @Override
  34. public void onSuccess(SignInResult signInResult) {
  35. log("signIn success");
  36. showUser(signInResult.getUser());
  37. }
  38. }).addOnFailureListener(new OnFailureListener() {
  39. @Override
  40. public void onFailure(Exception e) {
  41. log("signInWithCode fail:" + e);
  42. }
  43. });
  44. }

2、邮箱验证登录布局设计

image.png

参考如上布局,三个文本框输入分别输入邮箱号、密码、验证码,点击验证后收到验证码短信,输入验证码,点击登录,完成注册和登录,布局代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <DirectionalLayout
  3. xmlns:ohos="http://schemas.huawei.com/res/ohos"
  4. ohos:width="match_parent"
  5. ohos:height="match_parent">
  6. <TextField
  7. ohos:id="$+id:phoneNumber"
  8. ohos:height="match_content"
  9. ohos:width="150vp"
  10. ohos:hint="Your phone"
  11. ohos:text_input_type="pattern_number"
  12. ohos:text_size="50"
  13. ohos:bottom_margin="10vp"
  14. />
  15. <TextField
  16. ohos:id="$+id:password"
  17. ohos:height="match_content"
  18. ohos:width="150vp"
  19. ohos:hint="Password"
  20. ohos:text_input_type="pattern_password"
  21. ohos:text_size="50"
  22. ohos:bottom_margin="10vp"
  23. />
  24. <TextField
  25. ohos:id="$+id:verifyCode"
  26. ohos:height="match_content"
  27. ohos:width="150vp"
  28. ohos:hint="verifyCode"
  29. ohos:text_input_type="pattern_number"
  30. ohos:text_size="50"
  31. ohos:bottom_margin="10vp"
  32. />
  33. <DirectionalLayout
  34. ohos:height="match_content"
  35. ohos:width="match_parent"
  36. ohos:orientation="horizontal">
  37. <Button
  38. ohos:id="$+id:Verify"
  39. ohos:height="match_content"
  40. ohos:width="100vp"
  41. ohos:background_element="$graphic:background_ability_main"
  42. ohos:left_margin="15vp"
  43. ohos:text="Verify"
  44. ohos:text_size="16fp"/>
  45. <Button
  46. ohos:id="$+id:Login"
  47. ohos:height="match_content"
  48. ohos:width="100vp"
  49. ohos:background_element="$graphic:background_ability_main"
  50. ohos:left_margin="15vp"
  51. ohos:text="Login"
  52. ohos:text_size="16fp"/>
  53. </DirectionalLayout>
  54. </DirectionalLayout>

输入邮箱号后点击Verify,返回验证码发送成功日志,邮箱收到验证码,输入密码和验证码后点击Login返回登录成功日志:

image.png

页面跳转到登录成功页面:

image.png

邮箱验证和登录代码如下:

  1. private void verify() {
  2. //String countryCode = getCountryCode();
  3. String emailStr = getEmailStr();
  4. int action = VerifyCodeSettings.ACTION_REGISTER_LOGIN;
  5. VerifyCodeSettings settings = VerifyCodeSettings.newBuilder()
  6. .action(action)
  7. .sendInterval(30)
  8. .build();
  9. HarmonyTask<VerifyCodeResult> task = AGConnectAuth.getInstance()
  10. .requestVerifyCode(emailStr, settings);
  11. task.addOnSuccessListener(TaskExecutors.uiThread(), new OnSuccessListener<VerifyCodeResult>() {
  12. @Override
  13. public void onSuccess(VerifyCodeResult verifyCodeResult) {
  14. log("verifyEmailCode success");
  15. }
  16. }).addOnFailureListener(TaskExecutors.uiThread(), new OnFailureListener() {
  17. @Override
  18. public void onFailure(Exception e) {
  19. log("verifyEmailCode fail:" + e);
  20. }
  21. });
  22. }
  23. private void login() {
  24. //String countryCode = getCountryCode();
  25. String emailStr = getEmailStr();
  26. String password = getPassword();
  27. String verifyCode = getVerify();
  28. AGConnectAuthCredential emailAuthCredential =
  29. EmailAuthProvider.credentialWithVerifyCode(emailStr, password, verifyCode);
  30. /* signIn */
  31. HarmonyTask<SignInResult> task = AGConnectAuth.getInstance().signIn(emailAuthCredential);
  32. task.addOnSuccessListener(new OnSuccessListener<SignInResult>() {
  33. @Override
  34. public void onSuccess(SignInResult signInResult) {
  35. log("signIn success");
  36. showUser(signInResult.getUser());
  37. }
  38. }).addOnFailureListener(new OnFailureListener() {
  39. @Override
  40. public void onFailure(Exception e) {
  41. log("signInWithCode fail:" + e);
  42. }
  43. });
  44. }

功能测试

在登陆成功后,打开AGC验证服务,在后台查询数据:

使用手机和邮箱注册的用户在后台均有显示账号信息和验证次数,验证次数与请求验证次数相同;

image.png

image.png

在AGC上删除账户,再次使用相同用户名和密码登录会报用户名或密码错误

image.png

在停用账户后登录会报账户已禁用错误。

image.png

欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/248154
推荐阅读
相关标签
  

闽ICP备14008679号