2014-12-17 3 views
2

У нас был встроенный vimeo с использованием oauth 1.0. Теперь он не работает и должен использовать oauth 2.0. Я нашел https://github.com/nxtbgthng/OAuth2Client. Но не понимаю, как использовать его для vimeo.Интеграция Vimeo в ios oauth 2.0

Наш ранее код был

OADataFetcher *fetcher; 
    consumer = [[OAConsumer alloc]initWithKey:[dicVimeoInfo objectForKey:@"ConsumerKey"] secret:[dicVimeoInfo objectForKey:@"ConsumerSecret"]]; 

    NSURL *vimeoURL=[NSURL URLWithString:kVimeoRestURL]; 

    OAToken *token=[[OAToken alloc]initWithKey:[dicVimeoInfo objectForKey:@"AccessToken"] secret:[dicVimeoInfo objectForKey:@"AccessTokenSecret"]]; 

    request = [[OAMutableURLRequest alloc] initWithURL:vimeoURL 
               consumer:consumer 
               token:token 
               realm:nil 
            signatureProvider:nil]; 

    OARequestParameter* formatparameter = [OARequestParameter requestParameter:@"format" value:@"json"]; 
    OARequestParameter* methodParameter = [OARequestParameter requestParameter:@"method" value:@"vimeo.channels.getAll"]; 


    NSArray *params = [NSArray arrayWithObjects: formatparameter, methodParameter, nil]; 
    [request setParameters:params]; 

    [request setHTTPMethod:@"GET"]; 
    [request prepare]; 
    fetcher = [[OADataFetcher alloc] init]; 

    [fetcher fetchDataWithRequest:request 
         delegate:self 
       didFinishSelector:@selector(requestTokenTicket:didFinishWithData:) 
        didFailSelector:@selector(requestTokenTicket:didFailWithError:)]; 

Теперь Vimeo переключилось на OAuth 2.0. Я создал приложение и нашел «Идентификатор клиента», «URL-адрес запроса на токен», «Авторизовать URL-адрес», «URL-адрес для доступа». Теперь я не уверен, как это сделать. Ранее в версии 1.0 я получал «токен доступа» и «токен-секрет».

Редактировать

Я попробовал это. У меня есть токен доступа для одного пользователя. Документы vimeo говорят, что мы отправляем заголовок как «curl -H "Authorization: bearer <OAUTH_TOKEN>" https://api.vimeo.com« Как я могу это сделать.

consumer = [[OAConsumer alloc]initWithKey:@"456a8852ebd72760de4d2206bab3dad0db35a66b" secret:@"eb74abb5d1f38ad0bd570d24e4d1d0ee3a447534"]; 

    NSURL *url = [NSURL URLWithString:@"http://vimeo.com/api/rest/v2"]; 

    request = [[OAMutableURLRequest alloc] initWithURL:url 
               consumer:consumer 
               token:nil 
               realm:nil 
            signatureProvider:nil]; 

    [request setParameters: [NSArray arrayWithObjects: [OARequestParameter requestParameter:@"method" value:@"vimeo.channels.getAll"],[OARequestParameter requestParameter:@"format" value:@"json"], nil]]; 
    [request addValue:[NSString stringWithFormat:@"bearer %@",@"a75a63c0e0121b0704a4c98d6e209eb2"] forHTTPHeaderField:@"Authorization"]; 
    [request setHTTPMethod:@"POST"]; 

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

    [fetcher fetchDataWithRequest:request 

         delegate:self 

       didFinishSelector:@selector(requestTokenTicket:didFinishWithData:) 

        didFailSelector:nil]; 

Редактировать Я попытался без ключа клиента и секрет также.

NSURL *aUrl = [NSURL URLWithString: @"http://vimeo.com/api/rest/v2?format=json&method=vimeo.channels.getAll"]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:aUrl 
                  cachePolicy:NSURLRequestUseProtocolCachePolicy 
                 timeoutInterval:30.0]; 

    [request addValue:[NSString stringWithFormat:@"bearer %@",@"7c7139ec99fa9e09f77dd2512780c301"] forHTTPHeaderField:@"Authorization"]; 

    [request setHTTPMethod:@"GET"]; 

    NSError *error = nil; 
    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error: &error]; 

    NSDictionary *JSONDictionary = [NSJSONSerialization JSONObjectWithData:returnData options:kNilOptions error:&error]; 
    NSLog(@"Response : %@", JSONDictionary); 

выход такое же

Response : { 
    err =  { 
     code = 401; 
     expl = "The consumer key passed was not valid."; 
     msg = "Invalid consumer key"; 
    }; 
    "generated_in" = "0.0020"; 
    stat = fail; 
} 

Спасибо.

ответ

2

Вы передаете параметры как часть объекта JSON, но поток client_credentials фактически определен как обычный POST с Content-Type, установленный в application/x-www-form-urlencoded. Следовательно, Vimeo не будет распознавать действительный запрос на своей конечной точке маркера. Проверьте пример в спецификации: http://tools.ietf.org/html/rfc6749#section-4.4.2

+0

Можете ли вы привести мне пример. – Durgaprasad

+0

вместо тела POST, похожего на '{" grant_type ":" client_credentials "," scope ":" public "}' ваше тело POST должно быть 'grant_type = client_credentials & scope = public' –

+0

Я пробовал NSString * str = @" grant_type = client_credentials и сфера = общественность "; NSData * jsonData = [str dataUsingEncoding: NSUTF8StringEncoding]; [request1 setRequestMethod: @ "POST"]; [request1 setURL: [NSURL URLWithString: urlPost]]; NSError * error = nil; [запрос1 комплектPostBody: (NSMutableData *) jsonData]; – Durgaprasad

Смежные вопросы