0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

HarmonyOS微博第三方登錄實現(xiàn)(內附代碼)

OpenHarmony技術社區(qū) ? 來源:鴻蒙技術社區(qū) ? 作者: dsttl3點cn ? 2021-10-11 14:21 ? 次閱讀

前期準備

在微博開放平臺注冊一個網(wǎng)站應用,微博開放平臺地址如下:

https://open.weibo.com/connect

進入正題

①創(chuàng)建一個登錄頁面的 Ability

因為使用的是網(wǎng)站接入的方式,所以登錄使用 WebView 來實現(xiàn)。

登錄頁布局文件:

<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開頭(點擊網(wǎng)頁上一鍵登錄會喚起微博客戶端)時,使用下面的方法喚起微博客戶端。
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;
}

//當在微博客戶端授權后,會重定向至定義的網(wǎng)址,示例中重定向至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
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • webview
    +關注

    關注

    0

    文章

    7

    瀏覽量

    3104
  • HarmonyOS
    +關注

    關注

    79

    文章

    1947

    瀏覽量

    29743

原文標題:HarmonyOS微博第三方登錄實現(xiàn)

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區(qū)】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    維天地低代碼開發(fā)平臺助力第三方質檢行業(yè)數(shù)據(jù)可視化

    第三方檢驗是由獨立于買賣雙方利益之外的第三方機構(例如專業(yè)的監(jiān)督檢驗機構)執(zhí)行的,這些機構以公正、公平、權威的非當事人身份,依據(jù)雙方共同認可的法律、標準和合同等進行商品的符合性檢驗和認證活動
    的頭像 發(fā)表于 08-09 13:59 ?147次閱讀
    <b class='flag-5'>三</b>維天地低<b class='flag-5'>代碼</b>開發(fā)平臺助力<b class='flag-5'>第三方</b>質檢行業(yè)數(shù)據(jù)可視化

    請問esp8266會開放使用第三方云服務器嗎?

    如題,esp8266會開放使用第三方云服務器嗎,如百度,阿里云服務器?
    發(fā)表于 07-12 11:40

    是否有可能在支持gdb的第三方集成開發(fā)環(huán)境中使用DAS配置調試?

    是否有可能在支持 gdb 的第三方集成開發(fā)環(huán)境中使用 DAS 配置調試?
    發(fā)表于 07-02 07:29

    微軟或將開放Xbox主機授權給第三方廠商

    據(jù)悉,5 月 26 日,知名媒體 Windows Central 的編輯 Jez Corden 揭露了微軟即將遵循第三方手柄流程,允許在其 XBOX 主機上引入第三方產品。
    的頭像 發(fā)表于 05-27 15:18 ?522次閱讀

    MacPaw將在歐盟成員國推出第三方應用商店Setapp

    5月14日,MacPaw正式宣布將在今年5月14日在歐盟成員國面向蘋果iPhone推出第三方應用商城Setapp。自今年2月起,MacPaw已著手籌備該平臺。S
    的頭像 發(fā)表于 05-14 10:14 ?269次閱讀

    谷歌開放ZenDeviceEffects API,助第三方應用實現(xiàn)睡前屏幕管理

    據(jù)報道,谷歌近日在安卓 15 開發(fā)者預覽版 2 中推出了全新 ZenDeviceEffects API,允許第三方應用訪問數(shù)字健康的就寢模式功能。
    的頭像 發(fā)表于 05-08 16:41 ?368次閱讀

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

    自己在網(wǎng)上搜了下相關資料,能把第三方EXE內嵌進入容器里,但是有個問題,這個第三方軟件必須手動拖到容器正中間,手動最大化。請問有什么方法可以自動實現(xiàn)嗎? 下圖是我內嵌的POLL 軟件。如圖!
    發(fā)表于 04-18 14:26

    微軟或將引入第三方數(shù)字游戲商店至Xbox平臺

    微軟選擇引入這些第三方游戲平臺,一面可以增加自身擁有的硬件資源和服務優(yōu)勢;另一面,也是為了吸引那些在電腦端能夠自由選擇游戲購買渠道的游戲用戶。據(jù)悉,此前的Xbox系列產品都是只內置自家的商城。
    的頭像 發(fā)表于 03-27 15:51 ?384次閱讀

    安卓版Chrome瀏覽器現(xiàn)已支持第三方密碼管理器調用

    據(jù)報道,數(shù)據(jù)解析專家Leppeva64近日在安卓版谷歌Chrome瀏覽器的源代碼中透露,該瀏覽器已在安卓平臺上實現(xiàn)了對第三方密碼管理器的調用支持,并覆蓋Stable、Beta及Canary版本。
    的頭像 發(fā)表于 03-19 11:04 ?552次閱讀

    Meta Quest頭顯將支持多款安卓第三方應用并行

    Meta已悄然啟動了與此相關的功能,意味著Quest頭顯可同時操作多個第三方Android應用。在此之前,Quest對第三方Android應用有嚴格限制,用戶每次僅能打開一個,無法實現(xiàn)同屏幕并行多個
    的頭像 發(fā)表于 03-11 10:58 ?578次閱讀

    蘋果iOS 17.4版允許歐盟地區(qū)用戶使用第三方應用商店下載應用

    3月6日,蘋果正式推出iOS 17.4版本,首次符合歐州《數(shù)字市場法》規(guī)定,引入“第三方應用商店”選項,讓iPhone用戶能從非App Store處下載應用程序。
    的頭像 發(fā)表于 03-06 10:51 ?676次閱讀

    調用第三方API接口會遇到哪些問題?如何解決?

    在實際工作中,我們經常需要在項目中調用第三方API接口,獲取數(shù)據(jù),或者上報數(shù)據(jù),進行數(shù)據(jù)交換和通信。
    的頭像 發(fā)表于 11-30 11:05 ?1920次閱讀
    調用<b class='flag-5'>第三方</b>API接口會遇到哪些問題?如何解決?

    python第三方庫有哪些

    Python 作為一門功能強大的編程語言,擁有豐富的第三方庫,幾乎覆蓋了各個領域的應用。下面是一些常見且廣泛應用的 Python 第三方庫的總結,希望能為您提供幫助。 NumPy(Numerical
    的頭像 發(fā)表于 11-29 14:31 ?1943次閱讀

    yfinance:獲取數(shù)據(jù)的Python第三方模塊

    yfinance 是一個使用 Yahoo! 獲取數(shù)據(jù)的 Python 第三方模塊。它支持獲取最細到1分鐘級的歷史數(shù)據(jù)及股票基本面數(shù)據(jù),是免費獲得美股分鐘級及以上粒度數(shù)據(jù)的不二之選。 1.準備 開始
    的頭像 發(fā)表于 10-21 14:32 ?1994次閱讀

    汽車第三方檢測公司與汽車材料零部件檢測公司的服務差異:從檢測范圍到應用領域

    汽車第三方檢測公司與汽車材料零部件檢測公司的服務差異,在于從檢測范圍到應用領域上的區(qū)別,兩者都是為購車者和其他企業(yè)客戶提供獨立、公正的第三方檢測服務。這是Amanda王莉的第76篇文章,點這里關注我
    的頭像 發(fā)表于 10-19 08:33 ?854次閱讀
    汽車<b class='flag-5'>第三方</b>檢測公司與汽車材料零部件檢測公司的服務差異:從檢測范圍到應用領域