首页 / 行业
HarmonyOS微博第三方登录实现(内附代码)
2021-10-11 14:21:00
前期准备
在微博开放平台注册一个网站应用,微博开放平台地址如下:
https://open.weibo.com/connect
进入正题
①创建一个登录页面的 Ability
因为使用的是网站接入的方式,所以登录使用 WebView 来实现。
登录页布局文件:<?xml version="1.0" encoding="utf-8"?><DirectionalLayoutxmlns:ohos="http://schemas.huawei.com/res/ohos"ohos:height="match_parent"ohos:width="match_parent"ohos:orientation="vertical"><ohos.agp.components.webengine.WebViewohos: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即将打开一个链接时会调用此方法@OverridepublicbooleanisNeedLoadUrl(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中带上codeintent.setParam("code",code);Operationoperation=newIntent.OperationBuilder().withDeviceId("").withBundleName("cn.dsttl3.dome.weibologin").withAbilityName("cn.dsttl3.dome.weibologin.MyAbility").build();intent.setOperation(operation);startAbility(intent);//结束当前AbilityterminateAbility();}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(){@Overridepublicvoidrun(){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(){@Overridepublicvoidrun(){text.setText("登录成功:token="+w.getAccess_token());}});}catch(IOExceptione){e.printStackTrace();}}}).start();
获取微博 Token 完成。编辑:jq
最新内容
手机 |
相关内容
SoC芯片上的寄存器设计与验证
SoC芯片上的寄存器设计与验证,验证,寄存器,芯片,地址,正确性,操作,SoC芯片(System on Chip)是一种集成了多个功能模块的芯片,包括处理I2C地址切换电路
I2C地址切换电路,电路图,消费类电子电路图,I2C地址切换电路 切换,I2C地址切换电路MAR地址寄存器原理图
MAR地址寄存器原理图,电路图,信号处理电子电路图,MAR地址寄存器原理图 寄存器, MAR为存储器地址寄存器,其功能是存储操作数在内存中地址译码电路设计实验报告
地址译码电路设计实验报告,电路图,数字电路图,地址译码电路设计实验报告 译码电路, 地址译码方式 地址译码有两种方式,一种是未来智能技术架构的潜在应用和影响
未来智能技术架构的潜在应用和影响因素,技术架构,智能,开放平台,物联网,企业,政府,随着科技的不断发展,智能技术EP1K30QC208-3N正日什么是主存储器,主存储器的基本结构
什么是主存储器,主存储器的基本结构、工作原理、技术指标、分类、应用技术、主存优化、主存部署及发展现状,主存,主存储器,分类,结什么是主存储器,主存储器的基本结构
什么是主存储器,主存储器的基本结构、工作原理、技术指标、分类、应用技术、主存优化、主存部署及发展现状,主存,主存储器,分类,结基于FPGA和高速DAC的DDS设计与频率
基于FPGA和高速DAC的DDS设计与频率调制,调制,频率,输出,控制,信号,相位,直接数字频率合成器(DDS)是一种基于数字技术实现的频率合成技