iOS中的LinkedIn集成:邀请API不起作用 [英] LinkedIn Integration in iOS: Invitation API not working

查看:73
本文介绍了iOS中的LinkedIn集成:邀请API不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将 LinkedIn 集成到我的iOS应用程序中,我需要进行身份验证,然后获取个人资料详细信息并从我的应用程序发布到LinkedIn。我使用这个示例项目 LinkedIn OAuth示例客户端非常成功地做了所有这些事情。参考,我做了一些修改,一切都很好。我还使用
LinnkedIn API 中的详细信息来实现这一点。
接下来,我需要从同一个应用程序发送LinkedIn连接的邀请。我尝试使用 Invitataion API

I'm trying to integrate LinkedIn in my iOS application, where I need to Authenticate, then fetch profile details and post to LinkedIn from my app. I do all these things quite successfully using this sample project LinkedIn OAuth Sample Client as reference, I did some modifications and everything is working quite well. And I use the details from LinnkedIn API as well to implement this. Next, I need to send invitation to connect in LinkedIn from the same app. I tried using Invitataion 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=userName@gmail.com",@"_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字符串如下所示:

And my json string looks like this:


{body:Say yes!,subject:邀请
connect。,recipients:{values:[ { 人:{ 直呼其名: 用户名1, 最后的名字: 用户名2, _路径: / people/email=userName@gmail.com}}]},本期特价货品内容:{邀请请求:{connect-type:friend}}}

{"body":"Say yes!","subject":"Invitation to connect.","recipients":{"values":[{"person":{"first-name":"userName1","last-name":"userName2","_path":"/people/email=userName@gmail.com"}}]},"item-content":{"invitation-request":{"connect-type":"friend"}}}

发送邀请时我没有收到任何错误,当我调试时, sendRequestApiCallResult:(OAServiceTicket *)票证didFinish:(NSData *)数据方法被调用显示邀请已发送文字。
但问题是目标LinkedIn用户没有收到任何请求!

While sending the invitation I don't get any errors and when I debug, the sendRequestApiCallResult:(OAServiceTicket *)ticket didFinish:(NSData *)data method gets called showing invitation sent text. But ths issue is the target LinkedIn user didn't get any request!

任何人都可以帮我这个吗?我的代码中有什么问题吗?

Can anyone help me regarding this? Is there anything I'm doing wrong in my code?

NB 我通过以下提到的链接获得解决方案,试过解决方案,但徒劳无功。

NB I went through both the below mentioned links to get a solution, tried the solutions , but in vain.

1. 邀请API - 被401(iOS和OAuthConsumer)难倒 - 已解决

2. linkedin connect API给出错误401 - iphone

NSURLResponse 我得到的状态码是401!

and the NSURLResponse statuscode I get is 401 !

:我自己解决了。请参阅下面的答案。

推荐答案

很高兴通知所有经过长达4天的连续研究,我得到了这个问题解决了!
我从这个 Linkedin thread 获得了解决方案

Glad to inform all that after long 4 days of continuos research, I got this problem solved! I got the solution from this Linkedin thread

您只需在代码中进行一些更改:

You just need to make a few changes in the code:

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=target@gmail.com";
    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];


in 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];
    
}
    

试试这个。肯定会工作的。希望这将有助于未来的访客。

Try this. Will work for sure. Hope this will help future visitors.

问候

这篇关于iOS中的LinkedIn集成:邀请API不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