---
title: "集成API和移动应用程序"
date: "2018-08-21"
categories: 
  - "json"
  - "mobile-development"
  - "mobiletogether"
  - "xml"
tags: 
  - "apis-and-mobile-apps"
  - "data-integration"
  - "mobile-development"
description: 探索如何有效地将API与移动应用程序集成，从而提升用户体验。本指南涵盖地理位置功能、RESTful请求以及数据处理等方面。
---
Status: #blog

Tags:  #apis-and-mobile-apps #data-integration #mobile-development

Categories: [json](/blog/zh/category/json.md) | [mobile-development](/blog/zh/category/mobile-development.md) | [mobile-development](/blog/zh/category/mobile-development.md) | [xml](/blog/zh/category/xml.md)
# 集成API和移动应用程序

对于经常使用移动设备的用户来说，便捷高效的应用程序至关重要。MobileTogether 为开发者提供了功能，可以无缝集成 API 和移动应用程序，从而将移动设备的各项功能与来自外部来源的最新信息相结合。这使得开发者能够创建定制的跨平台原生应用程序，为最终用户提供丰富且引人入胜的体验。

公共API是获取外部数据的绝佳来源，可以显著提升几乎任何定制移动应用程序的功能。开发者可以将来自多个API的信息整合在一起，为用户提供更优质、更快速、且以优雅统一的方式呈现的信息。

几乎所有您的移动应用程序可能需要的信息，例如航班追踪、商品或股票价格以及热带风暴追踪，都提供了相应的API接口。

在这篇文章中，我们将介绍一款GPS应用程序。这款应用首先利用移动设备的地理定位功能来回答一个基本问题：“我在哪里？” 然后，它会与Google和MapQuest的API进行连接，从而提供大量附加信息。此外，我们还会集成一个具有空间感知功能的搜索引擎，用于查找附近的兴趣点，范围可以从几百米以内，一直到在卫星照片上精确显示用户的位置，并提供整个大陆甚至更大范围的广角视图。

[![](/blog/images/image01.png)](image01.png)

<!--more-->

当我们的应用程序启动时，用户首先会看到用于控制GPS的按钮，就像在这个来自MobileTogether模拟器窗口的视图中显示的那样：

[![移动应用程序启动时显示的界面，该界面会调用API接口获取数据](/blog/images/api-data-and-mobile-apps-initial-user-screen.png)](api-data-and-mobile-apps-initial-user-screen.png)

一旦获取了第一组坐标，一系列色彩鲜艳的工具栏图标将提供访问新功能的途径：

[![在获取地理位置坐标后，移动应用程序可以使用以下工具](/blog/images/api-data-and-mobile-apps-coordinates-captured.png)](api-data-and-mobile-apps-coordinates-captured.png)

从左到右，这些按钮分别执行以下功能：

- 绿色的对话按钮会打开移动设备的短信应用程序，并默认显示一条消息，内容为“我在：”，以及经度和纬度坐标以及街道地址。这个按钮的操作将MobileTogether的短信功能与地理位置数据源的文本结合起来，具体实现方式如“动作树”定义中所示。 相同的操作适用于Android、iPhone或Windows手机，开发者无需关注控制每个移动电话操作系统的具体机制。 MobileTogether 会自动处理每个设备的细节。

[![发送包含地理位置信息的短信](/blog/images/api-data-and-mobile-apps-share-by-sms.png)](api-data-and-mobile-apps-share-by-sms.png)
- 折叠地图图标会打开移动设备默认的地图应用程序，并将地图中心定位到显示的坐标。这同时也是一个MobileTogether动作，其与各种移动设备类型的交互细节将自动处理：[![相同的MobileTogether动作可以为任何移动操作系统显示当前位置的地图](/blog/images/api-data-and-mobile-apps-show-map-action.png)](api-data-and-mobile-apps-show-map-action.png)
- 三个点图标是一个“更多信息”按钮。它会执行一系列操作。首先，它将经纬度坐标发送到 MapQuest 反向地理编码 API，以获取街道地址，这个地址通常比原始地理位置信息更完整。然后，它使用 MobileTogether 动作，在移动设备上的网页浏览器中打开一个搜索引擎，并使用该地址进行搜索：[![MobileTogether 动作可以动态构建 URL](/blog/images/api-data-and-mobile-apps-build-a-url.png)](api-data-and-mobile-apps-build-a-url.png)
- 该卫星图像工具图标通过与谷歌地图API的接口，根据用户指定的缩放级别，生成指定位置的卫星照片图像文件。该图像可以保存到移动设备的相册，也可以通过短信或电子邮件发送。以下是一个示例，展示了如何使用上述坐标来生成卫星图像：[![MobileTogether动作，用于构建卫星图像的URL](/blog/images/api-data-and-mobile-apps-satellite-image-url.png)](api-data-and-mobile-apps-satellite-image-url.png) [![由MobileTogether应用程序生成的卫星图像](/blog/images/api-data-and-mobile-apps-satellite-image-1.jpg)](api-data-and-mobile-apps-satellite-image-1.jpg)
- 该放大镜工具会打开一个新页面，并与MapQuest搜索API和Place搜索API进行连接，为用户提供两种不同的搜索选项。

