Ios7 iolinkedinapi:Can';t与LinkedIn API共享帖子

Ios7 iolinkedinapi:Can';t与LinkedIn API共享帖子,ios7,afnetworking,linkedin,social-networking,http-status-code-401,Ios7,Afnetworking,Linkedin,Social Networking,Http Status Code 401,我一直在使用以下SDK将LinkedIn集成到iOS中,并分享来自iDevices的帖子 SDK在此处可用: 在这段代码中,我找不到合适的示例代码,但我已经编写了一些代码,可以通过这些代码共享帖子。这是我的密码: 在代码中,我只有一个viewcontroller,其中我只使用了两个按钮,1)链接到帐户[此按钮用于显示登录控制器并让用户成功登录到帐户]2)共享[允许用户在请求失败时代表登录用户共享内容] ViewController.h 要使此应用程序正常工作,请从上述SDK下载内容,并将每个必需

我一直在使用以下SDK将LinkedIn集成到iOS中,并分享来自iDevices的帖子

SDK在此处可用:

在这段代码中,我找不到合适的示例代码,但我已经编写了一些代码,可以通过这些代码共享帖子。这是我的密码:

在代码中,我只有一个viewcontroller,其中我只使用了两个按钮,1)链接到帐户[此按钮用于显示登录控制器并让用户成功登录到帐户]2)共享[允许用户在请求失败时代表登录用户共享内容]

ViewController.h

要使此应用程序正常工作,请从上述SDK下载内容,并将每个必需的文件添加到项目中

当我尝试登录应用程序时,我会收到一条成功消息,但在这之后,当我尝试共享上述代码中描述的任何帖子时,我会收到失败消息,并查看控制台:

Printing description of error:
Error Domain=AFNetworkingErrorDomain Code=-1011 "Request failed: unauthorized (401)" UserInfo=0x8a6d500 {NSErrorFailingURLKey=https://api.linkedin.com/v1/people/~/shares, NSLocalizedDescription=Request failed: unauthorized (401), NSUnderlyingError=0x8ab1bd0 "Request failed: unacceptable content-type: text/xml", AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0x8a1f5f0> { URL: https://api.linkedin.com/v1/people/~/shares } { status code: 401, headers {
    Connection = "keep-alive";
    "Content-Encoding" = gzip;
    "Content-Type" = "text/xml;charset=UTF-8";
    Date = "Tue, 20 May 2014 09:38:01 GMT";
    Server = "Apache-Coyote/1.1";
    "Transfer-Encoding" = Identity;
    Vary = "*";
    "Www-Authenticate" = "OAuth realm=\"https://api.linkedin.com\"";
    "X-LI-UUID" = "wUQ+CTiK5WDItDrWLbZJFQ==";
    "X-Li-Fabric" = "PROD-ELA4";
    "X-Li-Pop" = "PROD-ELA4";
    "x-li-format" = xml;
    "x-li-request-id" = 30K08X3IL7;
} }}
打印错误说明:
Error Domain=AFNetworkingErrorDomain代码=-1011“请求失败:未经授权(401)”用户信息=0x8a6d500{NSERRORFAILLINGURLKEY=https://api.linkedin.com/v1/people/~/shares,NSLocalizedDescription=请求失败:未经授权(401),NSUnderlyingError=0x8ab1bd0“请求失败:不可接受的内容类型:text/xml”,AFNetworkingOperationFailingURLResponseErrorKey={URL:https://api.linkedin.com/v1/people/~/shares}{状态代码:401,标题{
连接=“保持活动”;
“内容编码”=gzip;
“内容类型”=“文本/xml;字符集=UTF-8”;
日期=“2014年5月20日星期二09:38:01 GMT”;
Server=“apachecoyote/1.1”;
“传输编码”=标识;
Vary=“*”;
“Www-Authenticate”=“OAuth-realm=\”https://api.linkedin.com\"";
“X-LI-UUID”=“wUQ+CTiK5WDItDrWLbZJFQ=”;
“X-Li-Fabric”=“PROD-ELA4”;
“X-Li-Pop”=“PROD-ELA4”;
“x-li-format”=xml;
“x-li-request-id”=30K08X3IL7;
} }}
我曾尝试在AFNetworking、LinkedIn授权、未经授权的访问等方面进行了大量搜索,但没有找到任何相关内容。如果你们中有人对此有所了解,请告诉我,或者向我推荐LinkedIn iPhone SDK的任何其他选项。


使用此库在linkedIn上共享非常简单。

您需要将请求序列化程序更改为AFJSONRequestSerializer,并在camel情况下替换字典上的键。这是我的共享帖子代码:

NSString *stringRequest = @"https://api.linkedin.com/v1/people/~/shares?oauth2_access_token=ACCESS_TOKEN&format=json";

