• 1
  • 2
  • 3
  • 4

首页 / 行业

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

2021-10-11 14:21:00

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

前期准备

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

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

登录开放平台第三方登录网站

  • 1
  • 2
  • 3
  • 4

最新内容

手机

相关内容

  • 1
  • 2
  • 3

猜你喜欢