### 将API与移动应用程序连接起来

该卫星图像工具使用 XPath 表达式，通过 Google Maps API 生成图像，并通过 URL 打开该图像。API 所需的参数作为 URL 的一部分进行传递，以设置各种选项。每个参数的值都是实时生成的。以下是 XPath 表达式，如在 XPath/XQuery 表达式编辑器中看到的：

[![在 MobileTogether 的 XPath/XQuery 表达式编辑器中，构建 API 的 URL](/blog/images/api-data-and-mobile-apps-building-an-api-url.png)](api-data-and-mobile-apps-building-an-api-url.png)

颜色编码有助于更清晰地表达含义：第一行中的绿色部分表示字符串运算符，用单引号括起来的橙色部分表示常量，而紫色部分则代表数据树中的元素或函数的结果。

以下是一个最终URL的示例，为了与XPath表达式对应，我们添加了换行符进行格式化：

[![在 MobileTogether 应用程序中生成的链接](/blog/images/api-data-and-mobile-apps-url-example.png)](api-data-and-mobile-apps-url-example.png)

生成的图像尺寸将自动匹配每个终端用户的设备窗口的宽度和高度，因为这些数值被定义为 MobileTogether 的全局变量。

点击卫星按钮时，会使用移动设备默认的网页浏览器打开相应的网址。

### MobileTogether 支持 HTTP/FTP、REST 和 SOAP 协议，可用于集成 API 和移动应用程序

MapQuest 搜索 API 和 Place 搜索 API 都使用 RESTful API 的 GET 请求来获取结构化数据，这些数据会成为 MobileTogether 数据树中的一个页面来源，并且可以用于进一步的处理。

“GET”请求的定义是在向应用程序的数据树中添加页面源时创建的对话框中设置的，具体如下所示：

[![MobileTogether 支持通过 API 发送 REST 请求以获取数据](/blog/images/api-data-and-mobile-apps-REST-call.png)](api-data-and-mobile-apps-REST-call.png)

一种简单的方法是，将API文档中的示例URL复制粘贴到上面的URL字段中，然后只需在花括号 {} 中替换参数定义，并在“参数”部分定义参数值的来源。

我们的应用程序中的分类搜索功能允许用户通过选择下拉菜单来指定搜索半径和最大搜索结果数量。 此外，还有其他下拉菜单，允许用户从API文档中提供的列表中选择搜索目标。 当用户点击搜索按钮时，MobileTogether 会执行一个 GET 请求：

[![MobileTogether应用程序，带有用户按钮，可以通过API接口获取外部数据](/blog/images/api-data-and-mobile-apps-get-request.png)](api-data-and-mobile-apps-get-request.png)

[![MobileTogether 动作，用于执行 API 的 GET 请求](/blog/images/api-data-and-mobile-apps-get-request-action.png)](api-data-and-mobile-apps-get-request-action.png)

返回的 XML 数据会被添加到数据树中，如在 MobileTogether 模拟器窗口的“页面源代码”部分中所示

[![通过API调用，MobileTogether可以获取的外部数据](/blog/images/api-data-and-mobile-apps-external-data-retrieved.png)](api-data-and-mobile-apps-external-data-retrieved.png)

一个新的搜索结果页面会被打开，以表格的形式向用户展示相关信息，用户可以通过滚动条查看。请注意，API 会自动根据距离当前位置的远近对搜索结果进行排序。

[![在 MobileTogether 应用中，用户查看检索到的数据的界面](/blog/images/api-data-and-mobile-apps-user-data-view.png)](api-data-and-mobile-apps-user-data-view.png)

在搜索结果页面上的附加工具按钮可以实现以下功能：打开地图，显示前往目标地点的路线；进行网络搜索，搜索目标地点的名称和位置；或者一键拨打电话至目标地点。

分类搜索功能可以提供较好的搜索结果，但对于用户来说，从300多个可能的选项中进行选择可能会比较繁琐。MapQuest的地点搜索API可以接受任何纯文本短语作为搜索目标，并提供相似的搜索结果。地点搜索API也以RESTful的GET请求方式进行访问，其设置方式与分类搜索类似：

[![MobileTogether 配置，用于发送第二个 REST 请求，以获取更多数据](/blog/images/api-data-and-mobile-apps-REST-call-2.png)](api-data-and-mobile-apps-REST-call-2.png)

