Skip to content

Comments

Codelabs#1

Open
tonirmv wants to merge 8 commits intoHMS-ScanKit:masterfrom
HMS-Core:master
Open

Codelabs#1
tonirmv wants to merge 8 commits intoHMS-ScanKit:masterfrom
HMS-Core:master

Conversation

@tonirmv
Copy link

@tonirmv tonirmv commented Apr 1, 2021

华为帐号服务客户端Java示例代码
中文 | English

目录
简介
环境要求
开发准备
运行结果
授权许可
简介
Android示例代码对华为帐号服务(HUAWEI Account Kit)的客户端接口进行封装,包含丰富的示例程序,方便您参考或直接使用。详情如下:

hmssample:示例代码包,可实现登录、授权登录、静默登录、退出帐号和帐号取消授权功能。 logger:可实现日志记录。

环境要求
推荐使用Android SDK 23及以上版本、JDK 1.8及以上版本。

开发准备
检查Android Studio开发环境是否就绪。在Android Studio中打开“build.gradle”文件所在的示例代码工程目录,并在您已安装最新版华为移动服务(HMS Core)的设备或模拟器上运行测试应用。
注册华为帐号。
创建应用并在AppGallery Connect中配置相关信息。具体请参考开发准备。
构建此示例demo前,请先将demo导入Android Studio(3.0及以上版本)。
配置示例代码: (1)在AppGallery Connect下载您应用的“agconnect-services.json”文件,将该文件拷贝到应用级根目录下。 (2)修改示例工程中应用级“build.gradle”文件中的“applicationid”为您自己的应用包名。
在Android设备或模拟器上运行您的应用。
运行结果
本示例代码提供了以下使用场景:

ID Token模式登录。
Authorization Code模式登录。
静默登录。
退出帐号。
帐号取消授权。
image.png

授权许可
华为帐号服务Android示例代码经过Apache License 2.0授权许可。

@tonirmv
Copy link
Author

tonirmv commented Apr 2, 2021

/ *

  • Copyright 2020. Huawei Technologies Co., Ltd. Todos los derechos reservados.
  • Con licencia de Apache License, Versión 2.0 (la "Licencia");
  • no puede utilizar este archivo excepto de conformidad con la Licencia.
  • Puede obtener una copia de la licencia en
  • http://www.apache.org/licenses/LICENSE-2.0
  • A menos que lo exija la ley aplicable o se acuerde por escrito, el software
  • distribuido bajo la Licencia se distribuye "TAL CUAL",
  • SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ya sea expresa o implícita.
  • Consulte la Licencia para conocer el idioma específico que rige los permisos y
  • limitaciones de la Licencia.
  • /
    paquete com.huawei.hmssample

importar android.content.Intent
importar android.os.Bundle
importar android.view.View
import com.huawei.hms.common.ApiException
import com.huawei.hms.support.account.AccountAuthManager
import com.huawei.hms.support.account.request.AccountAuthParams
import com.huawei.hms.support.account.request.AccountAuthParamsHelper
import com.huawei.hms.support.account.service.AccountAuthService
import com.huawei.logger.Log
importar com.huawei.logger.LoggerActivity
importar kotlinx.android.synthetic.main.activity_account. *

