1 Star 0 Fork 0

dsttl3/WeiBoLogin

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

WeiBoLogin

前期准备 在微博开放平台注册一个网站应用 微博开放平台

进入正题 创建一个登录页面的Ability 因为使用的是网站接入的方式,所以登录使用WebView来实现 登录页布局文件

<?xml version="1.0" encoding="utf-8"?>
<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进行设置

public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_wei_bo_login);

        WebView myWebView = (WebView) findComponentById(ResourceTable.Id_WebView_weibologin);
        myWebView.getWebConfig().setJavaScriptPermit(true);

	//自定义WebAgent 用于登录的相关操作
        myWebView.setWebAgent(new WebAgent(){

	// isNeedLoadUrl 当WebView即将打开一个链接时会调用此方法 
            @Override
            public boolean isNeedLoadUrl(WebView webView, ResourceRequest request) {
		// request.getRequestUrl().toString().startsWith("sinaweibo") 
		// 当请求链接为sinaweibo开头(点击网页上一键登录会唤起微博客户端)时,使用下面的方法唤起微博客户端。
                if (request.getRequestUrl().toString().startsWith("sinaweibo")){
                    Intent intent = new Intent();
                    intent.setAction("android.intent.action.VIEW");
                    intent.setUri(Uri.parse(request.getRequestUrl().toString()));
                    intent.addFlags(Intent.FLAG_ABILITY_NEW_MISSION);
                    startAbility(intent);
                    return false;
                }

		// 当在微博客户端授权后,会重定向至定义的网址,示例中重定向至https://api.dsttl3.cn/?code=【code的值】 ,这时候就可以从链接中获取到code进行下一步了。这里把code传入下个页面
                if (request.getRequestUrl().toString().startsWith("https://api.dsttl3.cn)){
                    String code = request.getRequestUrl().toString().substring(28);
                    Intent intent = new Intent();
		//  在intent中带上code
                    intent.setParam("code",code);
                    Operation operation = new Intent.OperationBuilder()
                            .withDeviceId("")
                            .withBundleName("cn.dsttl3.dome.weibologin")
                            .withAbilityName("cn.dsttl3.dome.weibologin.MyAbility")
                            .build();
                    intent.setOperation(operation);
                    startAbility(intent);
		// 结束当前Ability
                    terminateAbility();
                }
                return true;
            }
        });
        //授权连接,需要自己修改
        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

public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_my);
        Text text = (Text) findComponentById(ResourceTable.Id_text_helloworld);
        String code = intent.getStringParam("code");
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    String YOUR_CLIENT_ID = "2593566539";
                    String YOUR_CLIENT_SECRET = "383fc6262e954e18f5b7efe3c9899284";
                    String YOUR_REGISTERED_REDIRECT_URI = "https://api.dsttl3.cn";
                    String ACCESS_TOKEN_URL = "https://api.weibo.com/oauth2/access_token";
                    OkHttpClient client = new OkHttpClient();
                    FormBody body = new FormBody.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();
                    Request okRequest = new Request.Builder().url(ACCESS_TOKEN_URL).header("referer",YOUR_REGISTERED_REDIRECT_URI).post(body).build();
                    Call call = client.newCall(okRequest);
                    Response re = call.execute();
                    String s = re.body().string();
                    Gson gson = new Gson();
                    WeiBoTokenJson w = gson.fromJson(s, WeiBoTokenJson.class);
                    getUITaskDispatcher().asyncDispatch(new Runnable() {
                        @Override
                        public void run() {
                            text.setText("登录成功:token=" + w.getAccess_token());
                        }
                    });
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();

获取微博Token完成。

效果演示 SVID_20210928_022040_1.gif

了解更多请下载源代码

GitHub - Gitee

空文件

简介

取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/dsttl3/WeiBoLogin.git
git@gitee.com:dsttl3/WeiBoLogin.git
dsttl3
WeiBoLogin
WeiBoLogin
main

搜索帮助

Cb406eda 1850385 E526c682 1850385