FSOAuth 1.2.1

FSOAuth 1.2.1

测试已测试
语言语言 Obj-CObjective C
许可证 Apache 2
发布最后一次发布2015年10月

Brian DorfmanSam Grossberg维护。



FSOAuth 1.2.1

  • Brian Dorfman

foursquare-ios-oauth

Foursquare原生身份验证使得应用程序的用户更容易与Foursquare相连。与基于Web的OAuth不同,原生身份验证会重复使用Foursquare应用程序的用户凭据,从而解决了用户在您的应用程序中重新登录Foursquare的问题。

此存储库包含一个辅助类(FSOAuth),可以直接用于您自己的应用程序。它还包含一个简单的测试应用程序,展示了如何使用该类。

设置FSOAuth与您的应用程序

  1. http://foursquare.com/developers/apps中,在“重定向URI(s)”字段中输入您希望Foursquare用于认证后返回到您的应用程序的URL回调。您可以在此字段中添加多个URI,使用逗号分隔。要支持iOS 9,您必须使用统一链接(httphttps)。要支持较早的iOS版本,您需要使用原生的自定义URL方案(例如yourappname://foursquare)。如果可能,您应该支持这两种类型的URL,并将两种都注册为您的重定向URI。

  2. 如果您支持原生URL方案(iOS 8及以下),请将您的回调URL方案添加到您的应用程序的Info.plist文件(URL类型字段中)。

  3. 如果您支持统一链接,则需要适当地设置您的回调URL。请参阅Apple的文档获取更多信息。

  4. FSOAuth.{h,m}添加到您的Xcode项目。如果您正在使用git对您的应用程序进行版本控制,我们建议将其作为子模块添加到您的存储库中,以便更容易获取未来的更新。FSOAuth可以使用CocoaPods添加到项目中。

使用FSOAuth

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)”字段,否则用户将看到错误消息而不是授权提示。

该方法有五个可能的返回值

  • FSOAuthStatusSuccessOAuth请求成功启动。用户被弹出到Foursquare iOS应用以批准或拒绝授权您的应用程序。
  • FSOAuthStatusErrorInvalidClientID您没有向该方法提供有效的客户端ID。
  • FSOAuthStatusErrorInvalidCallback您没有提供已注册到系统的有效回调字符串。
  • FSOAuthStatusErrorFoursquareNotInstalledFoursquare未安装在用户的iOS设备上。
  • FSOAuthStatusErrorFoursquareOAuthNotSupported安装在用户iOS设备上的Foursquare应用程序版本太旧而无法支持本地身份验证。

如果在iOS 9或更高版本上运行,您将无法获取NotInstalledNotSupported的返回值,因为应用程序不再可以自由检查系统已注册的URL方案。相反,如果适当版本的Foursquare应用程序未安装,Safari将打开Foursquare OAuth页面的网页版。

如果将allowShowingAppStore参数设置为YES,那么当返回FSOAuthStatusErrorFoursquareNotInstalledFSOAuthStatusErrorFoursquareOAuthNotSupported时,此方法将向用户提供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应用程序中的屏幕连接到您的应用程序)。因此,当您的回调收到时,您不应依赖您的应用程序处于任何特定的状态。

可能的错误代码值为

  • FSOAuthErrorNone没有错误并且成功读取了访问代码。
  • FSOAuthErrorUnknown从Foursquare服务器返回了一个未识别的错误字符串或无法正确解析URL
  • FSOAuthErrorInvalidRequest / FSOAuthErrorInvalidClient / FSOAuthErrorInvalidGrant / FSOAuthErrorUnauthorizedClient / FSOAuthErrorUnsupportedGrantType - 这些枚举值对应于http://tools.ietf.org/html/rfc6749#section-5.2中列出的OAuth错误代码。
+ (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,则应忽略authTokenerrorCode的值。如果NO,您可能需要在确认用户具有有效的互联网连接后再次尝试请求。这也可能表明Foursquare服务器存在暂时问题。

使用示例应用

示例应用可以作为如何使用你的类中的FSOAuth的简单参考,以及确保你的客户端ID和密钥正常工作的基本测试。

应用将为您提供输入客户端ID、客户端密钥和回调URL的字段。它有两个按钮。第一个按钮启动快速应用切换到Foursquare应用并获取访问代码。第二个按钮通过联系Foursquare服务器将接收到的访问代码转换为令牌。这只能在首先成功接收访问代码从最初的Foursquare快速应用切换后才能正常工作。

该应用本身使用“fsoauthexample”作为其schema。如果你想在快速应用切换后返回到它(而不是返回到你的自己的应用),你需要将fsoauthexample redirect URI添加到foursquare.com上你的应用设置中(或更改Info.plistFSViewController.m-handleURL:方法以匹配现有重定向schema之一)。这对于代码→令牌转换功能正常运行是必要的。

你应该在自己的应用程序中硬编码所有这些值。如果可能,你的客户端密钥应仅存储在你的自己的服务器上,并且根本不应包含在应用中。

示例应用包含显示如何设置通用链接回调处理的代码。但是,由于它没有启动它的匹配https url,因此您不能直接使用通用链接回调返回到它。

更多信息

有关如何使用Foursquare API的更多信息,请参阅https://developer.foursquare.com