Jitters先生(适用于iOS)

我们相信,Foursquare API是世界上最先进的位置API,独立开发人员和全球企业都在使用。 作为我们自己的应用程序开发人员,我们想展示将功能强大的位置情报集成到应用程序中有多么简单。

为了突出显示许多应用程序中常见的一些位置端点,我们创建了一个名为Mr. Jitters的示例应用程序。 适用于iOS的Jitters先生可在App Store上获得,也可在GitHub上开源。

我们热爱咖啡,因此我们决定将Swarm广受爱戴的Jitters先生标签贴到手机上,以快速找到世界上最好的咖啡,无论您身在何处。 我们希望采用这种非常简单的概念来寻找咖啡,并在此过程中展示两个Foursquare API端点:搜索和探索。

总览

打开应用程序后,用户可以通过点击屏幕中间的Mr. Jitters图标来开始寻找咖啡因。 然后,我们向用户提供他们当前所在的地点以及步行范围内最好的咖啡店。 如果用户点击某行,他们会在地图上看到咖啡店,他们可以从Foursquare.com获取路线或更多信息。

*从左到右:主屏幕,搜索视图,地图和方向

在本演练中,您将学习如何:

  1. 注册Foursquare API密钥
  2. 确定设备在现实世界中的位置
  3. 查找该地区推荐的最佳场所

如果要在继续之前先查看实时应用程序,可以从App Store下载它。

本教程是用Swift 3编写的,适用于熟悉iOS开发的人员。 如果您以前从未构建过iOS应用程序,请查看一些出色的在线资源以开始使用。

获取代码

最好的开始方法是从GitHub获取代码并在XCode中打开。 该项目是在Swift 3中构建的,因此您需要XCode 8或更高版本。

应用程式结构

该应用程序由三个View Controller组成:

  1. HomeController.swift | 带咖啡搜索按钮的主屏幕
  2. SearchController.swift | 搜索结果页面显示您当前所在的地点以及附近最好的咖啡
  3. DetailsController.swift | 在地图视图中显示咖啡店,其中包含指向Foursquare场地页面的链接以及有关路线的链接

为简单起见,我们决定不将第三方库用于核心位置或HTTP网络。 这样,您应该能够将任何这些代码复制粘贴到自己的应用程序中,而无需安装其他依赖项。 但是,如果您的应用程序已经在使用Alamofire或SwiftLocation之类的库,则应该可以轻松地将此代码集成到这些软件包中。

设置Foursquare API

要注册免费的Foursquare API密钥,请导航至developer.foursquare.com并创建一个新应用。 创建新应用后,您将获得两个非常重要的信息,即客户端ID和客户端密钥。 您将需要同时使用这两者来开始对Foursquare进行API调用。

获得客户端ID和客户端密钥后,将其粘贴到SearchController.swift中的CLIENT_ID和CLIENT_SECRET变量中。

 让client_id =“ CLIENT_ID” 
 让client_secret =“ CLIENT_SECRET” 

生成并运行应用

此时,您应该能够构建和运行该应用程序。 点按“ Jitters先生”图标,您会看到附近最好的咖啡馆以及您目前所在的地点。 您应该能够在咖啡店上点击以在地图上看到它,获取路线或在Foursquare上查看。

Foursquare API方法

现在您已经启动并运行了应用程序,让我们看一下使用Foursquare API端点的一些代码。 SearchController.swift文件是我们使用Foursquare API进行所有联网的地方。

确定设备在现实世界中的位置

在SearchController.swift中,我们调用snapToPlace()函数来确定设备当前位于哪个场所。 在此功能中最重要的方面是我们如何为场所/搜索端点设置。

 让url =“ https://api.foursquare.com/v2/venues/search?ll=\(currentLocation.latitude),\(currentLocation.longitude)&v=20160607&intent=checkin&limit=1&radius=4000&client_id=\(client_id)&client_secret = \(client_secret)“ 

通常,此端点用于搜索特定的地点,但是在向0的另一个方向上确实效果很好-确定纬度/经度所在的地点。

完成此操作非常简单,您真正需要包含的就是ll参数,我们可以在其中传递设备当前位置的纬度和经度。 在这种情况下,我们还设置了limit=1因为我们只需要第一个场所,浪费带宽返回其他场所毫无意义。 我们还设置了radius=4000因为如果我们在农村地区,就没有必要返回远离的场地。

通过对Foursquare的任何API调用,您都需要包括身份验证和版本。 我们使用client_idclient_secret参数进行身份验证,并传递设置API密钥时获得的值。 我们告诉API使用v参数的版本。 您可以在此处阅读有关版本控制的更多信息,但总体而言, v将等于您构建和测试应用程序的日期。

构造URLSession我们的URL之后,您可以像我们在此处那样使用URLSession或通过诸如Alamofire之类的库,以首选方法发出GET请求。 从Foursquare检索响应后,便使用SwiftyJSON将响应解析为currentLocationLabel

查找该地区推荐的最佳场所

snapToPlace()函数与Foursquare异步对话时,我们正在snapToPlace()函数中进行另一个调用,以获取附近最好的咖啡店。 在这里,我们使用搜索/推荐端点,让我们看看如何构造此URL。

 让url =“ https://api.foursquare.com/v2/search/recommendations?ll = \(currentLocation.latitude),\(currentLocation.longitude)&v = 20160607&intent = coffee&limit = 15&client_id = \(client_id)&client_secret = \ (client_secret)” 

与在snapToPlace()函数中进行的场所/搜索调用类似,我们发送ll参数以及设备的当前位置, client_idclient_secret以及用于版本控制的v参数。

这里我们还包括一个intent参数。 此参数用于设置搜索的顶层意图,可以是:食物,早餐,早午餐,午餐,咖啡,晚餐,甜点,饮料,购物,娱乐或景点。 在这种情况下,我们将limit=15设置为limit=15因为我们想查看附近的前15家咖啡店。

现在有了此URL,您可以像以前一样进行GET请求。 我们再次使用SwiftyJSON将此响应解析为填充表视图的searchResults数组。

概括

我们想展示将功能强大的位置情报整合到应用程序中有多么简单。 在本演练中,您学习了如何通过Foursquare API检索场所的基础知识。

  1. 您可以在developer.foursquare.com上注册API密钥。 在开始向Foursquare发出API请求之前,您将需要此密钥。
  2. 您可以使用场所/搜索端点来确定设备在现实世界中的位置。 该端点可用于搜索特定地点,或者在我们的情况下,可通过仅包含ll参数并将限制设置为1来确定给定纬度/经度处的地点。
  3. 搜索/推荐端点可用于查找区域中最佳(或推荐)的场所。 该端点可以采用不同的意图,例如:食物,咖啡,甜点,饮料等。或者您可以使用query参数获取更具体的口味。

我鼓励您进一步研究Foursquare API。 现在您已经掌握了基础知识,请在此处查看我们的其他端点:developer.foursquare.com/docs。 并且不要忘记在您的应用程序中加入Foursquare认可印章。 我们迫不及待想看到您将用Foursquare构建的伟大事物。