Primeros pasos con HUAWEI Auth Service

Daniel Mendoza
Huawei Developers Latinoamérica
5 min readApr 29, 2021

Al manejar varios sistemas de cuenta a la vez, es probable que necesites generar un identificador de usuario único sin importar el proveedor de la cuenta, almacenar la información de usuario, vincular diferentes cuentas e identificar el tipo de cuenta para recuperar la información del usuario desde la API de terceros correcta. ¿Te ha preguntado si existe una manera más fácil de manejar múltiples tipos de cuenta? Si la respuest es sí, permíteme presentarte HUAWEI Auth Service. Con este servicio de AppGallery Connect, podrás proporcionar una mejor experiencia de inicio de sesión con un sistema de cuentas unificado a través de múltiples plataformas.

En este artículo voy a mostrarte cómo integrar Auth Service en una aplicación Android.

Tipos de cuenta soportados en todo el mundo

Tipos de cuenta soportados fuera de China

  • Google
  • Google Play Games
  • Facebook
  • Twitter
  • Apple Id

Requisitos previos

  • Una cuenta de desarrollador HUAWEI verificada
  • Android Studio 4.0 o superior
  • Un teléfono Android (No importa el fabricante)
  • Un proyecto en AppGallery Connect (Puedes consultr esta guía para crear uno)

Configurando Auth Service

Para este paso ya debes tener tu proyecto en AppGallery Connect creado y configurado. Inicia sesión en AppGallery Connect y selecciona “My projects”, busca el proyecto al que le deseas agregar Auth Service y haz clic sobre él.

Ya en el panel de configuración del proyecto, cambia a la pestaña “Manage APIs”

Tras habilitar el servicio, usa el panel izquierdo para navegar hasta los servicios de construcción (Build) y selecciona Auth Service.

Habilita las opciones de inicio de sesión que tu App va a soportar, en el caso de cuentas de terceros como Facebook o Twitter, será necesario que poseas una cuenta de desarrollador para estas plataformas, ya que Auth Service necesitará que configures claves de API para consumir la información de cuenta de los usuarios.

Agregando Auth Sevice a tu App

Agrega el SDK de HUAWEI Auth Service al archivo build.gradle a nivel de app en tu proyecto.

implementation 'com.huawei.agconnect:agconnect-auth:1.5.1.300'

Construyendo el Layout

Agrega los botones correspondientes a cada una de las opciones de inicio de sesión que configuraste en la consola de Auth Service, algunos SDK ya incluyen sus propios botones prediseñados.

Agrega la lógica de programación requerida para el inicio de sesión con cada sistema de cuentas.

override fun onClick(v: View?) {loadingDialog.show()when (v?.id) {R.id.hw -> {val mAuthParam =HuaweiIdAuthParamsHelper(HuaweiIdAuthParams.DEFAULT_AUTH_REQUEST_PARAM).setIdToken().setAccessToken().createParams()val mAuthManager = HuaweiIdAuthManager.getService(this, mAuthParam)startActivityForResult(mAuthManager.signInIntent,REQUEST_SIGN_IN_LOGIN_CODE)}R.id.google_sign_in_button -> {val serviceConfig = AuthorizationServiceConfiguration(Uri.parse("https://accounts.google.com/o/oauth2/auth"), // authorization endpointUri.parse("https://oauth2.googleapis.com/token")) // token endpointval clientId=getString(R.string.google_client_id)val authRequestBuilder = AuthorizationRequest.Builder(serviceConfig,  // the authorization service configurationclientId,  // the client ID, typically pre-registered and staticResponseTypeValues.CODE,  //Uri.parse("$packageName:/oauth2redirect")) // the redirect URI to which the auth response is sentauthRequestBuilder.setScope("openid email profile")val authRequest = authRequestBuilder.build()val authService = AuthorizationService(this)val authIntent = authService.getAuthorizationRequestIntent(authRequest)startActivityForResult(authIntent, GOOGLE_SIGN_IN)authService.dispose()//}}R.id.anon -> {AGConnectAuth.getInstance().signInAnonymously().addOnSuccessListener {// onSuccessval user = it.userstartNavDrawer(user)}.addOnFailureListener {// onFail}}}}

Normalmente los sistemas de cuentas soportan el inicio de sesión por Authorization Mode ó ID Token, usa el Authorization Mode para obtener un Access Token.

Reportando el Access Token a AGC

Usa el Access Token para construir un objeto Credential de Auth Service y usa la credencial para llamar al método signIn, esto devolverá un perfil de usuario con su información básic y un user ID generado automáticamente por Auth Service.

Catch the authentication result in the onActivityResult method and use the token to sign in AGC
if (requestCode == HWID_SIGN_IN) {
//Huawei login success
val authHuaweiIdTask = HuaweiIdAuthManager.parseAuthResultFromIntent(data)
if (authHuaweiIdTask.isSuccessful) {
val huaweiAccount = authHuaweiIdTask.result
val accessToken = huaweiAccount.accessToken
val credential = HwIdAuthProvider.credentialWithToken(accessToken)
AGConnectAuth.getInstance().signIn(credential).addOnSuccessListener {
// onSuccess
val user = it.user
startNavDrawer(user)
}.addOnFailureListener {
// onFail
Log.e(TAG, it.toString())
}
} else {
Log.i(
TAG,
"signIn get code failed: " + (authHuaweiIdTask.exception as ApiException).statusCode
)
}
}

Recuperando los datos del usuario

Usa la instancia de Auth Service para recuperar la información del usuario que actualmente está registrado en la aplicación. Dependiendo del sistema de cuentas, este perfil contendrá diferentes datos cómo el nombre real del usuario, su nickname, su email ó su número telefónico.

val user=AGConnectAuth.getInstance().currentUser
if(user!=null){
val uid=user.uid
val displayName=user.displayName
val photoUrl=user.photoUrl
}
else{
//Display your login screen
}

Vinculación de cuentas

Una de las ventajas de Auth Service es que permite la fusión de cuentas, de forma que un usuario es capáz de acceder al mismo perfil, ingresando con diferentes sistemas de cuentas. Por ejemplo iniciar sesión con sucuenta de Faccebook y posteriormente asociar este perfil a su HUAWEI ID.

AGConnectAuth.getInstance().currentUser.link(credential).addOnSuccessListener {
// onSuccess
val user = it.user
}.addOnFailureListener {
// onFail
}

Cerrando sesión

Auth Service permite al usuario cerrar sesión en el momento que desee, al hacerlo, toda su información personal vinculada a AuthService será eliminada del dispositivo.

AGConnectAuth.getInstance().signOut()

--

--