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

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"><Buttonandroid:id="@+id/bt_id_token"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="登入"/><Buttonandroid:id="@+id/account_siqnout"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="退出"/><Buttonandroid: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;@Overrideprotected 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);}@Overridepublic 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>() {@Overridepublic void onSuccess(Void aVoid) {//                       //这边监听退出成功事件 成功退出之后打印消息Log.i(TAG,"退出当前用户成功");}}).addOnFailureListener(new OnFailureListener() {@Overridepublic void onFailure(Exception e) {Log.i(TAG,"退出当前用户失败");}});break;case R.id.cancel:Task<Void> task = service.cancelAuthorization();task.addOnSuccessListener(new OnSuccessListener<Void>() {@Overridepublic void onSuccess(Void aVoid) {Log.i(TAG,"取消成功");}});task.addOnFailureListener(new OnFailureListener() {@Overridepublic void onFailure(Exception e) {Log.i(TAG,"取消失败");}});task.addOnFailureListener(new OnFailureListener() {@Overridepublic void onFailure(Exception e) {Log.i(TAG,"取消失败"+e.getClass().getSimpleName());}});break;}}@Overrideprotected 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 TokenAuthAccount 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。

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

  1. switch未能连接ea服务器,《Apex》无法完成EA账号登入问题,迅游支持Switch联机加速...

    <Apex英豪>现已正式上线Switch渠道,上线之后招引了许多Switch玩家下载体会,不过许多Switch主机玩家反映也遇到了和PS4玩家以及Xbox玩家相同的网络问题,在登录线上的时 ...

  2. 操作系统之银行家算法—详解流程及案例数据

    操作系统之进程调度--优先权法和轮转法(附上样例讲解) 操作系统之银行家算法-详解流程及案例数据 操作系统之多线程编程-读者优先/写者优先详解 操作系统之存储管理--FIFO算法和LRU算法 操作系统 ...

  3. jsapi支付签名_PHP实现微信支付(jsapi支付)流程步骤详解

    最近接触到一个项目,涉及到微信支付,搞微信开发这么久以来,还没搞过支付,之前也就搞过公众号发红包,感谢前辈们的探索,我看了他们的博文,让我少走了很多弯路. 前期准备: 1.微信认证服务号,并且开通了微 ...

  4. 怎么在手机上取消双重认证_用手机在淘宝上怎么开网店?流程步骤详解

       这是一篇关于"用手机在淘宝上怎么开网店?流程步骤详解"的文章: 开网店因为门槛低.收益大,成为众多年轻人创业的首选.很多新手朋友们都想开一家属于自己的网店,但是苦于没有经验, ...

  5. ebay注册流程_2017年eBay注册开店流程图文详解

    原标题:2017年eBay注册开店流程图文详解 今天跟大家分享最新的eBay注册开店流程,希望对卖家小伙伴们有所帮助.我们先简单了解一下eBay注册条件. 企业注册eBay需满足以下条件: 合法登记的 ...

  6. 极客战记计算机科学2村庄守卫,极客战记任务攻略 任务攻略流程汇总详解[多图]...

    极客战记任务怎么做,这个游戏要怎么玩,如何快速上手呢?下面是友情MT为大家带来的极客战记任务攻略,任务攻略流程汇总详解,希望能帮助到大家! 极客战记任务攻略 第一关,代码仅仅是针对人的行走方向 所以右 ...

  7. python流程控制语句-python学习 流程控制语句详解

    ###################### 分支语句 python3.5 ################ #代码的缩进格式很重要 建议4个空格来控制 #根据逻辑值(True,Flase)判断程序的 ...

  8. 聊聊无线充电——华为Mate RS保时捷版无线充电器详解(上篇)

    随着华为Mate RS成为手机奢侈件的新宠后:人们聊起RS保时捷系列的话题也多了起来,今天我们来聊聊这款手机的配件--华为Mate RS保时捷版无线充电器,然后再展开聊聊无线充电这些事 一.华为Mat ...

  9. 海信电视云账号连不上服务器,海信云账号如何使用?图文教程详解

    原标题:海信云账号如何使用?图文教程详解 海信云账号可以在海信智能电视等海信一系列等多种智能终端上登录并共享资源.登录后,可以全面享受海信应用商城.媒体云.围观等服务. 海信云账号是海信专为海信智能电 ...

最新文章

  1. expert one on one oracle,数据库表——EXPERT ONE-ON-ONE ORACLE
  2. 如何利用OpenSSL生成证书
  3. 阿里巴巴400集python教程_递归的练习课程 | Python从入门到精通:高阶篇之十二-阿里云开发者社区...
  4. C++ —— C++程序编译的四个过程
  5. 渲染器跑分_碾压图灵43!NVIDIA安培第一个跑分震撼出炉
  6. linux系统下c语言程序需要改动的地方,如何在Linux系统环境下进行C语言开发
  7. 灵动标签调用栏目自定义字段
  8. Linux---单例模式
  9. Bailian2676 整数的个数【入门】(POJ NOI0105-11)
  10. Docker安装vi命令
  11. css中的background的几个属性(background-attachment/background-origin,background-clip等)
  12. 墨卡托与经纬度转换工具
  13. 「缠师课后回复精选」第15课:没有趋势,没有背驰。
  14. 测试软件的稳定性,客户端稳定性测试
  15. aspose-words破解版使用java版
  16. yeelink平台试玩
  17. 贾跃亭:FF将一如既往地为打造共享智能出行生态的愿景而奋斗
  18. Android Notification 没有声音 没有震动 的情况
  19. mysql 2005开发版_Microsoft SQL Server 2005简体中文开发版下载
  20. Windows——重装系统时Windows 启动管理器进入系统和高级选项都数字签名错误解决方案

热门文章

  1. Softmax回归及损失函数(李沐深度学习课程、自用)
  2. Java如何控制生成pdf的大小_如何使用pdfbox或其他Java库减小合并的PDF / A-1b文件的大小...
  3. 用地预审与选址意见书
  4. 又是一年WWDC,暨回顾去年之旅——Part II
  5. 【codecs】视频显示分辨率格式分析
  6. java小程序体重监测,分享个可以记录体重的小程序,坚持才能瘦
  7. vue搭配element, el-input出现高频无法粘贴文本的情况
  8. 减小PDF文档大小(转载)
  9. RTK和RTD有什么区别
  10. 使用DHT11和51单片机进行温湿度的读取(保证好用版本)