ios - ios 中的 Tumblr 回调函数

标签 ios callback tumblr

我是 ios 的初学者。我刚刚开始在 ios 中集成 tumblr 应用程序。 我需要你的帮助,因为我陷入了实现困境。我想登录 tumblr 并返回我的 View Controller 。为此,我正在关注 this link .

我已经实现了代码,现在我得到了 tumblr 的 webview。但是,我在返回 View Controller 时遇到问题,并且它从任何 ID 登录,即它没有考虑我提到的 CLientID 和 Secret。

这是我的代码。

-(void)viewDidLoad 
{
  [super viewDidLoad];
  clientID = @"pLD4s********************************";
  secret = @"ALJIE8X********************************";
  redirect = @"tumblr://authorized";

  [self connectTumblr];
}
- (void)viewWillAppear:(BOOL)animated 
{
  webView.delegate = self;
}
- (void)connectTumblr 
{
  consumer = [[OAConsumer alloc]initWithKey:clientID secret:secret];

  NSURL* requestTokenUrl = [NSURL URLWithString:@"https://www.tumblr.com/oauth/request_token"];

  OAMutableURLRequest* requestTokenRequest = [[OAMutableURLRequest alloc] initWithURL:requestTokenUrl consumer:consumer token:nil realm:nil signatureProvider:nil] ;

  OARequestParameter* callbackParam = [[OARequestParameter alloc] initWithName:@"oauth_callback" value:redirect] ;

  [requestTokenRequest setHTTPMethod:@"POST"];

  [requestTokenRequest setParameters:[NSArray arrayWithObject:callbackParam]];

  OADataFetcher* dataFetcher = [[OADataFetcher alloc] init] ;

  [dataFetcher fetchDataWithRequest:requestTokenRequest delegate:self didFinishSelector:@selector(didReceiveRequestToken:data:)
                                    didFailSelector:@selector(didFailOAuth:error:)];

  }
  - (void)didReceiveRequestToken:(OAServiceTicket*)ticket data:(NSData*)data {
  NSString* httpBody = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

  requestToken = [[OAToken alloc] initWithHTTPResponseBody:httpBody];

  NSURL* authorizeUrl = [NSURL URLWithString:@"https://www.tumblr.com/oauth/authorize"];

  OAMutableURLRequest* authorizeRequest = [[OAMutableURLRequest alloc] initWithURL:authorizeUrl consumer:nil token:nil realm:nil
                                         signatureProvider:nil];

  NSString* oauthToken = requestToken.key;

  OARequestParameter* oauthTokenParam = [[OARequestParameter alloc] initWithName:@"oauth_token" value:oauthToken] ;

  [authorizeRequest setParameters:[NSArray arrayWithObject:oauthTokenParam]];

  [webView loadRequest:authorizeRequest];
}

- (void)didFailOAuth:(OAServiceTicket*)ticket error:(NSError*)error
{
  NSLog(@"OAuth Fail");
}

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType 
{
  if ([[[request URL] scheme] isEqual:@"tumblr"] )
  {
    // Extract oauth_verifier from URL query
    NSString* verifier = nil;

    NSArray* urlParams = [[[request URL] query] componentsSeparatedByString:@"&"];

    for (NSString* param in urlParams) 
    {
        NSArray* keyValue = [param componentsSeparatedByString:@"="];

        NSString* key = [keyValue objectAtIndex:0];

        if ([key isEqual:@"oauth_verifier"]) {

            verifier = [keyValue objectAtIndex:1];
            break;
        }
    }
    if (verifier) {

        NSURL* accessTokenUrl = [NSURL URLWithString:@"https://www.tumblr.com/oauth/access_token"];

        OAMutableURLRequest* accessTokenRequest = [[OAMutableURLRequest alloc] initWithURL:accessTokenUrl consumer:consumer token:requestToken realm:nil signatureProvider:nil];

        OARequestParameter* verifierParam = [[OARequestParameter alloc] initWithName:@"oauth_verifier" value:verifier];

        [accessTokenRequest setHTTPMethod:@"POST"];

        [accessTokenRequest setParameters:[NSArray arrayWithObject:verifierParam]];

        OADataFetcher* dataFetcher = [[OADataFetcher alloc] init];

        [dataFetcher fetchDataWithRequest:accessTokenRequest delegate:self didFinishSelector:@selector(didReceiveAccessToken:data:)
         didFailSelector:@selector(didFailOAuth:error:)];

    } else {
        // ERROR!
    }                                                
    [webView removeFromSuperview];
    return NO;
   }
   return YES;
  }
  - (void)didReceiveAccessToken:(OAServiceTicket*)ticket data:(NSData*)data 
  {
      NSString* httpBody = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

     accessToken = [[OAToken alloc] initWithHTTPResponseBody:httpBody];

      NSString *OAuthKey = accessToken.key;    // HERE YOU WILL GET ACCESS TOKEN

      NSString *OAuthSecret = accessToken.secret;  //HERE  YOU WILL GET SECRET TOKEN

      UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"Tumblr Token" message:OAuthSecret delegate:nil cancelButtonTitle:@"OK"
                                            otherButtonTitles:nil];
      [alertView show];
  }

客户 ID 和 secret ,我已在注册后在此处输入代码从 tumblr 获取。

谢谢。

最佳答案

我建议你在几个地方放置断点并检查登录流程并给我们错误消息

  1. shouldStartLoadWithRequest
  2. 如果(验证者){
  3. [dataFetcher fetchDataWithRequest:accessTokenRequest 委托(delegate):self didFinishSelector:@selector(didReceiveAccessToken:data:) didFailSelector:@selector(didFailOAuth:error:)];

  4. didReceiveAccessToken

  5. didFailOAuth

我想你错过了错误的方法。这是它。

- (void)didFailOdatah:(OAServiceTicket*)ticket error:(NSError*)error {
    // ERROR!
}

关于ios - ios 中的 Tumblr 回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37428644/

相关文章:

PHP 将附加数据传递给回调

javascript - jQuery/Tumblr - 解析 JSON 数据

ios - ITMS-90682 : "Invalid Bundle.

php - set_error_handler() 收到无效回调?

ios - 动画类卡片app iphone

javascript - node.js:while 循环回调未按预期工作

html - 尝试为 Tumblr 制作一个粘性标题

api - 获取带有某些标签的Tumblr帖子

ios - 在 iOS 中针对不同构建发行版管理 plist 的 url、设置、 key 的最佳实践?

ios - 为什么 ARFaceAnchor 有负 Z 位置?