测试已测试 | ✗ |
语言语言 | Obj-CObjective C |
许可证 | Apache 2 |
发布最后一次发布 | 2015年10月 |
由Brian Dorfman、Sam Grossberg维护。
Foursquare原生身份验证使得应用程序的用户更容易与Foursquare相连。与基于Web的OAuth不同,原生身份验证会重复使用Foursquare应用程序的用户凭据,从而解决了用户在您的应用程序中重新登录Foursquare的问题。
此存储库包含一个辅助类(FSOAuth
),可以直接用于您自己的应用程序。它还包含一个简单的测试应用程序,展示了如何使用该类。
在http://foursquare.com/developers/apps中,在“重定向URI(s)”字段中输入您希望Foursquare用于认证后返回到您的应用程序的URL回调。您可以在此字段中添加多个URI,使用逗号分隔。要支持iOS 9,您必须使用统一链接(http
或https
)。要支持较早的iOS版本,您需要使用原生的自定义URL方案(例如yourappname://foursquare
)。如果可能,您应该支持这两种类型的URL,并将两种都注册为您的重定向URI。
如果您支持原生URL方案(iOS 8及以下),请将您的回调URL方案添加到您的应用程序的Info.plist
文件(URL类型字段中)。
如果您支持统一链接,则需要适当地设置您的回调URL。请参阅Apple的文档获取更多信息。
将FSOAuth.{h,m}
添加到您的Xcode项目。如果您正在使用git对您的应用程序进行版本控制,我们建议将其作为子模块添加到您的存储库中,以便更容易获取未来的更新。FSOAuth可以使用CocoaPods添加到项目中。
FSOAuth有三个主要方法。
+ (FSOAuthStatusCode)authorizeUserUsingClientId:(NSString *)clientID
nativeURICallbackString:(NSString *)nativeURICallbackString
universalURICallbackString:(NSString *)universalURICallbackString
allowShowingAppStore:(BOOL)allowShowingAppStore;
使用您的应用程序客户端ID和回调字符串调用此方法以使用Foursquare授权用户。如果已安装Foursquare应用程序的最新版本,则会将用户跳转到该应用程序,并显示授权对话框。用户选择接受或拒绝后,您的应用程序将在指定的URL处收到回调,其中附加了用户的访问码。
该方法将自动根据您的应用程序运行的iOS版本选择正确的回调字符串。如果您的应用程序运行在iOS 8或更低版本,您必须支持本地URL方案。如果您的应用程序运行在iOS 9或更高版本,您可以使用本地方案,但建议如果可能,也提供统一的链接回调。
注意:您的回调必须添加到http://foursquare.com/developers/apps页面的“重定向URI(s)”字段,否则用户将看到错误消息而不是授权提示。
该方法有五个可能的返回值
如果在iOS 9或更高版本上运行,您将无法获取NotInstalled
或NotSupported
的返回值,因为应用程序不再可以自由检查系统已注册的URL方案。相反,如果适当版本的Foursquare应用程序未安装,Safari将打开Foursquare OAuth页面的网页版。
如果将allowShowingAppStore
参数设置为YES,那么当返回FSOAuthStatusErrorFoursquareNotInstalled
或FSOAuthStatusErrorFoursquareOAuthNotSupported
时,此方法将向用户提供Foursquare应用程序在App Store的页面,以便他们可以轻松安装或更新应用程序(通过让他们跳转到App Store应用程序,或者在iOS 6+上运行并使用至少iOS 6 SDK编译时,通过呈现模态StoreKit表单)。如果传递NO,则应手动适当处理这两个返回值。如果运行在iOS 9或更高版本,此参数没有作用,因为在使用统一链接时无法检测到Foursquare是否已安装。
+ (NSString *)accessCodeForFSOAuthURL:(NSURL *)url
+ error:(FSOAuthErrorCode *)errorCode;
当您收到来自Foursquare的回调时,请调用此方法,传入您收到的NSURL
对象。它将从URL的参数中解析出访问代码和错误代码(如果有),并将其返回给您。
注意:您的应用程序可能会接收到它未启动的访问代码回调(例如,通过用户最初选择通过Foursquare应用程序中的屏幕连接到您的应用程序)。因此,当您的回调收到时,您不应依赖您的应用程序处于任何特定的状态。
可能的错误代码值为
+ (void)requestAccessTokenForCode:(NSString *)accessCode
clientId:(NSString *)clientID
callbackURIString:(NSString *)callbackURIString
clientSecret:(NSString *)clientSecret
completionBlock:(FSTokenRequestCompletionBlock)completionBlock;
此方法将启动异步网络请求到Foursquare,以将用户的访问代码转换为身份验证令牌。
警告:出于安全原因,除非必要,否则建议您不要使用此方法。应将返回的accessCode传递到您自己的服务器,并让该服务器联系Foursquare服务器将代码转换为访问令牌,而不是将客户端密钥包含在您的应用程序的二进制文件中。但是,提供此辅助方法是为了在您的情况不可能时供您使用。
使用由+accessCodeForFSOAuthURL:error:
返回给你的访问代码调用此方法,同时提供你的Foursquare客户端ID、回调字符串和客户端密钥。回调URI必须是用于生成访问代码的相同URI。
网络请求完成时,将调用你的完成块。该块的签名如下:
typedef void (^FSTokenRequestCompletionBlock)(NSString *authToken, BOOL requestCompleted, FSOAuthErrorCode errorCode);
authToken将在请求成功时被设置为用户的Foursquare OAuth令牌。
errorCode是从Foursquare服务器返回的错误代码。它与+accessCodeForFSOAuthURL:error:
返回的errorCode具有相同的可能值。(见上。)
requestCompleted将为YES
,如果网络请求已经正确完成,否则为NO
。如果这是NO
,则应忽略authToken和errorCode的值。如果NO
,您可能需要在确认用户具有有效的互联网连接后再次尝试请求。这也可能表明Foursquare服务器存在暂时问题。
示例应用可以作为如何使用你的类中的FSOAuth的简单参考,以及确保你的客户端ID和密钥正常工作的基本测试。
应用将为您提供输入客户端ID、客户端密钥和回调URL的字段。它有两个按钮。第一个按钮启动快速应用切换到Foursquare应用并获取访问代码。第二个按钮通过联系Foursquare服务器将接收到的访问代码转换为令牌。这只能在首先成功接收访问代码从最初的Foursquare快速应用切换后才能正常工作。
该应用本身使用“fsoauthexample”作为其schema。如果你想在快速应用切换后返回到它(而不是返回到你的自己的应用),你需要将fsoauthexample redirect URI添加到foursquare.com上你的应用设置中(或更改Info.plist
和FSViewController.m
的-handleURL:
方法以匹配现有重定向schema之一)。这对于代码→令牌转换功能正常运行是必要的。
你应该在自己的应用程序中硬编码所有这些值。如果可能,你的客户端密钥应仅存储在你的自己的服务器上,并且根本不应包含在应用中。
示例应用包含显示如何设置通用链接回调处理的代码。但是,由于它没有启动它的匹配https url,因此您不能直接使用通用链接回调返回到它。
有关如何使用Foursquare API的更多信息,请参阅https://developer.foursquare.com。