前期準(zhǔn)備
在微博開(kāi)放平臺(tái)注冊(cè)一個(gè)網(wǎng)站應(yīng)用,微博開(kāi)放平臺(tái)地址如下:
https://open.weibo.com/connect
進(jìn)入正題
①創(chuàng)建一個(gè)登錄頁(yè)面的 Ability
因?yàn)槭褂玫氖蔷W(wǎng)站接入的方式,所以登錄使用 WebView 來(lái)實(shí)現(xiàn)。
登錄頁(yè)布局文件:
<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>
②在登錄頁(yè) AbilitySlice 中對(duì) WebView 進(jìn)行設(shè)置。
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用于登錄的相關(guān)操作
myWebView.setWebAgent(newWebAgent(){
//isNeedLoadUrl當(dāng)WebView即將打開(kāi)一個(gè)鏈接時(shí)會(huì)調(diào)用此方法
@Override
publicbooleanisNeedLoadUrl(WebViewwebView,ResourceRequestrequest){
//request.getRequestUrl().toString().startsWith("sinaweibo")
//當(dāng)請(qǐng)求鏈接為sinaweibo開(kāi)頭(點(diǎn)擊網(wǎng)頁(yè)上一鍵登錄會(huì)喚起微博客戶端)時(shí),使用下面的方法喚起微博客戶端。
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;
}
//當(dāng)在微博客戶端授權(quán)后,會(huì)重定向至定義的網(wǎng)址,示例中重定向至https://api.dsttl3.cn/?code=【code的值】,這時(shí)候就可以從鏈接中獲取到code進(jìn)行下一步了。這里把code傳入下個(gè)頁(yè)面
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);
//結(jié)束當(dāng)前Ability
terminateAbility();
}
returntrue;
}
});
//授權(quán)連接,需要自己修改
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
+關(guān)注
關(guān)注
0文章
7瀏覽量
3141 -
HarmonyOS
+關(guān)注
關(guān)注
79文章
1975瀏覽量
30204
原文標(biāo)題:HarmonyOS微博第三方登錄實(shí)現(xiàn)
文章出處:【微信號(hào):gh_834c4b3d87fe,微信公眾號(hào):OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論