Android Twitter集成-卡在登录页面?

Android Twitter集成-卡在登录页面?,android,twitter,android-webview,android-twitter,Android,Twitter,Android Webview,Android Twitter,我有以前的Android应用程序的代码,我成功地将其与Twitter集成。我已将此代码复制到新应用程序,并更改了新应用程序的回调url、消费者密钥和消费者机密 使用twitter4j库,我可以获得我的RequestToken和身份验证url,如下所示: Twitter twitter = new TwitterFactory().getInstance(); twitter.setOAuthConsumer(myConsumerKey, myConsumerSecret); RequestTok

我有以前的Android应用程序的代码,我成功地将其与Twitter集成。我已将此代码复制到新应用程序,并更改了新应用程序的
回调url
消费者密钥
消费者机密

使用twitter4j库,我可以获得我的
RequestToken
和身份验证url,如下所示:

Twitter twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(myConsumerKey, myConsumerSecret);
RequestToken requestToken = twitter.getOAuthRequestToken(myCallbackUrl);
String authenticationUrl = requestToken.getAuthenticationURL()
RequestToken
具有非null
token
值、非null
tokenSecret
值和null
secretKeySpec
值。身份验证url的格式如下:

http://api.twitter.com/oauth/authenticate?oauth_token=...
我在我的
WebView
中加载此url,并看到以下页面:


我被卡住了。当我点击
登录
按钮时,这一页一直在加载。没有别的了。但是,当我单击
取消
按钮时,我会看到以下页面:

只有在我点击
返回球迷联盟贝科BBL
按钮时,才会调用我的
回调url
,并带有一个
拒绝的
参数,该参数的值为my
oauth_token
。以前有人见过类似的情况,知道是什么阻止了我的登录请求的处理吗

更新1:我尝试了验证url和桌面浏览器中的
登录按钮,它按预期工作,处理响应,然后调用回调url。在我的Android应用程序的
WebView
中尝试时失败了。我已经在多个Android设备和平板电脑上试用过。我的
WebView
上也启用了JavaScript,所以不是这样。最受欢迎的想法。我没有主意了

更新2:我刚刚在我的
WebView
WebViewClient
上做了一些调试模式代码跟踪,我发现当我单击
登录
按钮时,
应该覆盖url加载(WebView WebView,String url)
方法没有被调用,但以下三个方法被调用(按顺序):
onPageStarted(WebView视图,字符串url,位图图标)
onLoadResource(WebView视图,字符串url)
onPageFinished(WebView视图,字符串url)
。这些方法的
url
值为:
https://api.twitter.com/oauth/authenticate
,即,
oauth\u令牌
参数已从认证url中剥离。可能这是一个
POST
请求被视为
GET
请求,因此为什么这一页一直在加载?我能做些什么来正确处理这个
登录
按钮


我猜你忘了从twitter应用程序控制面板设置回调url

登录twitter api部分,选择您的应用程序并转到设置选项卡

如果不这样做,当用户按login时,将不会发生重定向,因此您将无法捕获验证器

另一方面,当您设置回调url时,您的webview可以拦截重定向

注意:您可以设置任何想要的url,重要的是捕获传递给重定向url的oauth_验证器参数

那样的话,你的

shouldOverrideUrlLoading

应触发。

从WebViewClient重写
onLoadResource(WebView视图,字符串url)
,并在授权活动中使用此代码,在onResume()中使用
WebView.loadUrl(authenticationUrl)
,在onCreate()中使用
WebView.setWebViewClient(WebViewClient)


你把回调url放进去了吗

公共静态最终字符串回调\u URL=“twitterapp://connect";

检查您的授权方法:

mHttpOauthConsumer = new CommonsHttpOAuthConsumer(mConsumerKey, mSecretKey);
mHttpOauthprovider = new DefaultOAuthProvider("http://twitter.com/oauth/request_token",
                                                     "http://twitter.com/oauth/access_token",
                                                     "http://twitter.com/oauth/authorize");

public void authorize() 
{
        mProgressDlg.setMessage("Initializing ...");
        mProgressDlg.show();

        new Thread() {
            @Override
            public void run() {
                String authUrl = "";
                int what = 1;

                try {
                    authUrl = mHttpOauthprovider.retrieveRequestToken(mHttpOauthConsumer, CALLBACK_URL);    

                    what = 0;

                    Log.d(TAG, "Request token url " + authUrl);
                } catch (Exception e) {
                    Log.d(TAG, "Failed to get request token");

                    e.printStackTrace();
                }

                mHandler.sendMessage(mHandler.obtainMessage(what, 1, 0, authUrl));
            }
        }.start();
    }
呼叫twitter.authorize()
希望这有帮助

我最近在应用程序中集成了twitter上的共享。它工作得很好

我使用了最新的twitter4j-core-3.0.3.jar

我已经创建了一个简单的演示应用程序,你可以从下面的链接下载它,然后继续。


这可能会对您有所帮助。

奇怪的是,我的Twitter集成已经开始工作。我没有更改我的应用程序代码或应用程序的Twitter设置。我注意到Twitter认证页面以前有一个蓝色的登录按钮,现在有一个蓝色的认证应用程序按钮。因此,我猜Twitter端的某些内容已被更改/修复。

希望这将有助于您我再次检查,并且肯定指定了回调url。当我点击
Cancel
按钮,然后点击
Return to Fan League Beko BBL
按钮时,正在调用回调url(使用
denied
参数)。我已指定了回调url。这不是问题。twitter4j-media-support-3.0.3
jar用于什么?twitter4j-media-support-3.0.3 jar用于上传图像等多媒体支持。您可以忽略这一点。Thanqqqqqqq很快就可以了当我单击
登录
按钮时,
url
值传递到
在线资源中(WebView视图,字符串url)
方法是
https://api.twitter.com/oauth/authenticate
(不带
oauth_令牌
参数)而不是我的callback-url。实际上,在登录、重定向和onLoadResource()后,将调用您的回调url此事件发生时,您将收到通知。另外,请确保在twitter网站上注册新应用程序时,应用程序类型为浏览器而不是客户端。
mHttpOauthConsumer = new CommonsHttpOAuthConsumer(mConsumerKey, mSecretKey);
mHttpOauthprovider = new DefaultOAuthProvider("http://twitter.com/oauth/request_token",
                                                     "http://twitter.com/oauth/access_token",
                                                     "http://twitter.com/oauth/authorize");

public void authorize() 
{
        mProgressDlg.setMessage("Initializing ...");
        mProgressDlg.show();

        new Thread() {
            @Override
            public void run() {
                String authUrl = "";
                int what = 1;

                try {
                    authUrl = mHttpOauthprovider.retrieveRequestToken(mHttpOauthConsumer, CALLBACK_URL);    

                    what = 0;

                    Log.d(TAG, "Request token url " + authUrl);
                } catch (Exception e) {
                    Log.d(TAG, "Failed to get request token");

                    e.printStackTrace();
                }

                mHandler.sendMessage(mHandler.obtainMessage(what, 1, 0, authUrl));
            }
        }.start();
    }