Android Jtwitter,认证问题

5

你好,我在使用JTwitter函数验证我的twitter应用程序时遇到了困难。我一直收到"TwitterException"的错误提示。

以下是我的方法:

OAuthSignpostClient oauthClient = new OAuthSignpostClient(consumerKey, 
            privateKey, "oob");

a) 我不知道 "oob" 值应该是什么,它是 "callbackURL",在我的 Twitter 应用程序中它说 "callBack URL: none",所以我尝试将 "oob" 替换为 "none""None"null,但结果没有区别。

剩下的部分是样板文件。

 Intent i = new Intent(Intent.ACTION_VIEW, 
    Uri.parse(oauthClient.authorizeUrl().toString()));
    startActivity(i);
    // get the pin
    String v = oauthClient.askUser("Please enter the verification PIN from Twitter");
    oauthClient.setAuthorizationCode(v);
    // Store the authorisation token details for future use
    String[] accessToken = oauthClient.getAccessToken();
    // Next time we can use new OAuthSignpostClient(OAUTH_KEY, OAUTH_SECRET, 
    //        accessToken[0], accessToken[1]) to avoid authenticating again.

    EditText twitterText = (EditText)findViewById(R.id.twitterText);
    twitterText.getText();

    // Make a Twitter object
    Twitter twitter = new Twitter(null, oauthClient);
    // Print Daniel Winterstein's status
    //System.out.println(twitter.getStatus("winterstein"));
    // Set my status
    twitter.setStatus(twitterText.getText());

目前,我不确定如何使其正常工作。希望我能更详细地说明,但这与身份验证有关。我看到的在线信息并没有提供帮助。

3个回答

7
请使用此作为您的回调URL
OAuthSignpostClient oauthClient = 
    new OAuthSignpostClient(consumerKey, privateKey, "callback://twitter");  

记住!之后:

    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)));

请按照以下步骤操作:

重写 onResume() 方法以获取验证码。

protected void onResume() {
    super.onResume();
    if (this.getIntent()!=null && this.getIntent().getData()!=null){
        Uri uri = this.getIntent().getData();
        if (uri != null && uri.toString().startsWith("callback://twitter")) {
            //Do whatever you want
            //usually use uri.getQueryParameter(someString);
            //test what could be someString using Log.v("",uri.toString());
            //you want the Authorization code which is a couple of numbers
            //so you could use oauthClient.setAuthorizationCode(v); 
            //and finally initialise Twitter
        }
    }
}

你可以使用 uri.getQueryParameterNames() 方法来获取参数的 String 名称。

@BobVork

我想补充一下,你需要在 Twitter 应用程序的设置选项卡中设置回调 URL。

无论你在这个字段中输入什么都没有关系,但如果为空,则回调 URL 将无法正常工作。


1
我想补充一下,您需要在 Twitter 应用程序的设置选项卡中设置回调 URL(在 twitter.com 上)。即使您在该字段中输入任何内容都无所谓,但如果为空,则回调 URL 将无法正常工作。我花了大约一个小时才找到这个问题,所以我认为这可能会为其他人节省一些时间。 - Bob Vork

1

我不确定那是否是问题,但看起来你从未设置 Twitter 对象的用户名。


我认为 Oath 的重点在于用户不必输入他们的用户名之类的内容...更不用硬编码它了吧?这个概念有点让人困惑,我的第一反应是用户名会被放到某个地方,但是 Twitter 对象似乎并不需要它,而 Oath 会处理它。 - CQM
我对Twitter API并不是很熟悉,但无论我去哪里查看(即使在你提取代码的示例中),即使使用了oAuth,用户名也被使用。您可以将其保存一次,然后在需要时使用它,而不必每次从某个TextView中读取它。 - MByD

1

嗯,我不知道Jtwitter API的情况,而且我现在对Java的了解还不够,无法真正理解这段代码的内部工作原理,但是你是否尝试过使用?代替NULLNone呢?这是在从Javascript发出调用时使用的回调。试一下吧。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接