2

我正在开发一个向 twitter 发送推文的 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 上,我选择 Application type = client,我的应用程序将生成 PIN 和 accessToken。但是当我更改我的应用程序类型 = 浏览器时,它无法生成 PIN 和 accessToken。

以前,当应用程序类型是客户端时,我提供用户名和密码,然后控制从 web 视图返回到我的应用程序,但现在在输入用户名和密码后,它无法关闭 ModalViewController,但显示选择并复制 PIN。

感谢您的宝贵时间和您能给我的任何帮助!

4

4 回答 4

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;
    }
}
于 2011-12-02T07:11:35.623 回答
1

我也遇到了同样的问题,我刚刚从 twitter 应用程序设置中删除了回调 url。令我惊讶的是,登录过程没有任何问题。

于 2011-10-12T07:08:15.050 回答
1

这种方法的替代品

(void) webViewDidFinishLoad: (UIWebView *) webView

在课堂上SA_OAuthTwitterController.m效果很好。

于 2012-05-01T03:44:49.130 回答
0

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

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

检查为 MGTwitterEngine 实现 xauth 的 XAuthTwitterEngine

于 2011-03-23T15:38:33.900 回答