HMS华为账号登入全部流程加详解流程机制

安卓登入华为账号获取授权全过程

1.第一步创建一个安卓项目

在这里插入图片描述

2.创建完我们先把登入页面的前端ui写出来(源码放在下方)

在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="20px"
    >
    <Button
        android:id="@+id/bt_id_token"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="登入"
        />
    <Button
        android:id="@+id/account_siqnout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="退出"
        />
    <Button
        android:id="@+id/cancel"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="取消"
        />

</LinearLayout>

3.现在架构已经创建完,现在我们先要创建jks密钥(用来跟华为开发者联盟个人项目之间进行串联的密钥)

  • 注意该密钥要创建在本项目的app下
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 所有的信息填写完点击ok
    在这里插入图片描述
  • 信息无误点击 next
    在这里插入图片描述
    点击Finish就会在你的app目录下创建出对应的jks文件
    在这里插入图片描述

4.修改配置文件的一些地方

(其实在网页版的华为开发者联盟中会出现教程,这边建议跟着我的方式配置,手敲就行,根据图片中文字教程来) (请严格按照顺序来做)
!修改该配置放在第一步的原因是因为,需要先帮gradle配置好maven,后面的配置才可以依赖该maven导入对应的包,不然就会报错。
在这里插入图片描述

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        google()
        jcenter()
        mavenCentral()
        maven { url 'https://developer.huawei.com/repo/' }
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.1.2"
        classpath 'com.huawei.agconnect:agcp:1.5.2.300'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven {url 'https://developer.huawei.com/repo/'}
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
至此所有的配置修改完毕,请不要再更改任何配置

5.MainActivity的编写以及介绍华为的用户授权流程

首先我们要了解帐号登录是基于OAuth 2.0协议标准和OpenID Connect协议,它支持的授权登录方式有两种,Authorization Code和ID Token,也就是说应用可以通过获取帐号用户身份认证信息(ID Token)或用户的临时授权票据(Authorization Code),使用户安全登录。
这里也不说太深奥,具体就是我们登入成功之后服务器会返沪一个ID TOKEN,ID Token是已经登录用户的身份信息,其中包括用来验证身份信息的签名信息。ID Token模式就是用户身份认证信息的模式,这种模式同时适合单机应用和有自己服务器的应用,可以在这个Token中取得信息。ID Token模式是应用程序直接拿到用户的ID Token信息,使用应用时应用本地通过校验ID Token的有效性来完成鉴权。综上所述,当App只有客户端时,我们可以通过ID Token模式实现用户授权。
在这里插入图片描述
言归正传进入代码部分(后面会放全部源码)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
至此代码部分讲解到此结束 附上源码

package com.huawei.hmsmyapplicationdemo2;

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

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

import com.huawei.hmf.tasks.OnFailureListener;
import com.huawei.hmf.tasks.OnSuccessListener;
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;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
//    创建静态常量TAG代表本类名,主要作用是用来做日志处理查询
    private static final  String TAG= "MainActivity";
    private AccountAuthParams authParams;//
    private AccountAuthService service;
    private Button bt_ID_token;
    private Button account_Signout;
    private Button cancel_authorization;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt_ID_token = findViewById(R.id.bt_id_token);
        account_Signout = findViewById(R.id.account_siqnout);
        cancel_authorization = findViewById(R.id.cancel);
        bt_ID_token.setOnClickListener(this);
        account_Signout.setOnClickListener(this);
        cancel_authorization.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
//        创建HuaweiIdAuthParams对象,该对象就是利用AccountAuthParamsHelper构造一个AccountAuthParams对象,
//        用该对象设置ID TOKEN模式
        authParams=new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM)
                .setIdToken() //设置使用ID Token模式(必写)
                .setAccessToken()//设置成功Token模式 (选写)
                .createParams(); //创建这个params (必写)

        /**HuaweiIdAuthService使用HuaweiIdAuthParams对象作为参数,它定义了静默授权、退出、取消授权等方法,
        其中getSignInIntent方法返回了一个intent对象。
        Intent对象是activity传递信息的媒介,它包含了启动授权activity的intent信息,
         客户端的后续操作都需要通过这个对象的API来完成,比如拉起授权页面、登出华为账号等功能。
         **/
        service = AccountAuthManager.getService(MainActivity.this,authParams);

        switch (v.getId()){
            //利用switch来判断点击的是 登入、取消、退出 按钮
            case R.id.bt_id_token:
//                获取登入授权页面的Intent,并通过startActivityDorResult拉起授权页面(该方法就是拉起华为登入页面的方法)
                startActivityForResult(service.getSignInIntent(),8888);
                break;
            case R.id.account_siqnout:
                //点击了退出按钮就进行了退出 调用方法 signout();
                Task<Void> signOutTask = service.signOut();
                signOutTask.addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
//                       //这边监听退出成功事件 成功退出之后打印消息
                        Log.i(TAG,"退出当前用户成功");
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(Exception e) {
                        Log.i(TAG,"退出当前用户失败");
                    }
                });
                break;
            case R.id.cancel:
                Task<Void> task = service.cancelAuthorization();
                task.addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Log.i(TAG,"取消成功");
                    }
                });
                task.addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(Exception e) {
                        Log.i(TAG,"取消失败");
                    }
                });
                task.addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(Exception e) {
                        Log.i(TAG,"取消失败"+e.getClass().getSimpleName());
                    }
                });
                break;
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == 8888){
            Task<AuthAccount> authAccountTask = AccountAuthManager.parseAuthResultFromIntent(data);
            if(authAccountTask.isSuccessful()){
                //登录成功,获取用户的帐号信息和ID Token
                AuthAccount authAccount = authAccountTask.getResult();
                Log.i(TAG,"idToken:"+authAccount.getIdToken());
                Log.i(TAG,"DisplayName:"+authAccount.getDisplayName());
                Log.i(TAG,"AvatarUriString:"+authAccount.getAvatarUriString());
            }else {
//                华为账号登入失败
                Log.e(TAG,"登入失败:"+((ApiException)authAccountTask.getException()).getStatusCode());
            }
        }
    }
}

6.这一步需要登入到我们华为开发者联盟中操作(具体看图讲解)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
至此浏览器操作结束。

6.测试

首先要先下一个逍遥模拟器,然后将机型改为华为,如果有华为的手机的可以用自己手机,然后再逍遥模拟器中下载一个hms.apk并且安装。
然后我们打开逍遥模拟器,安卓就会自动的匹配模拟器端。
在这里插入图片描述

运行之后
在这里插入图片描述
点击登入成功拉起登入页面
在这里插入图片描述
最后看看日志
在这里插入图片描述
最后告诫配置地方那个一定要好好看,注意点都有注释。
如果有疑问可以联系我qq 332808083。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值