401 Несанкционированное использование oauth с твиттером на iPhone - PullRequest
3 голосов
/ 20 мая 2010

Я использую Twitter-OAuth-iPhone .

Когда я пытаюсь войти в твиттер с помощью SA_OAuthTwitterEngine, я получил ошибку 401 Я получил делегатский звонок для:

- (void) OAuthTwitterController: (SA_OAuthTwitterController *) controller authenticatedWithUsername: (NSString *) username {

но когда я пытаюсь отправить твит сразу после:

[_engine sendUpdate: [NSString stringWithFormat:@"Hello World"]];

Я получил ошибку 401:

failed with error: Error Domain=HTTP Code=401 "Operation could not be completed. (HTTP error 401.)"

Я проверил настройки своего твиттер-приложения:

Type:                    Client
Default Access type:     Read & Write

Ответы [ 4 ]

2 голосов
/ 20 сентября 2010

Вы должны запросить доступ к xAuth по адресу api@twitter.com.

1 голос
/ 01 июня 2011

Это может помочь ответить на ваш вопрос: я понял это только сейчас:

Я думаю, что использовал Мэтта Джеммелла и его исходный код , хотя, возможно, я использовал Бена Готтлиба, я не совсем помню. Хотя уверен, что это Мэтт.

Однако я также создал скрытое подпредставление, которое содержит фактическое текстовое поле для твита, кнопку твита и кнопку возврата, чтобы пользователь мог снова скрыть вид.

Итак, подведем итог, у меня есть кнопка, которая показывает изначально скрытое подпредставление, и пока он делает это, он аутентифицирует пользователя. В этом подпредставлении есть кнопка твита, используемая для публикации твитов. Вот код, который я нашел, работал для меня. Сейчас я провел только минимальное тестирование, но я надеюсь, что вам, ребята, достаточно уйти самостоятельно и забрать его отсюда.

-(IBAction)shareTwit:(id)sender { //This shows the tweet view and authorises the user and engine
    tweetView.hidden = NO;

    if (!_engine) {
        _engine = [[SA_OAuthTwitterEngine alloc] initOAuthWithDelegate:self];
        _engine.consumerKey    = kOAuthConsumerKey;
        _engine.consumerSecret = kOAuthConsumerSecret;
    }

    if (![_engine isAuthorized]) {
        UIViewController *controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine:_engine delegate:self];

        if (controller) {
            [self presentModalViewController: controller animated: YES];
        }
        else {
            [_engine sendUpdate: [NSString stringWithFormat: @"Already Updated. %@", [NSDate date]]];
        }
    }
}

-(IBAction)updateTwitter:(id)sender { //This button sends the tweet to Twitter.
    if ([_engine isAuthorized]) {
        [_engine sendUpdate:tweetTextField.text];

        [tweetTextField resignFirstResponder];

        confirmation.text = @"Tweet sent successfully."; //This is an optional UILabel, if you would like the user to know if the tweet has been sent
                                                    // Currently, I haven't created a method where the user is told the sending failed.
    }
    else {
        UIViewController *controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine:_engine delegate:self];

        if (controller) {
            [self presentModalViewController: controller animated: YES];
        }
        else {  
            [_engine sendUpdate: [NSString stringWithFormat: @"Already Updated. %@", [NSDate date]]];   
        }   
    }       
}

Обратите внимание, я не использовал viewDidLoad, главным образом потому, что я не согласен с ним. Я хотел, чтобы пользователь сначала нажал кнопку shareTwit, чтобы активировать аутентификацию. Затем в запущенном представлении они могут написать свой твит. Я надеюсь, что это поможет вам!

1 голос
/ 16 декабря 2010

HTTP 401 является «неавторизованной» ошибкой. Дважды проверьте настройки API Twitter и убедитесь, что вы используете правильные значения для констант kOAuthConsumerSecret и kOAuthConsumerKey. Также убедитесь, что ваше приложение Twitter зарегистрировано как «клиент», а не как «браузер».

0 голосов
/ 04 июня 2012

Настройте поле Callback URL в своем профиле Twitter-приложения.

Должен совпадать с:
$request_token = $connection->getRequestToken(OAUTH_CALLBACK);

...