地点搜索 API 与分类搜索在所需参数和返回的数据方面存在一些差异。分类搜索可以返回 XML 或 JSON 格式的结果，但地点搜索 API 仅返回 JSON 格式的数据。

MobileTogether 可以轻松处理多种数据格式。我们只需在应用程序中添加一个编辑字段控件来收集用户输入，然后再次使用“重新加载”操作来执行获取数据的请求。

[![MobileTogether 应用会收集用户输入，用于构建 REST API 请求](/blog/images/api-data-and-mobile-apps-user-tool-2.png)](api-data-and-mobile-apps-user-tool-2.png)

JSON 结果可以在模拟器窗口的“页面源代码”数据树中查看

[![MobileTogether应用程序检索到的JSON数据的视图](/blog/images/api-data-and-mobile-apps-JSON-data-view.png)](api-data-and-mobile-apps-JSON-data-view.png)

结果以可滚动表格的形式呈现给用户，这里只显示部分内容。需要注意的是，此API接口不返回当前位置的距离信息，也不提供电话号码

[![在 MobileTogether 应用中，用户可以查看外部 JSON 数据](/blog/images/api-data-and-mobile-apps-user-view-json.png)](api-data-and-mobile-apps-user-view-json.png)

虽然API返回的是JSON数据，但我们仍然可以将这些结果应用于MobileTogether的地理位置功能，从而让地图按钮打开移动设备上的默认地图应用程序，并显示前往该地址的路线

[![MobileTogether 动作，用于显示前往某个地点的路线](/blog/images/api-data-and-mobile-apps-show-route-action.png)](api-data-and-mobile-apps-show-route-action.png)

[![以上展示的 MobileTogether 动作生成的地图](/blog/images/api-data-and-mobile-apps-show-route-map.png)](api-data-and-mobile-apps-show-route-map.png)

一个“MobileTogether 打开 URL”的操作被分配给“地球仪”工具，用于在网页浏览器窗口中打开结果位置的名称和地址。嵌套的替换操作符确保生成的 URL 具有正确的语法。

[![MobileTogether 动作，用于实时构建网页搜索查询](/blog/images/api-data-and-mobile-apps-web-search-action.png)](api-data-and-mobile-apps-web-search-action.png)

[![安卓设备上应用程序搜索查询的显示效果](/blog/images/api-data-and-mobile-apps-web-search.png)](api-data-and-mobile-apps-web-search.png)

### 关于API密钥的一些说明

这里描述的每个API接口都需要一个唯一的API密钥，该密钥由API提供商分配。每次发起API请求时，API密钥用于识别和验证用户身份。对于一个在特定企业用户群体中共享的应用程序，最合适的做法是使用一个共享密钥，并将该密钥作为持久性元素存储在MobileTogether的数据结构中。来自所有用户的请求将被汇总，如果总使用量超过任何API的免费额度，则会生成一张账单。

当一个应用程序计划面向公众发布时，开发者可能希望要求每个用户获取一个唯一的API密钥，并由用户自行负责其使用情况。我们的应用程序包含一个设置页面，可以通过在主页面上点击齿轮图标来访问。该设置页面允许用户设置各种偏好设置，包括选择搜索引擎，以及一个功能，可以将每个API密钥存储在与每个移动设备独有的持久数据树中。

[![在 MobileTogether 应用中获取唯一的用户 API 密钥](/blog/images/api-data-an-mobile-apps-record-key.png)](api-data-an-mobile-apps-record-key.png)

### 添加自定义功能

到目前为止，我们已经描述了一些在许多移动应用程序中常见的地理定位功能。您还可以使用上述API——或者其他公共API——为应用程序添加功能，以解决特定问题。例如，我们的应用程序包含一个名为“我在哪里”的页面。任何需要记录沿途行程的用户，都可以点击此页面上的“信封”工具，通过电子邮件提交行程记录。在我们的应用程序中，长按任何工具图标会弹出一个帮助信息：

[![一个弹出式帮助信息，类似于在 MobileTogether 移动应用 Android 版本中看到的提示](/blog/images/api-data-and-mobile-apps-pop-up-help.png)](api-data-and-mobile-apps-pop-up-help.png)

您可以自行创建和组合API以及移动应用，并通过体验MobileTogether的所有其他功能，来开发优雅的跨平台移动应用 [下载免费的 MobileTogether 设计工具](https://www.altova.com/zh/download/mobiletogether.html), 它还内置了帮助文档、教程以及大量示例。此外，您还可以查阅许多关于MobileTogether的资料 [视频演示](https://www.altova.com/zh/mobiletogether/demos) 为了帮助您入门。
