Android新浪微博-项目整理总结 二[使用WebView获取OAuth验证码]

本文介绍了如何在Android应用中整合新浪微博的OAuth授权流程,包括获取request token、通过WebView进行用户授权,以及如何从WebView中捕获验证码oauth_verifier。在用户授权后,保存access token和Access token secret,完成授权过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考资料:

http://www.eoeandroid.com/thread-82063-1-1.html

感谢:bywyu  

0.1获取request token,得到授权url,put给只含有WebView的Activity来处理

requestToken = weibo.getOAuthRequestToken(OAuthConstant.CALLBACK_URL);
                    OAuthConstant.getInstance().setRequestToken(requestToken);
                    String authenticationURL = requestToken.getAuthenticationURL();
                    String authorizationURL = requestToken.getAuthorizationURL();
                    Log.v(TAG , "authenticationURL="+authenticationURL);
                    Log.v(TAG, "authorizationURL="+authorizationURL);
                    
                    Intent intent = new Intent(MainActivity.this,AuthorizationAct.class);
                    intent.putExtra("webViewUrl", authenticationURL);
                    startActivity(intent);


0.2 用户登陆授权,获取access token,从WebView中截获验证码oauth_verifier

package tree.love.weiboFinishing.test;

import java.util.List;

import tree.love.weiboFinishing.OAuthConstant;
import tree.love.weiboFinishing.R;
import weibo4android.Paging;
import weibo4android.Status;
import weibo4android.Weibo;
import weibo4android.WeiboException;
import weibo4android.http.AccessToken;
import weibo4android.http.RequestToken;
import android.app.Activity;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebView;
import android.webkit.WebViewClient;

/**
 * 用户授权页面
 * 1.初始化OAuth对象
 * 2.获取用户授权页面并填充至webView
 * 3.根据载入的url判断匹配规则的结果执行跳转
 * 
 * @author bywyu
 * 
 */
public class AuthorizationAct extends Activity
{

    private final String LOGTAG = "AuthorizationAct";

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.authorization_ui);

        // init
        String url = null;
        
        url = getIntent().getExtras().getString("webViewUrl");
        Log.d(LOGTAG, "onCreat() [Authoriz] url = " + url);

        initWebView(url);
    }

    private void initWebView(String url)
    {
        WebView authorizationView = (WebView) findViewById(R.id.authorizationView);
        authorizationView.clearCache(true);
        authorizationView.getSettings().setJavaScriptEnabled(true);
        authorizationView.getSettings().setSupportZoom(true);
        authorizationView.getSettings().setBuiltInZoomControls(true);
        authorizationView.setWebViewClient(new WebViewC());
        authorizationView.loadUrl(url);
    }

    class WebViewC extends WebViewClient
    {
        private int index = 0;

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url)
        {

            view.loadUrl(url);
            return true;
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon)
        {
            super.onPageStarted(view, url, favicon);
            Log.d(LOGTAG, "onPageStarted url = " + url);

            /**
             * url.contains(ConfigUtil.callBackUrl)
             * 如果授权成功url中包含之前设置的callbackurl
             * 包含:授权成功
             * 
             *index == 0
             *由于该方法onPageStarted可能被多次调用造成重复跳转
             * 则添加此标示
             */

            if (url.contains(OAuthConstant.CALLBACK_URL) && index == 0)
            {
                index++;
                Uri uri = Uri.parse(url);
                // 匹配验证码
                String oauth_verifier = uri.getQueryParameter("oauth_verifier");

                RequestToken requestToken = OAuthConstant.getInstance().getRequestToken();
                AccessToken accessToken = null;
                try
                {
                    accessToken = requestToken.getAccessToken(oauth_verifier);
                    OAuthConstant.getInstance().setAccessToken(accessToken);
                    Log.d(LOGTAG,"得到AccessToken的key和Secret,可以使用这两个参数进行授权登录了.\n Access token:\n"
                                    + accessToken.getToken()
                                    + "\n Access token secret:\n"
                                    + accessToken.getTokenSecret());
                }
                catch (WeiboException e)
                {
                    e.printStackTrace();
                }

                testWeiboData();
            }
        }

        @Override
        public void onPageFinished(WebView view, String url)
        {
            super.onPageFinished(view, url);
        }
    }
    
    public void testWeiboData()
    {
        Weibo weibo = OAuthConstant.getInstance().getWeibo();
        weibo.setToken(OAuthConstant.getInstance().getToken(),
                OAuthConstant.getInstance().getTokenSecret());
        List<Status> friendsTimeline;
        try
        {
            friendsTimeline = weibo.getTrendStatus("seaeast",
                    new Paging(1, 20));
            StringBuilder stringBuilder = new StringBuilder("");
            for (Status status : friendsTimeline)
            {
                stringBuilder.append(status.getUser().getScreenName()
                        + "说:\n"
                        + status.getText()
                        + "\n--------------------------------------------------\n");
            }
            Log.v(LOGTAG,stringBuilder.toString());
        }
        catch (WeiboException e)
        {
            e.printStackTrace();
        }
    }
}

看log,




  至于说获取到access token之后要做的事情,就由各位有创意的开发者来决定了,保存access token和Access token secret.跳转到主页,

 总之到此为止装载WebView的Activity的任务就结束了,可以finished了~~


上传代码...

http://download.youkuaiyun.com/detail/forever_crying/3669897



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值