2012-09-04 45 views
0

我试过运行OAuthStarterKit xcode项目开箱即用,输入了正确的api密钥/秘密和oauth用户令牌/密码。当我使用此代码授权时:Linkedin API错误iPhone入门工具包中的无效签名

OAMutableURLRequest *request = 
     [[[OAMutableURLRequest alloc] initWithURL:requestTokenURL 
             consumer: self.consumer 
              token: self.requestToken 
             callback:linkedInCallbackURL 
           signatureProvider:sha] autorelease]; 

它返回错误“signature_invalid”,这似乎表示签名不正确。明文和秘密混合使用大写和小写字母,我不确定这应该有所作为。

如果我使用

requestTokenURLString = @"https://api.linkedin.com/uas/oauth/requestToken?scope=r_basicprofile+r_emailaddress"; 

它返回无效的签名......但如果我使用的是基本的权限调用

requestTokenURLString = @"https://api.linkedin.com/uas/oauth/requestToken; 

它工作正常,但它意味着我只有基本的个人资料的权限,我需要诸如电子邮件地址之类的东西。

输入所有测试控制台的同一数据似乎很好地工作在这里:

https://developer.linkedin.com/oauth-test-console 

任何人都知道我应该做的事情,思考,或者我应该寻找? 进一步的日志信息:

oauth_problem=signature_invalid 
oauth_problem_advice=com.linkedin.security.auth.pub.LoginDeniedInvalidAuthTokenException while obtaining request token for: POST https://api.linkedin.com/uas/oauth/requestToken/oauth_callback:hdlinked://linkedin/oauth 
oauth_consumer_key: XXX 
oauth_nonce 
oauth_signature_method: 3DHMACSHA1 

2012-09-04 23:36:07.054 OAuthStarterKit[31952:c07] secret: TIDi9XXXXXXX 
2012-09-04 23:36:07.054 OAuthStarterKit[31952:c07] base64EncodedResult: JXW6ZWUpXv7ba98o2hcUXodDhmg= 

我使用的代码示例从这里https://github.com/synedra/LinkedIn-OAuth-Sample-Client

编辑:公司将试图让这个未来的底部,并回答我的问题,如果没有人击败我它。

回答

1

经过与LinkedIn API Beast的大量争论后,我发现问题的方式是编码的方式,长的故事,在OAuthLoginView.m方法'requestTokenFromProvider'我需要包含参数'范围'的OARequestParameter对象中的相关权限。

(基于断GitHub库 - >https://github.com/synedra/LinkedIn-OAuth-Sample-Client

之后,无论你正在做你的API调用,(在OAuthStarterKit例如)像ProfileTabView :: profileApiCall你可以火了URL的帖子是这样:http://api.linkedin.com/v1/people/~:(id,first-name,last-name,industry)“]; 或者如果你需要他们的电子邮件地址,它出现(只要你有权限访问电子邮件,你可以抓住太简单,如本:

NSURL *url = [NSURL URLWithString:@"http://api.linkedin.com/v1/people/~:(id,first-name,last-name,industry,email-address)"]; 

看到代码在下面的URL请求中使用OARequestParameter ...

- (void)requestTokenFromProvider 
{ 
    OAMutableURLRequest *request = 
      [[[OAMutableURLRequest alloc] initWithURL:requestTokenURL 
              consumer:self.consumer 
               token:nil 
              callback:linkedInCallbackURL 
            signatureProvider:nil] autorelease]; 

    [request setHTTPMethod:@"POST"]; 

    OARequestParameter * scopeParameter=[OARequestParameter requestParameter:@"scope" value:@"r_fullprofile r_contactinfo r_emailaddress"]; 

    [request setParameters:[NSArray arrayWithObject:scopeParameter]]; 

    OADataFetcher *fetcher = [[[OADataFetcher alloc] init] autorelease]; 
    [fetcher fetchDataWithRequest:request 
         delegate:self 
       didFinishSelector:@selector(requestTokenResult:didFinish:) 
        didFailSelector:@selector(requestTokenResult:didFail:)];  
} 

对于更深入的使用linkedin API的捷径,我会在我的博客上留一些快速提示 - > http://techrantnz.blogspot.com.au/2012/09/the-linkedin- API与 - oauthstarterkit.html

如果你想检查一切正常,检查这就是所谓的方法,如果它成功

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

如果你输出的响应正文你可能会看到这样的:

2012-09-05 21:40:55.109 OAuthStarterKit[12244:c07] profile: { 
    emailAddress = "[my email]@gmail.com"; 
    firstName = Dave; 
    id = XXXXXX; 
    industry = "Information Technology and Services"; 
    lastName = "XXXXXXXX"; 
} 
+0

仍然无法在ios 7设备上使用ipad。 – NaXir