//Request parameter on a dictionary (keys in camel case)
NSDictionary *update = [[NSDictionary alloc] initWithObjectsAndKeys:

                    [[NSDictionary alloc] initWithObjectsAndKeys: @"anyone",@"code",nil],  @"visibility",
                    @"comment to share", @"comment",
                    [[NSDictionary alloc] initWithObjectsAndKeys:@"description share", @"description",
                                                                 @"link_url", @"submittedUrl",
                                                                 @"title share",@"title",
                                                                 @"image_url",@"submittedImageUrl",nil],
                    @"content",nil];

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
AFJSONRequestSerializer *requestSerializer = [AFJSONRequestSerializer serializer];
[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.requestSerializer = requestSerializer;

[manager POST:stringRequest parameters:update success:^(AFHTTPRequestOperation *operation, id     responseObject) {
NSLog(@"result: %@", responseObject);
completionBlock(YES, responseObject, nil);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    DDLogError([error localizedDescription]);
    completionBlock(NO, nil, error);
}];

重要提示:根据Linkedin API,字典的密钥以驼峰格式。

首先,在通过IOSLinkdinAPI登录时存储访问令牌

比如说。如果我有单例类DataObjects,并且属性名为“AccessToksForlinkedin”,则此方法中的更改将是

- (IBAction) linkedInClicked:(id)sender { // Login into the account
    [self.client getAuthorizationCode:^(NSString *code) {
        [self.client getAccessToken:code success:^(NSDictionary *accessTokenData) {
            NSString *accessToken = [accessTokenData objectForKey:@"access_token"];
            [[DataObjects sharedDataObjects] setAccessTokenForLinkedIn:accessToken];
            [self requestMeWithToken:accessToken];
        }                   failure:^(NSError *error) {
            NSLog(@"Quering accessToken failed %@", error);
        }];
    }                      cancel:^{
        NSLog(@"Authorization was cancelled by user");
    }                     failure:^(NSError *error) {
        NSLog(@"Authorization failed %@", error);
    }];
}
现在,当我们必须共享任何文本或URL时,方法是:-

-(void)sharetoLinkedIn:(NSString *)title desc:(NSString *)description path:(NSString *)submitted_url imagePath:(NSString *)submitted_image_url postString:(NSString *)comment
{
    NSString *stringRequest = [NSString stringWithFormat:@"https://api.linkedin.com/v1/people/~/shares?oauth2_access_token=%@&format=json",[[DataObjects sharedDataObjects] accessTokenForLinkedIn]] ;

    NSDictionary *param = @{
                            @"content":@{
                                    @"title":title,
                                    @"description":description,
                                    @"submitted-url":submitted_url,
                                    @"submitted-image-url":submitted_image_url
                                    },
                            @"comment": comment,
                            @"visibility": @{
                                    @"code": @"anyone"
                                    }
                            };


    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:stringRequest]];
    [request setHTTPBody:[NSJSONSerialization dataWithJSONObject:param options:0 error:nil]];
    [request setHTTPMethod:@"POST"];
    [request setAllHTTPHeaderFields:@{@"Content-Type":@"application/json",
                                      @"x-li-format":@"json"

                                      }];

    AFHTTPRequestOperation *op = [manager HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"result: %@", responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        if ([operation.responseString class] == [NSDictionary class]) {
                //[Utility showAlert:@"LinkedIn" mess:[(NSDictionary *)operation.responseString objectForKey:@"message"]];

            NSLog(@"error: %@", [(NSDictionary *)operation.responseString objectForKey:@"message"]);
        }
        NSLog(@"error: %@", error);
    }];

    [[NSOperationQueue mainQueue] addOperation:op];
}

同样的问题,有什么解决方案吗?我已经停止了这个项目:(但是这段代码使用的是旧的oauth。你知道使用afnetworking吗
- (IBAction) linkedInClicked:(id)sender { // Login into the account
    [self.client getAuthorizationCode:^(NSString *code) {
        [self.client getAccessToken:code success:^(NSDictionary *accessTokenData) {
            NSString *accessToken = [accessTokenData objectForKey:@"access_token"];
            [[DataObjects sharedDataObjects] setAccessTokenForLinkedIn:accessToken];
            [self requestMeWithToken:accessToken];
        }                   failure:^(NSError *error) {
            NSLog(@"Quering accessToken failed %@", error);
        }];
    }                      cancel:^{
        NSLog(@"Authorization was cancelled by user");
    }                     failure:^(NSError *error) {
        NSLog(@"Authorization failed %@", error);
    }];
}
-(void)sharetoLinkedIn:(NSString *)title desc:(NSString *)description path:(NSString *)submitted_url imagePath:(NSString *)submitted_image_url postString:(NSString *)comment
{
    NSString *stringRequest = [NSString stringWithFormat:@"https://api.linkedin.com/v1/people/~/shares?oauth2_access_token=%@&format=json",[[DataObjects sharedDataObjects] accessTokenForLinkedIn]] ;

    NSDictionary *param = @{
                            @"content":@{
                                    @"title":title,
                                    @"description":description,
                                    @"submitted-url":submitted_url,
                                    @"submitted-image-url":submitted_image_url
                                    },
                            @"comment": comment,
                            @"visibility": @{
                                    @"code": @"anyone"
                                    }
                            };


    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:stringRequest]];
    [request setHTTPBody:[NSJSONSerialization dataWithJSONObject:param options:0 error:nil]];
    [request setHTTPMethod:@"POST"];
    [request setAllHTTPHeaderFields:@{@"Content-Type":@"application/json",
                                      @"x-li-format":@"json"

                                      }];

    AFHTTPRequestOperation *op = [manager HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"result: %@", responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        if ([operation.responseString class] == [NSDictionary class]) {
                //[Utility showAlert:@"LinkedIn" mess:[(NSDictionary *)operation.responseString objectForKey:@"message"]];

            NSLog(@"error: %@", [(NSDictionary *)operation.responseString objectForKey:@"message"]);
        }
        NSLog(@"error: %@", error);
    }];

    [[NSOperationQueue mainQueue] addOperation:op];
}