如何使用SA_OAuthTwitterEngine从没有PIN的iPhone发布推文?

时间:2011-03-23 13:05:44

标签: iphone twitter oauth twitter-oauth mgtwitterengine

我正在开发一个向twitter发送推文的iPhone应用程序。为此我使用SA_OAuthTwitterEngine + MGTwitterEngine类。

我将应用程序注册到www.twitter.com/apps并将Consumer key和Consumer secret传递给控制器​​,我的代码就是这个。

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上我选择了Application type = client,我的应用程序将生成PIN和accessToken。但是,当我更改我的应用程序类型=浏览器时,它无法生成PIN和accessToken。

以前当应用程序类型是客户端时,我提供用户名和密码,然后从webview控制返回我的应用程序,但现在输入用户名和密码后,它不能解除ModalViewController但显示选择并复制PIN。

感谢您的时间和任何可以给我的帮助!

4 个答案:

答案 0 :(得分:3)

这是:只需替换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 :(得分:1)

我也遇到了同样的问题,我刚从twitter app设置中删除了回调网址。我的意外登录收益没有任何问题。

答案 2 :(得分:1)

替换此方法

(void) webViewDidFinishLoad: (UIWebView *) webView
课程SA_OAuthTwitterController.m中的

效果很好。

答案 3 :(得分:0)

最好将xAuth路由用于移动应用

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

检查为MGTwitterEngine实现xauth的XAuthTwitterEngine