【问题标题】:How to post tweet from iPhone without PIN using SA_OAuthTwitterEngine?如何使用 SA_OAuthTwitterEngine 在没有 PIN 的情况下从 iPhone 发布推文?
【发布时间】:2011-07-21 07:28:19
【问题描述】:

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

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

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

【问题讨论】:

    标签: iphone twitter oauth twitter-oauth mgtwitterengine


    【解决方案1】:

    这个方法的替换

    (void) webViewDidFinishLoad: (UIWebView *) webView
    

    SA_OAuthTwitterController.m 类中效果很好。

    【讨论】:

      【解决方案2】:

      这里是:只需替换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;
          }
      }
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          移动应用最好使用 xAuth 路由

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

          检查为 MGTwitterEngine 实现 xauth 的 XAuthTwitterEngine

          【讨论】:

          • 感谢您的建议,您可以给我 XAuthTwitterEngine 示例,例如 SA_OAuthTwitterEngine。
          • github.com/aral/MGTwitterEngineDemo 显然 xAuthTwitterEngine 已被弃用,因为 MGTwitterEngine 现在支持 xauth 和 oauth
          • 请注意.. 要使用 xauth,您需要联系 twitter 并要求为您的应用激活 xauth
          猜你喜欢
          • 2017-10-03
          • 2012-12-20
          • 1970-01-01
          • 1970-01-01
          • 2017-02-22
          • 2012-05-11
          • 1970-01-01
          • 1970-01-01
          • 2015-04-02
          相关资源
          最近更新 更多