HMS Core 华为帐号登录 华为1+x 考试试题

package com.huawei.accountkit;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

import com.huawei.accountkit.beans.HwIdUser;
import com.huawei.hmf.tasks.OnCompleteListener;
import com.huawei.hmf.tasks.Task;
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.result.AuthAccount;
import com.huawei.hms.support.account.service.AccountAuthService;
import com.huawei.hms.support.hwid.ui.HuaweiIdAuthButton;

import org.jetbrains.annotations.NotNull;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private static final String TAG = "MainActivity";

    // 华为帐号登录客户端
    private AccountAuthService mAccountService;

    private TextView mLoginStatus;

    private TextView mName;

    private TextView mEmail;

    private TextView mNickName;

    private TextView mUnionId;

    private TextView mOpenId;

    /**
     * 请勿修改,否则可能影响考试成绩
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
    }

    /**
     * 除了TODO标识的地方可以修改,其他地方请勿修改,否则影响考试成绩
     */
    private void initView() {
        mLoginStatus = findViewById(R.id.login_status);
        mName = findViewById(R.id.tv_name);
        mEmail = findViewById(R.id.tv_email);
        mNickName = findViewById(R.id.tv_nickname);
        mUnionId = findViewById(R.id.tv_unionId);
        mOpenId = findViewById(R.id.tv_openId);

        // 华为帐号登录按钮
        HuaweiIdAuthButton signInButton = findViewById(R.id.hwid_signin);
        // TODO 为华为帐号登录按钮设置点击监听(MainActivity已实现OnClickListener接口)
        signInButton.setOnClickListener(this::onClick);
        signInButton.setColorPolicy(HuaweiIdAuthButton.COLOR_POLICY_WHITE);

        // 华为帐号登出按钮
        HuaweiIdAuthButton signOutBtn = findViewById(R.id.hwid_signout);
        // TODO 为华为帐号登出按钮设置点击监听(MainActivity已实现OnClickListener接口)
        signOutBtn.setOnClickListener(this::onClick);
        signOutBtn.setColorPolicy(HuaweiIdAuthButton.COLOR_POLICY_WHITE);
        signOutBtn.mButton.setText(getResources().getText(R.string.login_out_button_text));
    }

    /**
     * 华为帐号Id Token模式登录:需要考生填写
     */
    private void onAccountLogin() {
        // TODO 构造华为帐号登录选项AccountAuthParams对象
        AccountAuthParams authParams = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM).setAuthorizationCode().createParams();
        // TODO 初始化华为帐号登录客户端(mAccountService)
        mAccountService = AccountAuthManager.getService(MainActivity.this, authParams);
        // TODO 获取登录授权页面的Intent,并通过startActivityForResult拉起授权页面
        startActivityForResult(mAccountService.getSignInIntent(), 8888);
    }

    /**
     * 华为帐号的登出:需要考生填写
     */
    private void onAccountSignOut() {
        AccountAuthParams authParam = new AccountAuthParamsHelper().createParams();
        mAccountService = AccountAuthManager.getService(MainActivity.this, authParam);

        // TODO 调用华为帐号登出接口
        Task<Void> signOutTask = mAccountService.signOut();
        // TODO 为华为帐号登出结果添加监听,并在登录成功的回调中调用updateSignOutResult()方法,更新登出的结果
        signOutTask.addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(Task<Void> task) {
                updateSignOutResult();
                //完成退出后的处理
                Log.i(TAG, "signOut complete");
            }
        });

    }

    /**
     * 需要考生填写
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // TODO 从data中获取华为帐号的登录结果
        if (requestCode == 8888) {
            Task<AuthAccount> authAccountTask = AccountAuthManager.parseAuthResultFromIntent(data);
            if (authAccountTask.isSuccessful()) {
                //登录成功,获取用户的帐号信息和Authorization Code
                // TODO 判断华为帐号是否登录成功,如果登录成功,调用getHwIdUser方法获得HwIdUser对象,然后调用updateUI更新登录的结果
                AuthAccount authAccount = authAccountTask.getResult();
                HwIdUser hwIdUser = getHwIdUser(authAccount);
                updateUI(hwIdUser);
                Log.i(TAG, "serverAuthCode:" + authAccount.getAuthorizationCode());
            } else {
                //登录失败
                Log.e(TAG, "sign in failed:" + ((ApiException) authAccountTask.getException()).getStatusCode());
            }
        }


    }

    /**
     * 请勿修改,否则可能影响考试成绩
     */

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.hwid_signin) {
            // 华为帐号登录
            onAccountLogin();
        } else if (v.getId() == R.id.hwid_signout) {
            // 华为帐号登出
            onAccountSignOut();
        }
    }

    /**
     * 请勿修改,否则可能影响考试成绩
     * 将AuthAccount转换为HwIdUser对象
     */
    @NotNull
    private HwIdUser getHwIdUser(AuthAccount authAccount) {
        HwIdUser user = new HwIdUser();
        user.setName(authAccount.getGivenName());
        user.setNickName(authAccount.getDisplayName());
        user.setEmail(authAccount.getEmail());
        user.setUnionId(authAccount.getUnionId());
        user.setOpenId(authAccount.getOpenId());
        return user;
    }

    /**
     * 请勿修改,否则可能影响考试成绩
     * 华为帐号登录成功之后,更新界面
     */
    private void updateUI(HwIdUser user) {
        if (null != user) {
            mLoginStatus.setText(getString(R.string.login_success));
            mName.setText(getString(R.string.hwid_name, user.getName()));
            mEmail.setText(getString(R.string.hwid_email, user.getEmail()));
            mNickName.setText(getString(R.string.tv_nickname, user.getNickName()));
            mUnionId.setText(getString(R.string.hwid_unionId, user.getUnionId()));
            mOpenId.setText(getString(R.string.hwid_openId, user.getOpenId()));
        }
    }

    /**
     * 请勿修改,否则可能影响考试成绩
     * 华为帐号登出成功之后,更新界面
     */
    private void updateSignOutResult() {
        mLoginStatus.setText(getString(R.string.signout_success));
        mName.setText(getString(R.string.hwid_name));
        mEmail.setText(getString(R.string.hwid_email));
        mNickName.setText(getString(R.string.tv_nickname));
        mUnionId.setText(getString(R.string.hwid_unionId));
        mOpenId.setText(getString(R.string.hwid_openId));
    }
}
package com.huawei.accountkit;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

