当前位置:   article > 正文

鸿蒙API9手机号验证_“@ohos/agconnect-auth-component”: “^1.1.2”

“@ohos/agconnect-auth-component”: “^1.1.2”

鸿蒙API9手机号验证

做一个app用户认证,之前一直想着都是通过HMS Core里边来接入,但是里边的文档最高只支持到API7。
由于想直接用API9来接,毕竟感觉后续ts/java混合开发要被舍弃,尽量还是用新的来弄。看了一遍新的API9的文档,感觉比之前的完善了很多,不过就是相应的配套支持还少点。卡了好久,没事想先关注一下文档有没有更新。突然发现还有另外一个途径,在AppGallery Connect里边有个认证服务,目前API9支持手机跟邮箱两种方式,后续应该能更新华为账号方式登陆。据说现在微信也开始适配鸿蒙了,感觉再过一段时间可能就能接入微信登陆了。

文档地址

参考地址

下边按步骤接入一下,需要提前准备一个AppGallery Connect账号。

新建工程

随便创建一个,记录一下bundle ID,然后在通过 AppGallery Connect 创建一个应用,填写相同的bundle ID。或者反过来也行,只要保证两边的bundle ID一样就行了。

开通认证服务

进入AppGallery Connect开通认证服务

请添加图片描述

开通认证服务的手机号项目

请添加图片描述

开局送了1000条短信每月,简直不要太爽,微信小程序的配额一共免费1000条,而且那个还不一定会发验证码,相比于这个就良心多了。
在认证的用量能看到短信的发送次数。

请添加图片描述

在项目设置的项目配额里边,改成查看认证服务能够看到短信的配额用多少了。

请添加图片描述

在认证服务的配置中还能设置短信模版内容

请添加图片描述

配置依赖

下载 agconnect-services.json,在AppGallery Connect项目配置->常规下边有这个文件的下载地方。

请添加图片描述

把其放到项目的这个位置上,resources/rawfile/文件夹下。

请添加图片描述

增加项目文件的依赖,项目文件路径 工程/entry/oh-package.json5
把如下内容添加到package.json5里边

{
  "@hw-agconnect/auth-ohos": "^1.1.2",
  "@hw-agconnect/api-ohos": "^1.1.2",
  "@hw-agconnect/core-ohos": "^1.1.2"
}
  • 1
  • 2
  • 3
  • 4
  • 5

修改后文件如下:

