Как опубликовать твит с iPhone без PIN с помощью SA_OAuthTwitterEngine? - PullRequest
2 голосов
/ 23 марта 2011

Я разрабатываю приложение для iPhone, которое отправляет твиты в твиттер. Для этого я использую классы SA_OAuthTwitterEngine + MGTwitterEngine.

Я регистрирую приложение на www.twitter.com/apps и передаю Ключ потребителя и Секрет потребителя контролеру. Мой код такой:

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

UIViewController *controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine:_engine delegate:self];

if (controller){
    [self presentModalViewController: controller animated: YES];
    intTwitterFlag = 1;
}

Ранее на twitter.com/apps я выбираю Тип приложения = клиент, и мое приложение генерирует PIN-код и accessToken. Но когда я меняю тип приложения = Браузер, он не может генерировать PIN-код и accessToken.

Раньше, когда тип приложения был клиентским, я давал имя пользователя и пароль, а затем управлял возвратом к моему приложению из веб-просмотра, но теперь после ввода имени пользователя и пароля он не может dismissModalViewController, но показывает Select и Copy PIN.

Спасибо за ваше время и любую помощь, которую вы можете мне оказать!

Ответы [ 4 ]

3 голосов
/ 02 декабря 2011

Вот оно: просто замените метод в SA_OAuthTwitterController.m:

- (void) webViewDidFinishLoad: (UIWebView *) webView {
    _loading = NO;
    //[self performInjection];
    if (_firstLoad) {
        [_webView performSelector: @selector(stringByEvaluatingJavaScriptFromString:) withObject: @"window.scrollBy(0,200)" afterDelay: 0];
        _firstLoad = NO;
    } else {
        /*
        NSString                    *authPin = [self locateAuthPinInWebView: webView];
        NSLog(@"authPin: %@", authPin);
        if (authPin.length) {
            [self gotPin: authPin];
            return;
        }

        NSString                    *formCount = [webView stringByEvaluatingJavaScriptFromString: @"document.forms.length"];

        if ([formCount isEqualToString: @"0"]) {
            [self showPinCopyPrompt];
        }*/

        //*****************************************************
        //  This is to bypass the pin requirement 
        //  in case the call back URL is set in Twitter settings
        //*****************************************************     
        [_engine requestAccessToken];
        if ([_delegate respondsToSelector: @selector(OAuthTwitterController:authenticatedWithUsername:)])
        {
            [_delegate OAuthTwitterController: self authenticatedWithUsername: _engine.username];

        }
        [self performSelector: @selector(dismissModalViewControllerAnimated:) withObject: (id) kCFBooleanTrue afterDelay: 1.0];

        //[self dismissModalViewControllerAnimated:YES];
    }
    [UIView beginAnimations: nil context: nil];
    _blockerView.alpha = 0.0;
    [UIView commitAnimations];

    if ([_webView isLoading]) {
        _webView.alpha = 0.0;
    } else {
        _webView.alpha = 1.0;
    }
}
1 голос
/ 01 мая 2012

замена для этого метода

(void) webViewDidFinishLoad: (UIWebView *) webView

в классе SA_OAuthTwitterController.m хорошо работает.

1 голос
/ 12 октября 2011

Я тоже столкнулся с той же проблемой, и я только что удалил URL обратного вызова из настроек приложения Twitter. К моему удивлению, логин проходит без проблем.

0 голосов
/ 23 марта 2011

Лучше использовать маршрут xAuth для мобильных приложений

http://dev.twitter.com/pages/xauth

проверьте XAuthTwitterEngine, который реализует xauth для MGTwitterEngine

...