0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HarmonyOS微博第三方登录实现(内附代码)

OpenHarmony技术社区 来源:鸿蒙技术社区 作者: dsttl3点cn 2021-10-11 14:21 次阅读

前期准备

在微博开放平台注册一个网站应用,微博开放平台地址如下:

https://open.weibo.com/connect

进入正题

①创建一个登录页面的 Ability

因为使用的是网站接入的方式,所以登录使用 WebView 来实现。

登录页布局文件:

<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:orientation="vertical">

<ohos.agp.components.webengine.WebView
ohos:id="$+id:WebView_weibologin"
ohos:height="match_parent"
ohos:width="match_parent"/>

DirectionalLayout>

②在登录页 AbilitySlice 中对 WebView 进行设置。

publicvoidonStart(Intentintent){
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_wei_bo_login);

WebViewmyWebView=(WebView)findComponentById(ResourceTable.Id_WebView_weibologin);
myWebView.getWebConfig().setJavaScriptPermit(true);

//自定义WebAgent用于登录的相关操作
myWebView.setWebAgent(newWebAgent(){

//isNeedLoadUrl当WebView即将打开一个链接时会调用此方法
@Override
publicbooleanisNeedLoadUrl(WebViewwebView,ResourceRequestrequest){
//request.getRequestUrl().toString().startsWith("sinaweibo")
//当请求链接为sinaweibo开头(点击网页上一键登录会唤起微博客户端)时,使用下面的方法唤起微博客户端。
if(request.getRequestUrl().toString().startsWith("sinaweibo")){
Intentintent=newIntent();
intent.setAction("android.intent.action.VIEW");
intent.setUri(Uri.parse(request.getRequestUrl().toString()));
intent.addFlags(Intent.FLAG_ABILITY_NEW_MISSION);
startAbility(intent);
returnfalse;
}

//当在微博客户端授权后,会重定向至定义的网址,示例中重定向至https://api.dsttl3.cn/?code=【code的值】,这时候就可以从链接中获取到code进行下一步了。这里把code传入下个页面
if(request.getRequestUrl().toString().startsWith("https://api.dsttl3.cn)){
Stringcode=request.getRequestUrl().toString().substring(28);
Intentintent=newIntent();
//在intent中带上code
intent.setParam("code",code);
Operationoperation=newIntent.OperationBuilder()
.withDeviceId("")
.withBundleName("cn.dsttl3.dome.weibologin")
.withAbilityName("cn.dsttl3.dome.weibologin.MyAbility")
.build();
intent.setOperation(operation);
startAbility(intent);
//结束当前Ability
terminateAbility();
}
returntrue;
}
});
//授权连接,需要自己修改
myWebView.load("https://api.weibo.com/oauth2/authorize?client_id=2593566539&response_type=code&forcelogin=false&scope=all&redirect_uri=https%3A%2F%2Fapi.dsttl3.cn");
}

③获取到 code 后,在 MyAbility 中获取微博 token。

publicvoidonStart(Intentintent){
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_my);
Texttext=(Text)findComponentById(ResourceTable.Id_text_helloworld);
Stringcode=intent.getStringParam("code");
newThread(newRunnable(){
@Override
publicvoidrun(){
try{
StringYOUR_CLIENT_ID="2593566539";
StringYOUR_CLIENT_SECRET="383fc6262e954e18f5b7efe3c9899284";
StringYOUR_REGISTERED_REDIRECT_URI="https://api.dsttl3.cn";
StringACCESS_TOKEN_URL="https://api.weibo.com/oauth2/access_token";
OkHttpClientclient=newOkHttpClient();
FormBodybody=newFormBody.Builder()
.add("client_id",YOUR_CLIENT_ID)
.add("client_secret",YOUR_CLIENT_SECRET)
.add("grant_type","authorization_code")
.add("redirect_uri",YOUR_REGISTERED_REDIRECT_URI)
.add("code",code).build();
RequestokRequest=newRequest.Builder().url(ACCESS_TOKEN_URL).header("referer",YOUR_REGISTERED_REDIRECT_URI).post(body).build();
Callcall=client.newCall(okRequest);
Responsere=call.execute();
Strings=re.body().string();
Gsongson=newGson();
WeiBoTokenJsonw=gson.fromJson(s,WeiBoTokenJson.class);
getUITaskDispatcher().asyncDispatch(newRunnable(){
@Override
publicvoidrun(){
text.setText("登录成功:token="+w.getAccess_token());
}
});
}catch(IOExceptione){
e.printStackTrace();
}
}
}).start();
获取微博 Token 完成。
编辑:jq
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • webview
    +关注

    关注

    0

    文章

    7

    浏览量

    3082
  • HarmonyOS
    +关注

    关注

    79

    文章

    1772

    浏览量

    29232

原文标题:HarmonyOS微博第三方登录实现

文章出处:【微信号:gh_834c4b3d87fe,微信公众号:OpenHarmony技术社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Labview如何内嵌操作第三方EXE程序!

    自己在网上搜了下相关资料,能把第三方EXE内嵌进入容器里,但是有个问题,这个第三方软件必须手动拖到容器正中间,手动最大化。请问有什么方法可以自动实现吗? 下图是我内嵌的POLL 软件。如图!
    发表于 04-18 14:26

    stm32H743IIT6串口2跟第三方设备通讯,不插USB就通讯不了怎么解决?

    stm32H743IIT6串口2跟第三方设备通讯。插上USB就可以通讯,不插USB就通讯不了,有没有大神帮忙解决下
    发表于 03-22 06:42

    安卓版Chrome浏览器现已支持第三方密码管理器调用

    据报道,数据解析专家Leppeva64近日在安卓版谷歌Chrome浏览器的源代码中透露,该浏览器已在安卓平台上实现了对第三方密码管理器的调用支持,并覆盖Stable、Beta及Canary版本。
    的头像 发表于 03-19 11:04 225次阅读

    Meta Quest头显将支持多款安卓第三方应用并行

    Meta已悄然启动了与此相关的功能,意味着Quest头显可同时操作多个第三方Android应用。在此之前,Quest对第三方Android应用有严格限制,用户每次仅能打开一个,无法实现同屏幕并行多个
    的头像 发表于 03-11 10:58 202次阅读

    使用cubemx 生成usb驱动和配置第三方fatfs,fread读取大于100k的文件,会超时的原因?

    使用cubemx 生成usb驱动和配置第三方fatfs,打开文件没有报错,使用fread读取文件的时候大于100k的文件,会读超时,小于100k正常读完,为什么
    发表于 03-07 06:35

    python第三方库有哪些

    Python 作为一门功能强大的编程语言,拥有丰富的第三方库,几乎覆盖了各个领域的应用。下面是一些常见且广泛应用的 Python 第三方库的总结,希望能为您提供帮助。 NumPy(Numerical
    的头像 发表于 11-29 14:31 799次阅读

    HarmonyOS/OpenHarmony原生应用开发-华为Serverless认证服务说明(二)

    /邮箱+验证码”或“本机号码一键登录”的方式来登录您的应用。 三方平台帐号登录,支持用户使用华为账号以及信、QQ、
    发表于 10-10 14:59

    最受欢迎的第三方平台——呼叫中心系统

    中小企业一定要选择正规的呼叫中心供应商,只有应有强大的第三方合作平台,才能拥有更专业的系统团队以及系统维护平台,只有可信的团队才能为企业带来良好的业绩。 本公司呼叫中心系统凭借多年的呼叫中心
    发表于 09-20 17:54

    如何在蜂鸟处理器核的基础上扩展第三方指令?

    想咨询一下如何在蜂鸟处理器核的基础上扩展第三方指令,使用户自定义指令,并如何构建机器码等内容? 我看了胡老师的RISC-V处理器设计的书里面讲的使用custom1-4来进行扩展,并以EAI为实例进行
    发表于 08-16 07:36

    如何确定OpenVINO中第三方组件的相关许可?

    无法确定 OpenVINO™中第三方组件的相关许可。
    发表于 08-15 06:45

    学会安装第三方开源库

    你好,我是爱吃鱼香ROS的小鱼。秉承着拒绝重复造轮子的ROS精神,本节我们学习如何在我们的工程里安装第三方开源库。
    的头像 发表于 07-13 14:35 616次阅读
    学会安装<b class='flag-5'>第三方</b>开源库

    第三方供应商风险评估|不要单独管理第三方风险|虹科分享

    使用ProcessUnity和虹科网络安全评级的整体方法保护您的供应商生态系统赛义亚研究所的一项新研究发现,98%的组织与遭受入侵的第三方有业务往来。报告还发现,公司平均有11个第三方关系,以及数百
    的头像 发表于 05-31 09:34 550次阅读
    <b class='flag-5'>第三方</b>供应商风险评估|不要单独管理<b class='flag-5'>第三方</b>风险|虹科分享

    调用第三方 API 接口会遇到哪些问题

    了 11、接口时好时坏 12、文档和接口逻辑不一致 13、欠费了   前言 在实际工作中,我们经常需要在项目中调用第三方API接口,获取数据,或者上报数据,进行数据交换和通信。 那么,调用第三方 API 接口会遇到哪些问题?如何解决这些问题呢? 这篇文章就跟大家一起聊聊
    的头像 发表于 05-29 14:31 915次阅读

    Vivado关联第三方编辑器的方法

    Vivado是一个非常强大的工具,但是在一些方面可能不能完全满足我们的需求,比如代码编辑器的功能。幸运的是,Vivado允许我们关联第三方编辑器来扩展其代码编辑器的功能。本文将介绍如何配置Vivado与
    的头像 发表于 05-16 16:36 879次阅读
    Vivado关联<b class='flag-5'>第三方</b>编辑器的方法

    在SpringBoot中重试调用第三方API教程

    作为后端程序员,我们的日常工作就是调用一些第三方服务,将数据存入数据库,返回信息给前端。但你不能保证所有的事情一直都很顺利。像有些第三方API,偶尔会出现超时。此时,我们要重试几次,这取决于你的重试策略。
    的头像 发表于 05-11 10:43 474次阅读