{
  "license": "",
  "devDependencies": {},
  "author": "",
  "name": "entry",
  "description": "Please describe the basic information.",
  "main": "",
  "version": "1.0.0",
  "dependencies": {
    "@hw-agconnect/auth-ohos": "^1.1.2",
    "@hw-agconnect/api-ohos": "^1.1.2",
    "@hw-agconnect/core-ohos": "^1.1.2"
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

之后同步项目工程,等待安装依赖库。

在 entry/src/main/module.json5 文件里边增加网络权限。

"requestPermissions": [
  {
    "name": "ohos.permission.INTERNET",
  }
]
  • 1
  • 2
  • 3
  • 4
  • 5

写个大概的页面

根据功能需要,要有一个短信输入框、验证码输入框、发送验证码按钮、登陆按钮几个。
稍微画一下界面,效果如下:

请添加图片描述

接入逻辑

引入模块

import agconnect from '@hw-agconnect/api-ohos';
import "@hw-agconnect/core-ohos";
import "@hw-agconnect/auth-ohos";
import { EmailAuthProvider, VerifyCodeAction, VerifyCodeSettingBuilder, PhoneUserBuilder,
  PhoneAuthProvider, AGConnectAuth, AGConnectAuthCredentialProvider
} from "@hw-agconnect/auth-ohos"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

初始化及查看是否有用户登录信息,如果之前短信验证码验证成功的话,一般来说第二次启动就能拿到上次的登录信息:

agconnect.instance().init(this.context.getApplicationContext());
agconnect.auth().getCurrentUser().then(user=>{
  if(user){
    //业务逻辑
    console.log('xx get user success ' + JSON.stringify(user))
    this.message = 'uuid: ' + user.getUid()
  } else {
    console.log('xx not login')
    this.message = '暂无登陆信息'
  }
}).catch(error=>{
  console.log('xx get user failed'+JSON.stringify((error)))
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

把手机号跟验证码发到全局变量里边

@State message: string = '^_^'
@State phoneNumber: string = ''
@State verifyCode: string = ''
countryCode: string = '+86'
  • 1
  • 2
  • 3
  • 4

发送验证码及验证码登陆流程

private handleSendVerifyCode = () => {
  let verifyCodeSettings = new VerifyCodeSettingBuilder()
    .setAction(VerifyCodeAction.REGISTER_LOGIN)
    .setLang('zh_CN')
    .setSendInterval(60)
    .build();
  agconnect.auth().requestPhoneVerifyCode(this.countryCode,this.phoneNumber,verifyCodeSettings)
    .then(verifyCodeResult => {
      console.log('xx verify code success '+JSON.stringify(verifyCodeResult))
      //验证码申请成功
      this.message = '发送验证码成功'
    }).catch(error => {
    //验证码申请失败
    console.log('xx verify code fail '+JSON.stringify(error))
  });
}

private handleCheckVerifyCode = () => {
  let credential = PhoneAuthProvider.credentialWithVerifyCode(this.countryCode,this.phoneNumber, this.verifyCode);
  agconnect.auth().signIn(credential)
    .then(user => {
      //登录成功
      console.log('xx user is '+JSON.stringify(user))
      this.message = 'uuid: ' + user.getUser().getUid()
    }).catch(error => {
    //登录失败
    console.log('xx login code fail '+JSON.stringify(error))
  });
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

之后整体代码接入一下完成:

import common from '@ohos.app.ability.common'
import agconnect from '@hw-agconnect/api-ohos';
import "@hw-agconnect/core-ohos";
import "@hw-agconnect/auth-ohos";
import { EmailAuthProvider, VerifyCodeAction, VerifyCodeSettingBuilder, PhoneUserBuilder,
  PhoneAuthProvider, AGConnectAuth, AGConnectAuthCredentialProvider
} from "@hw-agconnect/auth-ohos"

@Entry
@Component
struct Index {
  @State message: string = '^_^'
  @State phoneNumber: string = ''
  @State verifyCode: string = ''
  countryCode: string = '+86'

  private context = getContext(this) as common.UIAbilityContext

  onPageShow() {
    agconnect.instance().init(this.context.getApplicationContext());
    agconnect.auth().getCurrentUser().then(user=>{
      if(user){
        //业务逻辑
        console.log('xx get user success ' + JSON.stringify(user))
        this.message = 'uuid: ' + user.getUid()
      } else {
        console.log('xx not login')
        this.message = '暂无登陆信息'
      }
    }).catch(error=>{
      console.log('xx get user failed'+JSON.stringify((error)))
    }) ;
  }

  private handleSendVerifyCode = () => {
    let verifyCodeSettings = new VerifyCodeSettingBuilder()
      .setAction(VerifyCodeAction.REGISTER_LOGIN)
      .setLang('zh_CN')
      .setSendInterval(60)
      .build();
    agconnect.auth().requestPhoneVerifyCode(this.countryCode,this.phoneNumber,verifyCodeSettings)
      .then(verifyCodeResult => {
        console.log('xx verify code success '+JSON.stringify(verifyCodeResult))
        //验证码申请成功
        this.message = '发送验证码成功'
      }).catch(error => {
      //验证码申请失败
      console.log('xx verify code fail '+JSON.stringify(error))
    });
  }

  private handleCheckVerifyCode = () => {
    let credential = PhoneAuthProvider.credentialWithVerifyCode(this.countryCode,this.phoneNumber, this.verifyCode);
    agconnect.auth().signIn(credential)
      .then(user => {
        //登录成功
        console.log('xx user is '+JSON.stringify(user))
        this.message = 'uuid: ' + user.getUser().getUid()
      }).catch(error => {
      //登录失败
      console.log('xx login code fail '+JSON.stringify(error))
    });
  }

  build() {
    Column({space: 20}) {
      TextInput({placeholder:"请输入手机号"})
        .width(320)
        .height(40)
        .type(InputType.Number)
        .onChange((v) => {
          this.phoneNumber = v
        })

      Row({space: 20}) {
        TextInput({placeholder:"请输入验证码"})
          .width(200)
          .height(40)
          .type(InputType.Number)
          .onChange((v) => {
            this.verifyCode = v
          })

        Button("发送验证码")
          .width(100)
          .height(40)
          .onClick(()=>{
            if(this.phoneNumber.length == 11) {
              this.handleSendVerifyCode()
            } else {
              AlertDialog.show({
                message: '请输入正确的手机号',
                confirm: {
                  value: '确定',
                  action: ()=>{}
                }
              })
            }
          })
      }

      Button("登陆")
        .width(320)
        .height(40)
        .margin({top: 40})
        .onClick(()=>{
          if(this.verifyCode.length >= 4) {
            this.handleCheckVerifyCode()
          } else {
            AlertDialog.show({
              message: '请输入正确的验证码',
              confirm: {
                value: '确定',
                action: ()=>{}
              }
            })
          }
        })

      Text(this.message)
        .margin({top: 40})
    }
    .alignItems(HorizontalAlign.Center)
    .padding({top: 100})
    .width('100%')
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127

最后最后还有个比较好的功能就是谁发过短信注册过用户在AppGallery Connect都能够查看到。

请添加图片描述

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

闽ICP备14008679号