gpt4 book ai didi

ios7 - IOSLinkedInAPI : Can't share post with the LinkedIn API

转载 作者:行者123 更新时间:2023-12-01 05:44:02 25 4
gpt4 key购买 nike

我一直在使用以下 SDK 将 LinkedIn 集成到 iOS 中并从 iDevices 分享帖子。

SDK 可在此处获得: https://github.com/jeyben/IOSLinkedInAPI

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

在代码中,我只有一个 View Controller ,其中我只使用了两个按钮,1) Linked In Account [此按钮用于显示登录 Controller 并让用户成功登录到帐户] 2) Share [Allows user to在请求失败时代表登录用户共享内容]

ViewController.h

#import <UIKit/UIKit.h>
#import "LIALinkedInApplication.h"
#import "LIALinkedInHttpClient.h"

@interface ViewController : UIViewController

@property (nonatomic, strong) LIALinkedInHttpClient *client;

- (IBAction) linkedInClicked:(id)sender;
- (void)requestMeWithToken:(NSString *)accessToken;

@end

ViewController.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

LIALinkedInApplication *application = [LIALinkedInApplication applicationWithRedirectURL:@"http://www.google.com" clientId:@"w57zqiw6cv73" clientSecret:@"Pj5MVxtkpbefau1v" state:@"something" grantedAccess:@[@"r_fullprofile", @"r_network", @"rw_nus"]];
self.client = [LIALinkedInHttpClient clientForApplication:application presentingViewController:nil];

}

- (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"];
[self requestMeWithToken:accessToken];
} failure:^(NSError *error) {
NSLog(@"Querying accessToken failed %@", error);
}];
} cancel:^{
NSLog(@"Authorization was cancelled by user");
} failure:^(NSError *error) {
NSLog(@"Authorization failed %@", error);
}];
}

- (IBAction) postMessage :(id)sender { // Post via logged in account, so, first go login and then share content
NSString *strURL = @"https://api.linkedin.com/v1/people/~/shares";

NSMutableDictionary *contents=[[NSMutableDictionary alloc] init];
[contents setValue:@"description goes here" forKey:@"description"];
[contents setValue:@"www.google.com" forKey:@"submitted-url"];
[contents setValue:@"title goes here" forKey:@"title"];

NSMutableDictionary *visible=[[NSMutableDictionary alloc] init];
[visible setValue:@"anyone" forKey:@"code"];

NSMutableDictionary *updatedic=[[NSMutableDictionary alloc] init];

[updatedic setObject:visible forKey:@"visibility"];
[updatedic setObject:contents forKey:@"content"];
[updatedic setValue:@"Check out the LinkedIn Share API!" forKey:@"comment"];
//[updatedic setValue:@"json" forKey: @"x-li-format"];

[self.client POST:strURL parameters:updatedic success:^(AFHTTPRequestOperation *operation, NSDictionary *dict) {
NSLog(@"Successfully posted", nil);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Failed post", nil);
}];
}

- (void)requestMeWithToken:(NSString *)accessToken {
[self.client GET:[NSString stringWithFormat:@"https://api.linkedin.com/v1/people/~?oauth2_access_token=%@&format=json", accessToken] parameters:nil success:^(AFHTTPRequestOperation *operation, NSDictionary *result) {
NSLog(@"current user %@", result);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"failed to fetch current user %@", error);
}];
}

要使此应用正常运行,请从上述 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;
} }}

我已经尝试在 AFNetworking、LinkedIn 授权、未授权访问等方面进行大量搜索,但找不到任何相关信息。如果你们中的任何人知道这件事或向我建议 LinkedIn iPhone SDK 的任何其他选项,请告诉我。

最佳答案

您需要将请求序列化程序更改为 AFJSONRequestSerializer 并以驼峰式大小写替换字典中的键。这是我的分享帖子代码:

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,字典的键采用驼峰式大小写。

关于ios7 - IOSLinkedInAPI : Can't share post with the LinkedIn API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23758142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com