将URL重定向到iphone中的app for linkedIn

时间:2013-04-04 16:21:45

标签: iphone objective-c linkedin

我正试图用iPhone授权LinkedIn ..

我使用以下代码重定向网址

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

在我的网址类型中,我已将网址方案添加为http://,将网址标识符添加为

 www.myappname.com

然而,在授权后,我不会从浏览器返回我的应用程序。

我错的任何想法?

2 个答案:

答案 0 :(得分:3)

我现在使用了不同的方法,我在应用程序中使用了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;
}

答案 1 :(得分:2)

您将需要注册自定义URL方案,因为iOS和OS X无法在URL方案中重定向特定主机。

通常,您可以使用x-myapp:之类的内容作为网址方案。

此外,URL标识符不是主机,而是描述URL方案的标识符,非常类似于文件类型的UTI标识符,描述特定的文件类型。例如,您可以使用com.myCompany.myApp.url或类似的标识符。

如果您创建表单x-myapp:的方案然后将其用作重定向网址,那么您应该没问题。

建议的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