import com.huawei.accountkit.beans.HwIdUser;
import com.huawei.hmf.tasks.OnCompleteListener;
import com.huawei.hmf.tasks.Task;
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.result.AuthAccount;
import com.huawei.hms.support.account.service.AccountAuthService;
import com.huawei.hms.support.hwid.ui.HuaweiIdAuthButton;

import org.jetbrains.annotations.NotNull;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private static final String TAG = "MainActivity";

    // 华为帐号登录客户端
    private AccountAuthService mAccountService;

    private TextView mLoginStatus;

    private TextView mName;

    private TextView mEmail;

    private TextView mNickName;

    private TextView mUnionId;

    private TextView mOpenId;

    /**
     * 请勿修改,否则可能影响考试成绩
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
    }

    /**
     * 除了TODO标识的地方可以修改,其他地方请勿修改,否则影响考试成绩
     */
    private void initView() {
        mLoginStatus = findViewById(R.id.login_status);
        mName = findViewById(R.id.tv_name);
        mEmail = findViewById(R.id.tv_email);
        mNickName = findViewById(R.id.tv_nickname);
        mUnionId = findViewById(R.id.tv_unionId);
        mOpenId = findViewById(R.id.tv_openId);

        // 华为帐号登录按钮
        HuaweiIdAuthButton signInButton = findViewById(R.id.hwid_signin);
        // TODO 为华为帐号登录按钮设置点击监听(MainActivity已实现OnClickListener接口)
        signInButton.setOnClickListener(this::onClick);
        signInButton.setColorPolicy(HuaweiIdAuthButton.COLOR_POLICY_WHITE);

        // 华为帐号登出按钮
        HuaweiIdAuthButton signOutBtn = findViewById(R.id.hwid_signout);
        // TODO 为华为帐号登出按钮设置点击监听(MainActivity已实现OnClickListener接口)
        signOutBtn.setOnClickListener(this::onClick);
        signOutBtn.setColorPolicy(HuaweiIdAuthButton.COLOR_POLICY_WHITE);
        signOutBtn.mButton.setText(getResources().getText(R.string.login_out_button_text));
    }

    /**
     * 华为帐号Id Token模式登录:需要考生填写
     */
    private void onAccountLogin() {
        // TODO 构造华为帐号登录选项AccountAuthParams对象
        AccountAuthParams authParams = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM).setAuthorizationCode().createParams();
        // TODO 初始化华为帐号登录客户端(mAccountService)
        mAccountService = AccountAuthManager.getService(MainActivity.this, authParams);
        // TODO 获取登录授权页面的Intent,并通过startActivityForResult拉起授权页面
        startActivityForResult(mAccountService.getSignInIntent(), 8888);
    }

    /**
     * 华为帐号的登出:需要考生填写
     */
    private void onAccountSignOut() {
        AccountAuthParams authParam = new AccountAuthParamsHelper().createParams();
        mAccountService = AccountAuthManager.getService(MainActivity.this, authParam);

        // TODO 调用华为帐号登出接口
        Task<Void> signOutTask = mAccountService.signOut();
        // TODO 为华为帐号登出结果添加监听,并在登录成功的回调中调用updateSignOutResult()方法,更新登出的结果
        signOutTask.addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(Task<Void> task) {
                updateSignOutResult();
                //完成退出后的处理
                Log.i(TAG, "signOut complete");
            }
        });

    }

    /**
     * 需要考生填写
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // TODO 从data中获取华为帐号的登录结果
        if (requestCode == 8888) {
            Task<AuthAccount> authAccountTask = AccountAuthManager.parseAuthResultFromIntent(data);
            if (authAccountTask.isSuccessful()) {
                //登录成功,获取用户的帐号信息和Authorization Code
                // TODO 判断华为帐号是否登录成功,如果登录成功,调用getHwIdUser方法获得HwIdUser对象,然后调用updateUI更新登录的结果
                AuthAccount authAccount = authAccountTask.getResult();
                HwIdUser hwIdUser = getHwIdUser(authAccount);
                updateUI(hwIdUser);
                Log.i(TAG, "serverAuthCode:" + authAccount.getAuthorizationCode());
            } else {
                //登录失败
                Log.e(TAG, "sign in failed:" + ((ApiException) authAccountTask.getException()).getStatusCode());
            }
        }


    }

    /**
     * 请勿修改,否则可能影响考试成绩
     */

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.hwid_signin) {
            // 华为帐号登录
            onAccountLogin();
        } else if (v.getId() == R.id.hwid_signout) {
            // 华为帐号登出
            onAccountSignOut();
        }
    }

    /**
     * 请勿修改,否则可能影响考试成绩
     * 将AuthAccount转换为HwIdUser对象
     */
    @NotNull
    private HwIdUser getHwIdUser(AuthAccount authAccount) {
        HwIdUser user = new HwIdUser();
        user.setName(authAccount.getGivenName());
        user.setNickName(authAccount.getDisplayName());
        user.setEmail(authAccount.getEmail());
        user.setUnionId(authAccount.getUnionId());
        user.setOpenId(authAccount.getOpenId());
        return user;
    }

    /**
     * 请勿修改,否则可能影响考试成绩
     * 华为帐号登录成功之后,更新界面
     */
    private void updateUI(HwIdUser user) {
        if (null != user) {
            mLoginStatus.setText(getString(R.string.login_success));
            mName.setText(getString(R.string.hwid_name, user.getName()));
            mEmail.setText(getString(R.string.hwid_email, user.getEmail()));
            mNickName.setText(getString(R.string.tv_nickname, user.getNickName()));
            mUnionId.setText(getString(R.string.hwid_unionId, user.getUnionId()));
            mOpenId.setText(getString(R.string.hwid_openId, user.getOpenId()));
        }
    }

    /**
     * 请勿修改,否则可能影响考试成绩
     * 华为帐号登出成功之后,更新界面
     */
    private void updateSignOutResult() {
        mLoginStatus.setText(getString(R.string.signout_success));
        mName.setText(getString(R.string.hwid_name));
        mEmail.setText(getString(R.string.hwid_email));
        mNickName.setText(getString(R.string.tv_nickname));
        mUnionId.setText(getString(R.string.hwid_unionId));
        mOpenId.setText(getString(R.string.hwid_openId));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值