OAuthNotAuthorizedException с использованием Signpost для Twitter на Android - PullRequest
0 голосов
/ 08 марта 2011

Я создаю клиент Twitter на платформе Android

С этим кодом я продолжаю получать OAuthNotAuthorizedException, что в соответствии с документацией означает «поставщик услуг отклонил потребителя»

Это исключение происходит в методе retrieveAccessToken (), поэтому он уже получил токен запроса от метода retrieveRequestToken (), то есть обратный вызов работает.

Я неправильно выполняю настройку OAuth?

package com.android.bufftweet;
imports ...

public class Auth extends Activity {

    private final static String CONSUMER_KEY = "...";
    private final static String CONSUMER_SECRET = "...";
    private final static String CALLBACK_URL = "bufftweet://auth";
    private OAuthProvider provider;
    private CommonsHttpOAuthConsumer consumer;
    private Bundle authBundle;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //init oauth
        consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);  
        consumer.setMessageSigner(new HmacSha1MessageSigner());

        provider = new CommonsHttpOAuthProvider( 
                "http://twitter.com/oauth/request_token", 
                "http://twitter.com/oauth/access_token",  
                "http://twitter.com/oauth/authorize");  

        String authUrl;
        try {
            authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URL);
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)));
        } catch (OAuthMessageSignerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (OAuthNotAuthorizedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (OAuthExpectationFailedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (OAuthCommunicationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    @Override
    public void onResume() {
        super.onResume();
        authBundle = new Bundle();
        Uri uri = this.getIntent().getData();  
        if (uri != null && uri.toString().startsWith(CALLBACK_URL)) {  
            String verifier = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER);  
            // this will populate token and token_secret in consumer  
            try {
                provider.retrieveAccessToken(consumer, verifier); }
                catch (OAuthMessageSignerException e) {
                    e.printStackTrace();
                } catch (OAuthNotAuthorizedException e) {
                    e.printStackTrace();
                } catch (OAuthExpectationFailedException e) {
                    e.printStackTrace();
                } catch (OAuthCommunicationException e) {
                    e.printStackTrace();
                }    
            authBundle.putString("TOKEN",consumer.getToken());
            authBundle.putString("TOKEN_SECRET", consumer.getTokenSecret());
                authBundle.putString("CONSUMER_KEY", CONSUMER_KEY);
            authBundle.putString("CONSUMER_SECRET", CONSUMER_SECRET);
            Intent goToTweetHome = new Intent(Auth.this, TweetHome.class);
            goToTweetHome.putExtra("authBundle", authBundle);
            startActivity(goToTweetHome);   
        }  
    }
}

Вот как выглядит мой манифест для справки

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.android.bufftweet"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-permission android:name="android.permission.INTERNET" /> 
    <application android:icon="@drawable/ic_buff" android:label="@string/app_name">
        <activity android:name=".BuffTweet"
                  android:label="@string/app_name"
                  android:windowSoftInputMode="stateVisible|adjustResize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".Auth">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"></action>  
                <category android:name="android.intent.category.DEFAULT"></category>  
                <category android:name="android.intent.category.BROWSABLE"></category>  
                <data android:scheme="bufftweet" android:host="auth"></data>
            </intent-filter>
        </activity>
        <activity android:name=".TweetHome">
        </activity>
    </application>
    <uses-sdk android:minSdkVersion="7" />

</manifest> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...