2013-04-06 5 views
2

Я пытаюсь интегрировать LinkedIn в мое приложение iOS, где мне нужно пройти аутентификацию, затем получить данные профиля и отправить в LinkedIn из моего приложения. Я делаю все это довольно успешно, используя этот образец проекта LinkedIn OAuth Sample Client в качестве справочника, я сделал некоторые изменения, и все работает очень хорошо. И я использую детали от LinnkedIn API, а также для реализации этого. Далее, Мне нужно отправить приглашение для подключения в LinkedIn из того же приложения. Я пробовал использовать Invitataion API.Интеграция LinkedIn в iOS: API-интерфейс приглашения не работает

Вот мой фрагмент кода:

-(void)sendInvitationToconnectTo:(NSString *)emailAddress withMessage:(NSString *)text 

{ 

    NSURL *url = [NSURL URLWithString:@"http://api.linkedin.com/v1/people/~/mailbox"];  
    OAMutableURLRequest *request = [[OAMutableURLRequest alloc] initWithURL:url 
            consumer:oAuthLoginView.consumer 
             token:oAuthLoginView.accessToken 
            callback:nil 
          signatureProvider:[[OAHMAC_SHA1SignatureProvider alloc] init]]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 

    NSDictionary *temp=[[NSDictionary alloc]initWithObjectsAndKeys:@"/people/[email protected]",@"_path",@"userName1",@"first-name",@"userName2",@"last-name", nil]; 

    NSDictionary *temp2=[[NSDictionary alloc] initWithObjectsAndKeys:temp,@"person",nil]; 
    NSArray *arr2=[[NSArray alloc]initWithObjects:temp2, nil]; 
    NSDictionary *value=[[NSDictionary alloc]initWithObjectsAndKeys:arr2,@"values", nil]; 
    NSDictionary *dict3=[[NSDictionary alloc]initWithObjectsAndKeys:@"friend",@"connect-type",nil]; 
    NSDictionary *dict4=[[NSDictionary alloc] initWithObjectsAndKeys:dict3,@"invitation-request", nil]; 

    NSDictionary *dict=[[NSDictionary alloc]initWithObjectsAndKeys:dict4,@"item-content",@"Say yes!",@"body",@"Invitation to connect.",@"subject",value,@"recipients", nil]; 

    NSString *updateString = [dict JSONString]; 
    NSLog(@"updateString : %@",updateString); 

    [request setHTTPBodyWithString:updateString]; 
    [request setHTTPMethod:@"POST"]; 
    OADataFetcher *fetcher = [[OADataFetcher alloc] init]; 
    [fetcher fetchDataWithRequest:request 
         delegate:self 
       didFinishSelector:@selector(sendRequestApiCallResult:didFinish:) 
        didFailSelector:@selector(sendRequestApiCallResult:didFail:)]; 
    [request release]; 
} 



- (void)sendRequestApiCallResult:(OAServiceTicket *)ticket didFinish:(NSData *)data 

{ 
    NSLog(@"invitation sent"); 
    [self networkApiCall]; 
} 

- (void)sendRequestApiCallResult:(OAServiceTicket *)ticket didFail:(NSData *)error 

{ 
    NSLog(@"%@",[error description]); 
} 

И моя JSON строка выглядит следующим образом:

{ "тело": "Скажи да!", "Субъект": "Приглашение на подключения "" получатели. ": {" ценность ": [{" человек ": {" первое имя ":" USERNAME1" , "последнее имя": "USERNAME2", "_ путь": "/ люди/электронная почта = [email protected] "}}]}," item-content ": {" request-request ": {" connect-type ":" friend "}}}

При отправке приглашения У меня нет ошибок, и когда я отлаживаю, вызывается метод sendRequestApiCallResult:(OAServiceTicket *)ticket didFinish:(NSData *)data, показывая Приглашение отправлено текст. Но проблема с номером . Пользователь LinkedIn не получил никакого запроса!

Может ли кто-нибудь помочь мне в этом отношении? Есть ли что-то, что я делаю неправильно в своем коде?

