技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 安全 --> 新浪微博 Android SDK中OAuth2.0隐式授权部分的一个代码逻辑问题

新浪微博 Android SDK中OAuth2.0隐式授权部分的一个代码逻辑问题

浏览:2490次  出处信息

在最近使用新浪微博android sdk开发微博登录的时候,从日志中发现一个问题,就是自定义的WeiboDialogListener里面的方法,比如onComplete或者onCancel等,经常会被两次调用,这样其实会导致一些隐性问题,比如增加额外的客户端和服务端的开销,因为我们通常会在onComplete()里面完成更多后续逻辑的处理,而发生这样的情况时,会被处理两次,一开始我犯懒,就在方法外面加入了一个变量 isCompleted 来进行判断,算是暂时解决了问题,后来在好几个地方要开发类似功能的时候,总感觉心里有点儿不爽,于是决定找找到底啥原因

看了看微博sdk里面的代码,在 WeiboDialog.java里面找到了问题,这个java文件主要实现的是创建OAuth的UI,并且通过实现和调用WebViewClient的方法来访问微博的api以及咱们app的callback url, 进而通过WebViewClient里面捕获当前请求的URL,分析URL参数后进行相应逻辑的判断,通过分析,问题应该是在这部分。

在WeiboDialog.java里面有个函数 handleRedirectUrl(),这个函数就是用来判断认证和授权过程中返回参数的,代码如下:

private void handleRedirectUrl(WebView view, String url) {
        
Bundle values = Utility.parseUrl(url);
 
        
String error = values.getString("error");
        
String error_code = values.getString("error_code");
        
        
if (error == null && error_code == null) {
            
mListener.onComplete(values);
        
} else if (error.equals("access_denied")) {
            
// 用户或授权服务器拒绝授予数据访问权限
            
mListener.onCancel();
        
} else {
            
mListener.onWeiboException(new WeiboException(error, Integer.parseInt(error_code)));
        
}
    
}

一看就知道啥意思了,关键的逻辑就在这里面,回调我们自己实现的WeiboDialogListener里面的方法,顺藤摸瓜,调用该方法的代码就在实现WebViewClient里面,研究了一下该部分代码,找到了原因

在WebViewClient中,我们需要实现至少shouldOverrideUrlLoading()方法,该方法在每次加载新url的时候调用,另外,我们还通常会实现onPageStarted()方法,该方法也是在新url开始加载的时候进行调用(注意:在frame里面加载是不会调用的,详细文档见http://developer.android.com/reference/android/webkit/WebViewClient.html)

在WeiboDialog.java实现WebViewClient对象的时候,在shouldOverrideUrlLoading()和onPageStarted()里面都同时调用了handleRedirectUrl()来进行回调url和参数的判断,结果就导致了我遇到的问题,于是我们可以把里面的一个去掉,或者增加一个参数来进行判断,避免重复调用,目前一切正常了!

建议继续学习:

  1. 新浪微博OAuth认证流程分析    (阅读:4079)
  2. 基于PECL OAuth打造微博应用    (阅读:4073)
  3. 深入理解OAuth与豆瓣OAuth test    (阅读:3877)
  4. 在sae中利用SaeFetchurl进行豆瓣的OAuth授权    (阅读:3586)
  5. PHP for Twitter OAuth 教学演示    (阅读:3541)
  6. OAuth那些事儿    (阅读:3203)
  7. OAuth 1.0a与1.0协议的改进…    (阅读:2900)
  8. [演讲稿]OAuth1.0协议    (阅读:2409)
  9. 简述 OAuth 2.0 的运作流程    (阅读:2433)
  10. OAuth的改变    (阅读:2315)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1