2013-04-04 53 views
1

我試圖授權LinkedIn與iPhone ..重定向的URL在iPhone應用程序LinkedIn

我使用下面的代碼來重定向URL

NSString *authUrl = [NSString stringWithFormat:@"https://www.linkedin.com/uas/oauth2/authorization?response_type=code&client_id=%@&scope=%@&state=%@&redirect_uri=%@" , 
        API_KEY , 
        @"r_fullprofile", 
        @"ASDKASIIWER23432KKQ", 
        @"http://www.myappname.com" 
        ]; 


[[UIApplication sharedApplication] openURL:[NSURL URLWithString: authUrl]]; 

在我的網址類型,我已經添加URL方案作爲http://和URL標識爲

www.myappname.com 

授權後然而,我不回去,從瀏覽器我的應用程序。

任何想法,我錯了嗎?

+0

我面臨同樣的問題,但使用webView不是正確的答案這個問題。因爲oAuth是不向第三方應用程序(在我們的例子中爲移動應用程序)提供用戶憑據,但如果我使用webview,我可以編寫腳本來獲取用戶憑據。這是一個潛在的安全問題。這個問題的任何根解決方案? – 2015-05-29 12:59:57

回答

2

我已經使用差異方法現在,我已經在應用程序中使用webView並使用它。迄今爲止完美。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self.myWebView setDelegate:self]; 
    self.indicator = [[CustomActivityViewer alloc] initWithView:self.view]; 

    NSString *authUrl = [NSString stringWithFormat:@"https://www.linkedin.com/uas/oauth2/authorization?response_type=code&client_id=%@&scope=%@&state=%@&redirect_uri=%@" , 
         API_KEY , 
         @"r_fullprofile rw_nus r_emailaddress r_network w_messages", 
         SCOPE_CODE 
         REDIRECT_URI 
         ]; 
    authUrl = [authUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
    [self.myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:authUrl]]]; 
} 

-(void)webViewDidStartLoad:(UIWebView *)webView 
{ 
    [self.indicator startAnimating]; 
} 

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    [self.indicator stopAnimating]; 
} 
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error 
{ 
    [self.indicator stopAnimating]; 
} 

- (BOOL) webView: (UIWebView *) webView shouldStartLoadWithRequest: (NSURLRequest *) request navigationType: (UIWebViewNavigationType) navigationType 
{ 
    NSURL *url = request.URL; 
    NSLog(@"%@", url.absoluteString); 

    if ([url.host isEqualToString:HOST]) 
    { 
     URLParser *parser = [[URLParser alloc] initWithURLString:url.absoluteString]; 
     NSString *code = [parser valueForVariable:@"code"]; 

     if (code != nil) 
     { 
      NSString *authUrl = [NSString stringWithFormat:@"https://www.linkedin.com/uas/oauth2/accessToken?grant_type=authorization_code&code=%@&redirect_uri=%@&client_id=%@&client_secret=%@", 
           code, 
           REDIRECT_URI_OAUTH, 
           API_KEY, 
           SECRET_KEY]; 

      NSLog(@"%@" , authUrl); 
      authUrl = [authUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

      [Utilities responseFromURL:[NSURL URLWithString:authUrl] completionBlock:^(NSString *response, NSError *err) 
      { 
       if (err != nil) 
       { 
        [Utilities errorDisplay]; 
       } 
       else 
       { 
        NSDictionary *results = [response JSONValue]; 
        [defaults setObject:[results objectForKey:@"access_token"] forKey:@"access_token"]; 
       } 
      }]; 
     } 
    } 
    return YES; 
} 
+0

可以請你告訴我你是如何做到的。我很難使webview工作?我試過了所有的東西。 – 2013-06-20 11:53:51

+0

@eddardstark檢查我的代碼 – 2013-06-20 12:13:14

+0

這可以用於共享以及(因爲我想要做什麼)?您使用redirecturi和作用域代碼的值是什麼? – 2013-06-20 12:35:23

2

您將需要註冊自定義URL方案,因爲iOS和OS X無法在URL方案中重定向特定主機。

通常,您可以使用類似x-myapp:這樣的URL方案。

另外,URL標識符不是主機,而是描述URL方案的標識符,很像用於描述特定文件類型的文件類型的UTI標識符。例如,您可以使用com.myCompany.myApp.url或類似的標識符。

如果您創建表格x-myapp:的方案並將其用作重定向URL,那麼您應該沒問題。

從所提議的Info.plist一個例子是:

<dict> 
    <key>CFBundleTypeRole</key> 
    <string>Editor</string> 
    <key>CFBundleURLName</key> 
    <string>com.myCompany.myApp.url</string> 
    <key>CFBundleURLSchemes</key> 
    <array> 
     <string>x-myapp</string> 
    </array> 
</dict> 

CFBundleURLName對應在Xcode GUI來URL Identifier

+0

你能舉個例子。我必須通過一個重定向url,讓我們說它是我的應用程序://myappname.com我應該設置爲URL方案和標識符? – 2013-04-04 16:36:35

+0

我認爲這主要在上面,你可以將url方案設置爲像'x-myapp:'和標識符到'com.mycompany.myapp.url',然後傳遞url'x-myapp:'作爲重定向網址。系統將確保只要打開以該方案開頭的網址即可啓動您的應用。 – gaige 2013-04-04 16:43:50

+0

linkedin api希望您只發送http或https只能不幸 – 2013-04-04 16:48:01

相關問題