class AccountActivity: LoggerActivity () {
// Etiqueta de registro
val TAG = "HuaweiIdActivity"
private var mAuthManager: AccountAuthService? = nulo
private var mAuthParam: AccountAuthParams? = nulo

anular la diversión onCreate (SavedInstanceState: Bundle?) {
    super.onCreate (SavedInstanceState)
    setContentView (R.layout.activity_account)
    account_signin.setOnClickListener (mOnClickListener)
    account_signout.setOnClickListener (mOnClickListener)
    account_signInCode.setOnClickListener (mOnClickListener)
    account_silent_signin.setOnClickListener (mOnClickListener)
    cancel_authorization.setOnClickListener (mOnClickListener)
    // registro de muestra Por favor ignore
    addLogFragment ()
}


anular la diversión onStart () {
    super.onStart ()
}

anular la diversión onStop () {
    super.onStop ()
}

anular diversión onDestroy () {
    super.onDestroy ()
}

/ **
 * Código Codelab
 * Abra la interfaz de autorización mediante getSignInIntent
 * /
inicio de sesión de diversión privada () {
    mAuthParam = AccountAuthParamsHelper (AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM)
            .setIdToken ()
            .setAccessToken ()
            .createParams ()
    mAuthManager = AccountAuthManager.getService (esto @ AccountActivity, mAuthParam)
    startActivityForResult (mAuthManager? .signInIntent, Constant.REQUEST_SIGN_IN_LOGIN)
}

diversión privada signInCode () {
    mAuthParam = AccountAuthParamsHelper (AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM)
            .setProfile ()
            .setAuthorizationCode ()
            .createParams ()
    mAuthManager = AccountAuthManager.getService (esto @ AccountActivity, mAuthParam)
    startActivityForResult (mAuthManager? .signInIntent, Constant.REQUEST_SIGN_IN_LOGIN_CODE)
}

/ **
 * Código Codelab
 * cerrar sesión mediante signOut
 * /
diversión privada signOut () {
    val signOutTask = mAuthManager? .signOut ()
    signOutTask? .addOnSuccessListener {
        Log.i (TAG, "SignOut Success")
    } ?. addOnFailureListener {
        Log.i (TAG, "signOut fail")
    }
}

/ **
 * Código Codelab
 * Inicio de sesión silencioso por silentSignIn
 * /
diversión privada silentSignIn () {
    val tarea = mAuthManager? .silentSignIn ()
    tarea? .addOnSuccessListener {Log.i (TAG, "silentSignIn success")}
    tarea? .addOnFailureListener {e ->
        // si falla, use getSignInIntent
        if (e es ApiException) {
            val apiException = e
            iniciar sesión()
        }
    }
}

private val mOnClickListener: View.OnClickListener = object: View.OnClickListener {
    anular la diversión onClick (v: ¿Ver?) {
        cuando (v? .id) {
            R.id.account_signin -> signIn ()
            R.id.account_signout -> signOut ()
            R.id.account_signInCode -> signInCode ()
            R.id.account_silent_signin -> silentSignIn ()
            R.id.cancel_authorization -> cancelAuthorization ()
        }
    }
}

diversión privada cancelAuthorization () {
    mAuthParam = AccountAuthParamsHelper (AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM)
            .setProfile ()
            .setAuthorizationCode ()
            .createParams ()
    mAuthManager = AccountAuthManager.getService (esto @ AccountActivity, mAuthParam)
    val tarea = mAuthManager? .cancelAuthorization ()
    tarea? .addOnSuccessListener {Log.i (TAG, "cancelAuthorization success")}
    tarea? .addOnFailureListener {e -> Log.i (TAG, "cancelAuthorization failure :" + e.javaClass.simpleName)}
}


anular la diversión onActivityResult (requestCode: Int, resultCode: Int, data: Intent) {
    super.onActivityResult (requestCode, resultCode, datos)
    if (requestCode == Constant.REQUEST_SIGN_IN_LOGIN) {
        //acceso exitoso
        // obtener el mensaje de usuario por parseAuthResultFromIntent
        val authAccountTask = AccountAuthManager.parseAuthResultFromIntent (datos)
        if (authAccountTask.isSuccessful) {
            val authAccount = authAccountTask.result
            Log.i (TAG, authAccount.getDisplayName () + "inicio de sesión exitoso")
            Log.i (TAG, "AccessToken:" + authAccount.getAccessToken ())
        } demás {
            Log.i (TAG, "error de inicio de sesión:" + (authAccountTask.exception como ApiException) .statusCode)
        }
    }
    if (requestCode == Constant.REQUEST_SIGN_IN_LOGIN_CODE) {
        //acceso exitoso
        val authAccountTask = AccountAuthManager.parseAuthResultFromIntent (datos)
        if (authAccountTask.isSuccessful) {
            val authAccount = authAccountTask.result
            Log.i (TAG, "signIn get code success.")
            Log.i (TAG, "ServerAuthCode:" + authAccount.authorizationCode)
            / **** english doc: Por razones de seguridad, la operación de cambiar el código a un AT debe realizarse en su servidor. El código es solo un ejemplo y no se puede ejecutar. * /
            / ** * /
        } demás {
            Log.i (TAG, "error al obtener código de inicio de sesión:" + (authAccountTask.exception como ApiException) .statusCode)
        }
    }
}

/ **
 * ejemplo de registro Por favor ignore
 * /
diversión privada addLogFragment () {
    val transacción = fragmentManager.beginTransaction ()
    val fragment = LogFragment ()
    transaction.replace (R.id.framelog, fragmento)
    transaccion.commit ()
}

}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants