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

    浏览量

    3121
  • HarmonyOS
    +关注

    关注

    79

    文章

    1966

    浏览量

    29958

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

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

收藏 人收藏

    评论

    相关推荐

    鸿蒙Flutter实战:05-使用第三方插件

    # 鸿蒙Flutter 实战:使用第三方插件 在鸿蒙Flutter开发中,如果涉及到使用原生功能,就要使用插件。使用插件有两种方式,一种是自己编写原生ArkTS代码,在Dart侧调用。另外一种
    发表于 10-22 21:54

    维天地低代码开发平台助力第三方质检行业数据可视化

    第三方检验是由独立于买卖双方利益之外的第三方机构(例如专业的监督检验机构)执行的,这些机构以公正、公平、权威的非当事人身份,依据双方共同认可的法律、标准和合同等进行商品的符合性检验和认证活动
    的头像 发表于 08-09 13:59 223次阅读
    <b class='flag-5'>三</b>维天地低<b class='flag-5'>代码</b>开发平台助力<b class='flag-5'>第三方</b>质检行业数据可视化

    请问esp8266会开放使用第三方云服务器吗?

    如题,esp8266会开放使用第三方云服务器吗,如百度,阿里云服务器?
    发表于 07-12 11:40

    是否有可能在支持gdb的第三方集成开发环境中使用DAS配置调试?

    是否有可能在支持 gdb 的第三方集成开发环境中使用 DAS 配置调试?
    发表于 07-02 07:29

    微软或将开放Xbox主机授权给第三方厂商

    据悉,5 月 26 日,知名媒体 Windows Central 的编辑 Jez Corden 揭露了微软即将遵循第三方手柄流程,允许在其 XBOX 主机上引入第三方产品。
    的头像 发表于 05-27 15:18 603次阅读

    MacPaw将在欧盟成员国推出第三方应用商店Setapp

    5月14日,MacPaw正式宣布将在今年5月14日在欧盟成员国面向苹果iPhone推出第三方应用商城Setapp。自今年2月起,MacPaw已着手筹备该平台。S
    的头像 发表于 05-14 10:14 323次阅读

    谷歌开放ZenDeviceEffects API,助第三方应用实现睡前屏幕管理

    据报道,谷歌近日在安卓 15 开发者预览版 2 中推出了全新 ZenDeviceEffects API,允许第三方应用访问数字健康的就寝模式功能。
    的头像 发表于 05-08 16:41 439次阅读

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

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

    微软或将引入第三方数字游戏商店至Xbox平台

    微软选择引入这些第三方游戏平台,一面可以增加自身拥有的硬件资源和服务优势;另一面,也是为了吸引那些在电脑端能够自由选择游戏购买渠道的游戏用户。据悉,此前的Xbox系列产品都是只内置自家的商城。
    的头像 发表于 03-27 15:51 447次阅读

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

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

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

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

    苹果iOS 17.4版允许欧盟地区用户使用第三方应用商店下载应用

    3月6日,苹果正式推出iOS 17.4版本,首次符合欧州《数字市场法》规定,引入“第三方应用商店”选项,让iPhone用户能从非App Store处下载应用程序。
    的头像 发表于 03-06 10:51 795次阅读

    MacPaw将于4月在欧洲市场推出Setapp第三方应用商城

    3月1日报道,知名厂商MacPaw于今日发表声明,宣称其自有的第三方应用商城Setapp将进军欧洲市场,发布会定于今年4月举行,并且官网预告了可供用户试用的候选页面,以吸引更多人参与到Setapp移动版本Beta的测试中来。
    的头像 发表于 03-01 10:16 501次阅读

    调用第三方API接口会遇到哪些问题?如何解决?

    在实际工作中,我们经常需要在项目中调用第三方API接口,获取数据,或者上报数据,进行数据交换和通信。
    的头像 发表于 11-30 11:05 2144次阅读
    调用<b class='flag-5'>第三方</b>API接口会遇到哪些问题?如何解决?

    python第三方库有哪些

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