2010-12-20 51 views
1

从v1升级到foursquare的API升级到v2需要Oauth2。IOS的​​foursquare oauth2

是否正确,要使用Web服务器流量为recommened我应该将用户引导到: https://foursquare.com/oauth2/authenticate 的client_id = YOUR_CLIENT_ID & RESPONSE_TYPE =代码 & REDIRECT_URI = YOUR_REGISTERED_REDIRECT_URI

一旦用户通过验证四方?将重定向到: https://YOUR_REGISTERED_REDIRECT_URI/?code=CODE

含义我需要定义一个端点在https://YOUR_REGISTERED_REDIRECT_URI,然后将请求

https://foursquare.com/oauth2/access_token ?CLIENT_ID = YOUR_CLIENT_ID & client_secret = YOUR_CLIENT_SECRET & grant_type = authorization_code & REDIRECT_URI = YOUR_REGISTERED_REDIRECT_URI &码= CODE

让我的服务器端的实际令牌。

此流程如何将令牌回传给移动设备以供使用?

感谢您的帮助。

回答

1

这只是一个猜测,我的一部分,但这里有一个可能的流程:

  1. 打开一个UIWebView和用户发送至https://foursquare.com/oauth2/authenticate的client_id = YOUR_CLIENT_ID & RESPONSE_TYPE =代码& REDIRECT_URI = YOUR_REGISTERED_REDIRECT_URI
  2. 后,他们接受,他们将被重定向到https://YOUR_REGISTERED_REDIRECT_URI/?code=CODE,如https://domainyouown.com/callback?code=asdfasdfasdfasdf
  3. 你有回电页面请求https://foursquare.com/oauth2/access_token?client_id = YOUR_CLIENT_ID & client_secret = YOUR_CLIENT_SECRET & grant_type = authorization_code & REDIRECT_URI = YOUR_REGISTERED_REDIRECT_URI &码= CODE
  4. 获得JSON响应(仍处于回调页面的代码),将其保存到服务器端的数据库(如使用),也显示在的HTML div中的页面,其id为'oauth-token'。
  5. 使用的UIWebView的 - (的NSString *)stringByEvaluatingJavaScriptFromString:(的NSString *)脚本来获取div的值,并将其存储在您的iPhone设置

您可能还需要检查出https://github.com/nxtbgthng/OAuth2Client

0

如果你在做服务器的流量少(仅移动应用程序),你会做这条路线:

  1. 弹出一个UIWebView - >https://foursquare.com/oauth2/authenticate?client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REGISTERED_REDIRECT_URI(确保重定向匹配)
  2. 您的重定向的uri应该指向您的应用的URL方案(例如APPNAME:// callbackuri)。当用户完成登录时,UIWebview将调用包含oauth标记的重定向URI。该URI将在您的应用程序委托中调用方法- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
  3. 从URL得到您的访问令牌:
if ([url.absoluteString rangeOfString:@"access_token="].location != NSNotFound) 
     NSString *accessToken = [[url.absoluteString componentsSeparatedByString:@"="] lastObject]; 

保存那的accessToken,并确保它包括在所有的Foursquare的电话(参数:组oauth_token =的accessToken)