Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在UIWebView中使用Tumblr登录_Ios_Objective C_Uiwebview_Tumblr - Fatal编程技术网

Ios 在UIWebView中使用Tumblr登录

Ios 在UIWebView中使用Tumblr登录,ios,objective-c,uiwebview,tumblr,Ios,Objective C,Uiwebview,Tumblr,我正在通过oauth使用tumbler登录身份验证。我正在跟踪此url: 用于登录身份验证,并通过UIWebview中的登录获取iOS中Tumblr API的访问令牌和密钥 我正在使用这段代码 - (void)viewDidLoad { [super viewDidLoad]; // clientID = @"Tjta51N6kF6Oxmm1f3ytpUvMPRAE1bRgCgG90SOa0bJMlSlLeT"; // secret = @"lrlQPNx3Yb1nRxp4

我正在通过oauth使用tumbler登录身份验证。我正在跟踪此url: 用于登录身份验证,并通过UIWebview中的登录获取iOS中Tumblr API的访问令牌和密钥

我正在使用这段代码

- (void)viewDidLoad {
    [super viewDidLoad];

   // clientID = @"Tjta51N6kF6Oxmm1f3ytpUvMPRAE1bRgCgG90SOa0bJMlSlLeT";
   // secret = @"lrlQPNx3Yb1nRxp4qreYXvUURkGUmYCBoQacOmLTDRJAc7awRN";
    clientID = @"sdF0Y6bQoJYwfIB1Mp7WECwobAgnq5tmkRjo7OXyKHDg3opY7Y";
    secret = @"qJNGrRjyriZBeBhcgJz0MAcD9WAYXUW1tLbLrbYE4ZclzAUH9g";
    redirect   = @"tumblr://authorized";
    [self.WebView setBackgroundColor:[UIColor clearColor]];
    [self.WebView setOpaque:NO];

    [self connectTumblr];
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}



-(void)connectTumblr {
    consumer = [[OAConsumer alloc]initWithKey:clientID secret:secret];


    NSURL* requestTokenUrl = [NSURL URLWithString:@"http://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]];

    // UIWebView* webView = [[UIWebView alloc] initWithFrame:[UIScreen mainScreen].bounds];

    //  webView.scalesPageToFit = YES;

    //  [[[UIApplication sharedApplication] keyWindow] addSubview:webView];



    // webView.delegate = self;

    [self.WebView loadRequest:authorizeRequest];

}
#pragma mark UIWebViewDelegate

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
    NSLog(@"scheme: %@",[[request URL] scheme]);
    if ([[[request URL] scheme] isEqualToString:@"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 isEqualToString:@"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)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
    NSLog(@"webView error: %@",error);
    // ERROR!
}

- (void)webViewDidStartLoad:(UIWebView *)webView {
    [spinner setHidden:NO];
    [spinner startAnimating];
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    [spinner setHidden:YES];
    [spinner stopAnimating];
}


- (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];




}
一切正常,但登录后

if ([[[request URL] scheme] isEqualToString:@"tumblr"]) {
}
应在shouldStartLoadWithRequest委托方法中调用 但给定的条件并不满足。因此,我无法验证oauth_验证器,也无法获取accessToken。
请告知,谢谢。

对于Tumblr的每个url,您必须使用https而不是http。它将完美工作。
谢谢。

是的。第一次可以很好地工作,但当我们再次呼叫登录时,它只是重定向到仪表板,无法回拨到我的应用程序。请帮助我。。thanks@chetu您是否找到了Tumblr重定向问题的解决方案您是否检查了requestTokenURL的响应?