首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Scribe库进行Flickr Oauth登录

使用Scribe库进行Flickr Oauth登录
EN

Stack Overflow用户
提问于 2013-02-28 18:10:35
回答 1查看 2.1K关注 0票数 4

我是android的新手,请原谅我的错误。

代码语言:javascript
复制
package net.schwiz.oauth;

import org.json.JSONException;
import org.json.JSONObject;
import org.scribe.builder.ServiceBuilder;
import org.scribe.builder.api.TwitterApi;
import org.scribe.model.OAuthRequest;
import org.scribe.model.Response;
import org.scribe.model.Token;
import org.scribe.model.Verb;
import org.scribe.model.Verifier;
import org.scribe.oauth.OAuthService;

import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;


public class Main extends Activity {

    final static String APIKEY = "XXXXXXXXXXXXXXXXXXXX";
    final static String APISECRET = "XXXXXXXXXXXXXXXXXXXX";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final TextView textView = (TextView)findViewById(R.id.textview);
        final  WebView webview = (WebView) findViewById(R.id.webview);

        if(APIKEY == null || APISECRET == null){
            textView.setText("You must enter your own APIKEY and SECRET to use this demo.  dev.twitter.com");
            webview.setVisibility(View.GONE);
            return;
        }

        //set up service and get request token as seen on scribe website 
        //https://github.com/fernandezpablo85/scribe-java/wiki/Getting-Started
        final OAuthService s = new ServiceBuilder()
        .provider(TwitterApi.class)
        .apiKey(APIKEY)
        .apiSecret(APISECRET)
        .callback(CALLBACK)
        .build();

        final Token requestToken = s.getRequestToken();
        final String authURL = s.getAuthorizationUrl(requestToken);

        //attach WebViewClient to intercept the callback url
        webview.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {

                //check for our custom callback protocol otherwise use default behavior
                if(url.startsWith("oauth")){
                    //authorization complete hide webview for now.
                    webview.setVisibility(View.GONE);

                    Uri uri = Uri.parse(url);
                    String verifier = uri.getQueryParameter("oauth_verifier");
                    Verifier v = new Verifier(verifier);

                    //save this token for practical use.
                    Token accessToken = s.getAccessToken(requestToken, v);


                    if(uri.getHost().equals("twitter")){
                        OAuthRequest req = new OAuthRequest(Verb.GET, "URL here");
                        s.signRequest(accessToken, req);
                        Response response = req.send();
                        try {
                            JSONObject json = new JSONObject(response.getBody());
                            textView.setText(json.toString(3));
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }

                    return true;
                }


                return super.shouldOverrideUrlLoading(view, url);
            }
        });


        //send user to authorization page
        webview.loadUrl(authURL);
    }
}

我试过这段代码,它在推特上运行得很好,但现在我想使用Flickr验证用户,上面的代码在这种情况下不起作用,if条件if(url.startsWith("oauth"))没有按照我想象的方式工作。请帮帮忙。

EN

回答 1

Stack Overflow用户

发布于 2013-03-01 22:36:31

我已经找到问题所在了!当我调用webview.loadUrl(authURL);方法时,flickr www.flickr.com的url更改为m.flickr.com,这将在任何用户登录/身份验证之前触发事件shouldOverrideUrlLoading

代码语言:javascript
复制
if(authURL.charAt(7)=='w')
{
   authURL=authURL.replaceFirst("www", "m");
} 

解决了我的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15132755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档