Instagram API-使用Swift进行身份验证
本教程将向您介绍Instagram API,并教您如何验证Instagram帐户并检索访问其他端点(例如,获取媒体,喜欢,评论,关系等)所需的ACCESS_TOKEN。尚未使用任何第三方库。
1要使用该API,我们需要在Instagram API平台上注册一个应用程序并接收一个CLIENT ID。 下面的表格显示了该屏幕的外观。 我已经填写了一些虚拟的详细信息,因此在注册您的应用程序时请使用您自己的信息。 所有字段均为必填项。
对于redirect_uri字段,请输入一个有效域,并将其写下来,因为稍后您将需要它。 另外,如果您在使用隐私政策时遇到困难,可以在此处找到示例模板。
2输入所有必需的详细信息后,单击“详细信息”选项卡旁边的“安全性”选项卡,然后取消选中“ 禁用隐式OAuth”。 默认情况下,应选中它,如下所示。 完成后,只需单击注册按钮。
3如果您的应用程序已成功注册,您将被重定向到“管理客户端”屏幕,您可以在其中找到您的客户端信息。 Instagram默认将您的API设为沙盒模式。 这意味着每个访问令牌每小时只能使用500个请求。 如果您想了解有关限制的更多信息,可以在速率限制下找到它。
该限制足以进行测试,但如果要上线,则需要提交生产模式。 为此,Instagram希望您完成您的应用程序,然后录制视频以展示您如何使用其API,然后提交以供审核。 您还需要选择所需的权限。 提交过程类似于Facebook API。 您可以在管理->权限下找到提交表单。
Instagram API平台已完成。 现在让我们做一些编码! 🤓
Instagram没有像Facebook那样为我们提供应用程序登录。 相反,我们需要直接在UIWebView中调用特定的URL,这将打开Instagram登录表单。 然后,用户应输入他的凭据,我们的工作是拦截回调的响应。 这是实现Instagram身份验证的唯一方法。
我不会告诉您如何在界面生成器中添加UIWebView组件,就像我已经知道的那样。 我将只关注代码。 在继续之前,请使用UIWebView组件和IBOutlet创建单独的控制器。
添加常数
首先,我们将常量存储在名为API的结构下。 我更喜欢将所有常量保留在名为Constants.swift的单独文件下。
struct API {static let INSTAGRAM_AUTHURL =“ https://api.instagram.com/oauth/authorize/"static let INSTAGRAM_CLIENT_ID =” YOUR_CLIENT_ID“ static let INSTAGRAM_CLIENTSERCRET =” YOUR_CLIENT_SECRET“ static static INSTAGRAM_REDIRECT_URI =” RAM_ATO_RED “静态让INSTAGRAM_SCOPE =” follower_list + public_content” / *添加您需要的任何范围https://www.instagram.com/developer/authorization/ * /}
Apple在2017年发布的前4大专辑– App Space
十周年纪念活动是首次在位于苹果新店内的全新史蒂夫·乔布斯剧院举行的活动。
theappspace.com
载入网址
在viewDidLoad()中输入以下代码,它将从Instagram调用登录表单。
让authURL =字符串(格式:“%@?client_id =%@&redirect_uri =%@&response_type = token&scope =%@&DEBUG = True”,参数:[API.INSTAGRAM_AUTHURL,API.INSTAGRAM_CLIENT_ID,API.INSTAGRAM_REDIRECT_URI,API.INSTAGRAM_SCOPE])让urlRequest = URLRequest.init(url:URL.init(string:authURL)!) webView.loadRequest(urlRequest)
获取令牌
我们需要实现shouldStartLoadWith() UIWebViewDelegate方法,在这里我们将拦截access_token。
扩展ViewController:UIWebViewDelegate {func webView(_ webView:UIWebView,shouldStartLoadWith request:URLRequest,navigationType:UIWebViewNavigationType)-> Bool {return checkRequestForCallbackURL(request:request)}}
创建了一些帮助程序功能以更好地进行代码组织:
func checkRequestForCallbackURL(request:URLRequest)-> Bool {让requestURLString =(request.url?.absoluteString)! as Stringif requestURLString.hasPrefix(API.INSTAGRAM_REDIRECT_URI){让范围:Range = requestURLString.range(of:“ #access_token =”)!handleAuth(authToken:requestURLString.substring(from:range.upperBound))return false;}返回true} func handleAuth(authToken:String){print(“ Instagram身份验证令牌==”,authToken)}
checkRequestForCallbackURL()函数将检查URL是否包含带有您的REDIRECT_URI的前缀,然后检索access_token。 我还创建了另一个清理函数,您可以在其中处理自己的访问令牌逻辑。
只需复制并粘贴上面的代码,您就可以开始了! 🚀🚀🚀