您现在的位置是:亿华云 > 系统运维
HarmonyOS 第三方登录之QQ登录
亿华云2025-10-05 07:31:40【系统运维】6人已围观
简介想了解更多内容,请访问:和华为官方合作共建的鸿蒙技术社区https://harmonyos.51cto.com前言因为鸿蒙系统刚出不久,官方的第三方登录SDK还没出来,下面就介绍下在鸿蒙应用中实现QQ
想了解更多内容,第登录请访问:
和华为官方合作共建的第登录鸿蒙技术社区
https://harmonyos.51cto.com
前言
因为鸿蒙系统刚出不久,官方的第登录第三方登录SDK还没出来,下面就介绍下在鸿蒙应用中实现QQ登录的第登录方法(支持唤起QQ安卓客户端进行授权)
前期准备
登录QQ开放平台 > 应用管理 > 创建应用 ,创建一个网站应用。第登录
注意:要选择网站应用,第登录移动应用和小程序不适用该方案。第登录
编写代码
判断是第登录否已登录
获取登录状态
在入口AbilitySliceMainAbilitySlice中进行判断。
从数据库获取token的第登录值判断是网站模板否已经登录账号 (已登录返回token,未登录返回null)
// 创建数据库(这里使用官方提供的第登录“轻量级数据存储”,相关文档:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/database-preference-guidelines-0000000000030083) Preferences preferences = new DatabaseHelper(getApplicationContext()).getPreferences("DATA_NAME"); // 从数据库获取token的第登录值判断是否已经登录账号 (已登录返回token,未登录返回null) String token = preferences.getString("token",第登录null);进行相应跳转
已登录跳转至个人界面MyAbility,未登录跳转至登录界面LoginAbility.
if(token != null){ // 已登录,第登录跳转至MyAbility Intent myIntent = new Intent(); myIntent.setParam("token",第登录 token); Operation myOperation = new Intent.OperationBuilder() .withBundleName("cn.dsttl3.test") .withAbilityName("cn.dsttl3.qqlogin.MyAbility") .build(); myIntent.setOperation(myOperation); startAbility(myIntent); terminateAbility(); }else { // 未登录,跳转至LoginAbility Intent loginIntent = new Intent(); Operation loginOperation = new Intent.OperationBuilder() .withBundleName("cn.dsttl3.test") .withAbilityName("cn.dsttl3.qqlogin.LoginAbility") .build(); loginIntent.setOperation(loginOperation); startAbility(loginIntent); terminateAbility(); }登录界面的第登录操作
申请网络访问权限
在config.json添加
"reqPermissions": [ { "name": "ohos.permission.INTERNET" } ]登录界面布局文件ability_login.xml
在布局文件中添加以后webview组件
<?xml version="1.0" encoding="utf-8"?> <DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_parent" ohos:width="match_parent" ohos:alignment="center" ohos:orientation="vertical"> <ohos.agp.components.webengine.WebView ohos:id="$+id:WebView_qqlogin" ohos:height="match_parent" ohos:width="match_parent"/> </DirectionalLayout>登录界面的AbilitySlice LoginAbilitySlice.java
需要用到的几个常量
String state = UUID.randomUUID().toString();// 唯一标识,云南idc服务商成功授权后回调时会原样带回。 String client_id = "101***151";//QQ开放平台 应用 APP ID String redirect_uri = "https%3A%2F%2Fapi.dsttl3.cn%2FRedis%2FQQLogin"; //应用 网站回调域 需进行url编码,授权成功后会跳转至该链接 String authorize_url = "https://graph.qq.com/oauth2.0/authorize?response_type=code" + "&client_id=" + client_id + "&redirect_uri=" + redirect_uri + "&state="+ state;WebView的配置
WebView myWebView = (WebView) findComponentById(ResourceTable.Id_WebView_qqlogin); myWebView.getWebConfig().setJavaScriptPermit(true);//支持JavaScript myWebView.getWebConfig().setUserAgent("android");//将UserAgent设置为安卓,授权页才显示QQ客户端一键登录按钮自定义WebAgent
当WebView即将打开一个链接时调用isNeedLoadUrl方法,当在网页上点击“一键登录”时,打开QQ客户端
wtloginmqq是QQ安卓客户端URL Scheme
if (request.getRequestUrl().toString().startsWith("wtloginmqq")){ // 打开QQ客户端 Intent qqIntent = new Intent(); Operation qqOperation = new Intent.OperationBuilder() .withAction("android.intent.action.VIEW") .withUri(Uri.parse(request.getRequestUrl().toString())) .build(); qqIntent.setOperation(qqOperation); startAbility(qqIntent);因为目前还找不到网页端唤起鸿蒙应用的方法,所以QQ客户端回调的code放在自己服务器处理。
授权成功后,会打开之前在QQ开放平台设置的高防服务器回调域redirect_uri
示例:https://api.dsttl3.cn/Redis/QQLogin?code=
很赞哦!(2)
相关文章
- 因为域名解析需要同步到DNS根服务器,而DNS根服务器会不定时刷,只有DNS根服务器刷新后域名才能正常访问,新增解析一般会在10分钟左右生效,最长不会超过24小时,修改解析时间会稍微延长。
- 这位改变苹果的程序员走了,他发明了Objective-C语言
- 鸿蒙开发HUAWEI DevEco Device Tool 2.0 Beta1全新发布,提高开发效率
- 从微信小程序到鸿蒙JS开发【02】-数据绑定&tabBar&swiper
- 二、如何选择合适的域名
- 如何用DPA结合Zabbix分析定位SQL Server的tempdb数据库暴增问题
- 一文读懂Base64
- 微软Office 365迎来企业数字中台这一大敌
- 5. 四种状态过后,域名管理机构释放域名给公众注册。
- 鸿蒙HarmonyOS三方件开发指南(8)-RoundedImage