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

在最近使用新浪微博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和参数的判断,结果就导致了我遇到的问题,于是我们可以把里面的一个去掉,或者增加一个参数来进行判断,避免重复调用,目前一切正常了!

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
4 Responses
  1. 研究了一下该部分代码,找到了原因

  2. 我遇到的问题

  3. 不是很明白是怎么回事呢,但是这种情况我们外行人一般都搞不懂的

  4. 代码太多,没看到啊

  5. bandar poker says:

    I have read so many articles or reviews about the blogger lovers but this
    piece of writing is in fact a pleasant piece of writing,
    keep it up.

  6. bandarqq says:

    Thanks for sharing your thoughts about android. Regards

  7. I’m gone to tell my little brother, that he should also go to see this website on regular basis to obtain updated from newest news update.

  8. Hmm is anyone else encountering problems with the pictures
    on this blog loading? I’m trying to determine if its a problem
    on my end or if it’s the blog. Any suggestions would be greatly
    appreciated.

  9. Thimeld says:

    Bad credit lenders http://paydaymyonline.com monthly payment loans

  10. Excellent beat ! I wish to apprentice while you amend your web site, how could i subscribe
    for a blog site? The account helped me a appropriate deal.

    I were a little bit acquainted of this your broadcast provided vibrant transparent concept

Leave a Reply

Your email address will not be published. Required fields are marked *

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Anti-spam image