前期准备
在微博开放平台注册一个网站应用,微博开放平台地址如下:
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 完成。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
webview
+关注
关注
0文章
7浏览量
3121 -
HarmonyOS
+关注
关注
79文章
1966浏览量
29958
原文标题:HarmonyOS微博第三方登录实现
文章出处:【微信号:gh_834c4b3d87fe,微信公众号:OpenHarmony技术社区】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
鸿蒙Flutter实战:05-使用第三方插件
# 鸿蒙Flutter 实战:使用第三方插件
在鸿蒙Flutter开发中,如果涉及到使用原生功能,就要使用插件。使用插件有两种方式,一种是自己编写原生ArkTS代码,在Dart侧调用。另外一种
发表于 10-22 21:54
三维天地低代码开发平台助力第三方质检行业数据可视化
第三方检验是由独立于买卖双方利益之外的第三方机构(例如专业的监督检验机构)执行的,这些机构以公正、公平、权威的非当事人身份,依据双方共同认可的法律、标准和合同等进行商品的符合性检验和认证活动
微软或将开放Xbox主机授权给第三方厂商
据悉,5 月 26 日,知名媒体 Windows Central 的编辑 Jez Corden 揭露了微软即将遵循第三方手柄流程,允许在其 XBOX 主机上引入第三方产品。
MacPaw将在欧盟成员国推出第三方应用商店Setapp
5月14日,MacPaw正式宣布将在今年5月14日在欧盟成员国面向苹果iPhone推出第三方应用商城Setapp。自今年2月起,MacPaw已着手筹备该平台。S
谷歌开放ZenDeviceEffects API,助第三方应用实现睡前屏幕管理
据报道,谷歌近日在安卓 15 开发者预览版 2 中推出了全新 ZenDeviceEffects API,允许第三方应用访问数字健康的就寝模式功能。
Labview如何内嵌操作第三方EXE程序!
自己在网上搜了下相关资料,能把第三方EXE内嵌进入容器里,但是有个问题,这个第三方软件必须手动拖到容器正中间,手动最大化。请问有什么方法可以自动实现吗?
下图是我内嵌的POLL 软件。如图!
发表于 04-18 14:26
微软或将引入第三方数字游戏商店至Xbox平台
微软选择引入这些第三方游戏平台,一方面可以增加自身拥有的硬件资源和服务优势;另一方面,也是为了吸引那些在电脑端能够自由选择游戏购买渠道的游戏用户。据悉,此前的Xbox系列产品都是只内置自家的商城。
安卓版Chrome浏览器现已支持第三方密码管理器调用
据报道,数据解析专家Leppeva64近日在安卓版谷歌Chrome浏览器的源代码中透露,该浏览器已在安卓平台上实现了对第三方密码管理器的调用支持,并覆盖Stable、Beta及Canary版本。
Meta Quest头显将支持多款安卓第三方应用并行
Meta已悄然启动了与此相关的功能,意味着Quest头显可同时操作多个第三方Android应用。在此之前,Quest对第三方Android应用有严格限制,用户每次仅能打开一个,无法实现同屏幕并行多个
苹果iOS 17.4版允许欧盟地区用户使用第三方应用商店下载应用
3月6日,苹果正式推出iOS 17.4版本,首次符合欧州《数字市场法》规定,引入“第三方应用商店”选项,让iPhone用户能从非App Store处下载应用程序。
MacPaw将于4月在欧洲市场推出Setapp第三方应用商城
3月1日报道,知名厂商MacPaw于今日发表声明,宣称其自有的第三方应用商城Setapp将进军欧洲市场,发布会定于今年4月举行,并且官网预告了可供用户试用的候选页面,以吸引更多人参与到Setapp移动版本Beta的测试中来。
python第三方库有哪些
Python 作为一门功能强大的编程语言,拥有丰富的第三方库,几乎覆盖了各个领域的应用。下面是一些常见且广泛应用的 Python 第三方库的总结,希望能为您提供帮助。 NumPy(Numerical
评论