我目前正在构建一个iOS应用程序,并希望在Flattr-API v2上包含Flattr-Support。
我已经在https://flattr.com/apps/创建了我的应用程序,并获得了密钥和密钥。
问题是,即使我选择“客户端”作为应用程序类型,我也必须在flattr的应用程序设置中提供一个回调URL。此外,只有http://..。回调-输入字段中似乎允许使用URL,因此我无法设置回调URL来打开我的应用程序(类似于myApp://...)
如何为客户端应用程序实现Flattr oAuth流程?是否有任何详细的说明如何使用非基于web的/ iOS应用程序实现flattr身份验证?
我计划使用JDG OAuthConsumer库,但这似乎不起作用--有没有其他iOS库我可以使用?
发布于 2011-12-21 21:07:54
我使用Flattr API v2从我的iOS应用程序中flattr一个东西的实现的简短描述:
我现在使用的是“谷歌Mac - OAuth 2控制器工具箱”:http://code.google.com/p/gtm-oauth2/
创建要进行身份验证的令牌:
- (GTMOAuth2Authentication *)flattrAuth {
NSURL *tokenURL = [NSURL URLWithString:@"https://flattr.com/oauth/token"];
// We'll make up an arbitrary redirectURI. The controller will watch for
// the server to redirect the web view to this URI, but this URI will not be
// loaded, so it need not be for any actual web page.
NSString *redirectURI = @"http://localhost/"; //for me localhost with / didn't work
GTMOAuth2Authentication *auth;
auth = [GTMOAuth2Authentication authenticationWithServiceProvider:@"MyApplication"
tokenURL:tokenURL
redirectURI:redirectURI
clientID:clientKey
clientSecret:clientSecret];
return auth;
}创建ViewController以验证令牌:
- (GTMOAuth2ViewControllerTouch*)getSignInViewController{
GTMOAuth2Authentication *auth = [self flattrAuth];
// Specify the appropriate scope string, if any, according to the service's API documentation
auth.scope = @"flattr";
NSURL *authURL = [NSURL URLWithString:@"https://flattr.com/oauth/authorize"];
GTMOAuth2ViewControllerTouch *viewController;
viewController = [[[GTMOAuth2ViewControllerTouch alloc] initWithAuthentication:auth
authorizationURL:authURL
keychainItemName:keychainItemName
delegate:self
finishedSelector:@selector(viewController:finishedWithAuth:error:)] autorelease];
return viewController;
}和委托方法:
- (void)viewController:(GTMOAuth2ViewControllerTouch *)viewController
finishedWithAuth:(GTMOAuth2Authentication *)auth
error:(NSError *)error {
if (error != nil) {
DLog(@"Flattr sign-in failed with error: %@", [error localizedDescription]);
} else {
DLog(@"Flattr Signin success");
authToken = [auth retain];
}
}您可以在应用程序中显示Viewcontroller -它向用户显示flattr登录,以便他可以对应用程序进行身份验证。
您可以这样使用身份验证令牌来flattr一个东西:
NSString* flattrURL = @"https://api.flattr.com/rest/v2/things/%qi/flattr";
NSURL* u = [NSURL URLWithString:[NSString stringWithFormat:flattrURL, item.flattrThingID]];
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:u];
[authToken authorizeRequest:request completionHandler:^(NSError *error){
if (error == nil) {
// the request has been authorized
NSURLConnection* connection = [[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease];
if(!connection){
//TODO: handle error
} else {
[connection start];
}
} else {
//TODO: handle error
}
}];现在实现NSURLConnectection委托方法并解析JSON响应。
GTMOAuth2库允许您将经过身份验证的令牌保存到密钥链。请在http://code.google.com/p/gtm-oauth2/wiki/Introduction#Retrieving_Authorization_from_the_Keychain上查看它们的介绍以获取说明。
发布于 2011-12-19 15:51:04
当你不想验证一个桌面/移动应用程序时,你不会想要使用oauth2隐式授权流程。在注册flattr应用程序时,使用特定于应用程序的URI,该URI将回调到您的应用程序,例如。iphone-application://oauth-callback。
当您向我们验证应用程序时,您使用的是response_type token而不是code。这将立即创建一个令牌,并将您重定向回您的应用程序。
例如。请求地址:https://flattr.com/oauth/authorize?client_id=2134&redirect_uri=iphone-application://oauth-callback&response_type=token
如果资源所有者将授权您的应用程序,我们将发送HTTP 302,并将您重定向回您的重定向uri。
例如。响应302位置:iphone-application://oauth-callback#access_token=e5oNJ4917WAaJaO4zvoVV2dt3GYClPzp&token_type=bearer
目前,我们没有任何详细的文档来解释如何进行隐式授予,但我们正在编写文档。与此同时,我洗耳恭听。
https://github.com/nxtbgthng/OAuth2Client是一个iOS oauth2库,但是我不知道它是不是很好。
发布于 2012-07-07 15:13:49
https://stackoverflow.com/questions/8554779
复制相似问题