我正试图用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
然而,在授权后,我不会从浏览器返回我的应用程序。
我错的任何想法?
答案 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
。