NB Я прошел через указанные ниже ссылки, чтобы получить решение, попробовал решения, но напрасно.

1. Invitation API - Stumped by 401 (iOS and OAuthConsumer) - SOLVED
2. linkedin connect API gives error 401 - iphone

и NSURLResponse StatusCode Я получаю 401!

EDIT :: Решил сам. См. Мой ответ ниже.

+0

эй .. пожалуйста, ответить на этот вопрос, если вы можете ... http://stackoverflow.com/questions/33909797/how-to-invite-friends-using-linkedin-sdk-in-ios -app –

ответ

5

Рад сообщить все, что после долгих 4 дней непрерывного исследования я решил эту проблему решить! Я получил решение от этого Linkedin thread

Вам просто нужно сделать несколько изменений в коде:

NSURL *url = [NSURL URLWithString:@"http://api.linkedin.com/v1/people/~/mailbox"]; 

    OAMutableURLRequest *request = 
    [[OAMutableURLRequest alloc] initWithURL:url 
    consumer:oAuthLoginView.consumer 
    token:oAuthLoginView.accessToken 
    callback:nil 
    signatureProvider:nil]; 
    [request setHTTPMethod:@"POST"]; 
    NSString *messageToPerson = @"/people/[email protected]"; 
    NSDictionary *person = [[NSDictionary alloc] initWithObjectsAndKeys:[[[NSDictionary alloc] initWithObjectsAndKeys:messageToPerson,@"_path",@"TargetFirstName",@"first-name",@"TargetSecondName",@"last-name",nil] autorelease], @"person",nil]; 
    NSArray *valueArray = [[NSArray alloc] initWithObjects:person,nil]; 
    NSDictionary *values = [[NSDictionary alloc] initWithObjectsAndKeys:valueArray,@"values", nil]; 
    NSDictionary *ir = [[NSDictionary alloc] initWithObjectsAndKeys:[[[NSDictionary alloc] initWithObjectsAndKeys:@"friend",@"connect-type",nil] autorelease], @"invitation-request",nil]; 
    NSDictionary *ic = [[NSDictionary alloc] initWithObjectsAndKeys:ir,@"item-content", nil]; 
    NSDictionary *update = [[NSDictionary alloc] initWithObjectsAndKeys:values,@"recipients",@"Invitation",@"subject",@"ConnectWithMe",@"body", ir, @"item-content", nil]; 
    [request setValue:@"json" forHTTPHeaderField:@"x-li-format"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
    NSLog(@"%@",[update description]); 
    NSString *updateString = [update JSONString]; 

    [request prepare]; 

    [request setHTTPBodyWithString:updateString]; 

    OADataFetcher *fetcher = [[OADataFetcher alloc] init]; 
    [fetcher fetchDataWithRequest:request delegate:self
  didFinishSelector:@selector(postUpdateApiCallResult:didFinish:)
  didFailSelector:@selector(postUpdateApiCallResult:didFail:) withId:1]; 

    [request release]; 

и в oAdata OADataFetcher.m

- (void)fetchDataWithRequest:(OAMutableURLRequest *)aRequest delegate:(id)aDelegate didFinishSelector:(SEL)finishSelector didFailSelector:(SEL)failSelector withId:(int)idtm
 { 

 [request release];
  
request = [aRequest retain]; 

 delegate = aDelegate;
  
didFinishSelector = finishSelector; 

 didFailSelector = failSelector; 

//note this change 

 if (idtm!=1) { 
    
 [request prepare];
  
     } 

connection = [[NSURLConnection alloc] initWithRequest:aRequest delegate:self];
  
}
  

Попробуйте это. Будет работать точно. Надеюсь, это поможет будущим посетителям.

С уважением

+2

Я люблю тебя, MicRO.спасибо :) – Allen

+0

@MicRo: что мне делать в didFinishSelector и didFailSelector. Затем в связи делегировать, что я должен сделать, чтобы отправить запрос на соединение – TamilKing

+0

@MicRo: Я делаю это, но все же у меня есть 401 ошибка PLS помочь мне .. – TamilKing

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