Android Twitter4J автоматически получает OAuth и oauth_token_secret?

Я реализовал Twitter4J в своем приложении для Android, и он отлично работает. Но после того, как я вхожу в систему со страницы входа в Twitter, он просит пользователя ввести PIN-код вручную.

В классе Twitter4J есть метод для извлечения и сохранения (в общих настройках) OAuth и oauth_token_secret.

/**
* Retrieve the oauth_verifier, and store the oauth and oauth_token_secret 
* for future API calls.
*/
@Override
protected Void doInBackground(Uri...params) {
        final Uri uri = params[0];
        final String oauth_verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER);

        try {
            provider.retrieveAccessToken(consumer, oauth_verifier);

            final Editor edit = prefs.edit();
                    edit.putString(OAuth.OAUTH_TOKEN, consumer.getToken());
                    edit.putString(OAuth.OAUTH_TOKEN_SECRET, consumer.getTokenSecret());
                    edit.commit();

                    String token = prefs.getString(OAuth.OAUTH_TOKEN, "");
                    String secret = prefs.getString(OAuth.OAUTH_TOKEN_SECRET, "");

                    consumer.setTokenWithSecret(token, secret);
                    context.startActivity(new Intent(context,MainAct.class));

                    executeAfterAccessTokenRetrieval();

                    Log.i(TAG, "OAuth - Access Token Retrieved");

                } catch (Exception e) {
                    Log.e(TAG, "OAuth - Access Token Retrieval Error", e);
                }

                return null;
    }

манифест — PrepareRequestTokenActivity

<activity android:name=".PrepareRequestTokenActivity" android:launchMode="singleTask">>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="x-oauthflow-twitter" android:host="callback" />
        </intent-filter>
</activity>

Я не понимаю, почему он не получает OAUTH_TOKEN и OAUTH_SECRET. Как авторизоваться без ввода пин-кода? Я делаю что-то неправильно?

Помогите пожалуйста мне.

Спасибо


person Hassy31    schedule 16.05.2012    source источник
comment
какие классы вы использовали? и покажите какой-нибудь код файла манифеста и константного класса   -  person Khan    schedule 16.05.2012
comment
Я использовал github.com/ddewaele/AndroidTwitterSample для интеграции с twitter4j. Я отредактировал вопрос, пожалуйста, посмотрите.   -  person Hassy31    schedule 17.05.2012


Ответы (3)


Эй, этот код может быть полезен,

AccessToken accessToken = getAccessToken();

        Configuration conf = new ConfigurationBuilder()
                .setOAuthConsumerKey(TwitterConstants.CONSUMER_KEY)
                .setOAuthConsumerSecret(TwitterConstants.CONSUMER_SECRET)
                .setOAuthAccessToken(accessToken.getToken())
                .setOAuthAccessTokenSecret(accessToken.getTokenSecret())
                .build();

        OAuthAuthorization auth = new OAuthAuthorization(conf,
                conf.getOAuthConsumerKey(), conf.getOAuthConsumerSecret(),
                new AccessToken(conf.getOAuthAccessToken(),
                        conf.getOAuthAccessTokenSecret()));

и чтобы получить AccessToken,

public AccessToken getAccessToken() {
    String token = prefs.getString(OAuth.OAUTH_TOKEN, "");
    String tokenSecret = prefs.getString(OAuth.OAUTH_TOKEN_SECRET, "");

    if (token != null && tokenSecret != null)
        return new AccessToken(token, tokenSecret);
    else
        return null;
}
person user    schedule 16.05.2012

вместо аутентификации на основе PIN-кода вы можете попробовать этот пример https://github.com/ddewaele/AndroidTwitterSample

person Community    schedule 16.05.2012
comment
спасибо. На самом деле я использовал этот пример проекта. Я все еще пытаюсь решить проблему. - person Hassy31; 17.05.2012

Я решил проблему. Это была проблема с URL-адресом обратного вызова.

Я редактировал такие константы, и это сработало.

public static final String  OAUTH_CALLBACK_SCHEME   = "x-oauthflow-twitter";
public static final String  OAUTH_CALLBACK_HOST     = "callback";
public static final String  OAUTH_CALLBACK_URL      = OAUTH_CALLBACK_SCHEME + "://" + OAUTH_CALLBACK_HOST;

благодарю вас

person Hassy31    schedule 17.05.2012
comment
Что вы указали для callback при создании приложения на dev.twitter.com? - person Aleks G; 20.06.2012