使用 O365 发现服务和文件 API 来创建 Cordova 应用

在本主题中,你将学习如何在使用适用于 Apache Cordova 的 Visual Studio 工具创建的应用中为 Office 365 利用客户端库中一些新 API。

适用于 Visual Studio 2013 的 Office 365 API 工具

如果你尝试在 Cordova 应用程序工作流中首次使用 Office 365 API,请按照文档安装适用于 Visual Studio 预览版的 Office 365 API 工具 并将服务添加到你的项目中。

Office 365 提供基于 REST 的 API,使开发人员能够访问 Office 资源,如日历、联系人、邮件、文件等。 你可以直接对 REST API 编程以与 Office 365 交互,但是如果你使用 REST API 你必须围绕管理身份验证令牌编写和维护代码、构建正确的 URL、查询你想访问的 API 并执行其它任务。 通过使用 Office 365 客户端库访问 Office 365 API 而不是 REST,你可以减少需要在 Cordova 应用程序中编写的代码的复杂性。

适用于 Visual Studio 预览版的 Office 365 API 工具 包括支持 SharePoint 文件服务,它提供了对 MyFiles 服务的访问。 除了 SharePoint 服务之外,还提供了对 O365 发现服务的支持,这有助于找到登录用户的 SharePoint 服务终点。 这些服务可以被用来构建在 OneDrive for Business 中枚举文件的简单的文件资源管理器。

为 OneDrive for Business 构建简单的文件资源管理器

该程序的目的是枚举存储在 OneDrive for Business 中的文件。 示例的源代码位于 GitHub

OneDrive Explorer app using Office 365

入门

此应用程序使用以下框架和库。

用于演示应用程序以从 OneDrive 获取文件的服务是:

  • O365 发现服务,用于为已登录用户发现 SharePoint 服务终点。

  • 文件 API,为用户的 OneDrive for Business 检索文件和文件夹信息。

创建身份验证和发现上下文

在你的应用程序可以访问 Office 365 服务之前,应用程序必须经过身份验证。 Azure AD 公认框架 处理身份验证。

在你可以使用 O365 服务执行任何操作之前,你需要的基本对象是上下文对象。 对于演示应用程序,需要如下的上下文对象:

  • 认证上下文

  • 发现上下文

下面的代码构造了如下这些对象:

var authContext = new O365Auth.Context();
var discoveryContext = new O365Discovery.Context();

authContext 对象允许你获取所需的 ID 令牌和访问令牌,它们可以用来获取用户信息和调用指定服务。

discoveryContext 对象允许你获取 Office 365 服务功能,如邮件或日历或 MyFiles,连同它们相应的 URL 端点。

一旦你获得了需要的 ID 令牌,它可以用来识别用户。 ID 令牌是 base64 编码的网络令牌。 你可以使用此令牌检索当前登录的用户,如下所示。

authContext.getIdToken("https://outlook.office365.com/").then(
        (function (token) {
    // Can use token.givenName and token.familyName
}).bind(this), function (reason) {
    console.og(reason.message);
});

访问令牌是 base64 URL 编码的 web 令牌,可用于 API 访问。 以下是你如何访问用于调用 SharePoint 服务的令牌。

authContext.getAccessTokenFn('Microsoft.SharePoint')

使用文件 API

"MyFiles" 的 SharePoint 功能对象允许你以编程方式使用文件和文件夹。 要做到这一点,你必须首先获取功能集,然后在返回的集合中寻找 MyFiles 功能。 要获得功能对象,请按如下方法为 Microsoft.SharePoint传递访问令牌来使用发现服务:

var fileCapability;
discoveryContext.services(authContext.getAccessTokenFn(
    'Microsoft.SharePoint')).then(
    (function (capabilities) {
    // We have the capabilities object. 
    // Enumerate the object to get the capability 
    // for "My Files"
    capabilities.forEach(function (v, i, a) {
        if (v.capability === 'MyFiles') {
            filesCapability = v;
        }
    });
}).bind(this), function (error) {
    // error
});

现在你拥有了 MyFiles 的功能对象,你可以创建一个 SharePoint 客户端然后调用文件 API 以使用用户文件工作,如存储在 OneDrive for Business 上的文件。

创建 SharePoint 客户端对象

要创建 SharePoint 客户端对象,我们需要存储在资源的功能对象和访问令牌中的终点 URI 信息。

var sharePoint = new 
    Microsoft.CoreServices.SharePointClient (
    filesCapability.endpointUri,
    authContext.getAccessTokenFn(
        filesCapability.resourceId)
);

获取文件和文件夹

现在,我们可以通过如下方法调用 getFileSystemItems()来枚举文件:

sharePoint.files.getFileSystemItems().fetch().then(
    function (value) {
    value.currentPage.forEach(function (o) {
        // o._type will indicate whether this is a
        // file or folder.
        // o._Id provides the full path.
        // o._name provides the name of the file.
    });
}, function (reason) {
    console.log(reason);
});

在演示应用程序中,应用程序获取每个文件的信息并将信息存储在本地 JSON 对象中。 应用使用 AngularJS 将 JSON 对象绑定到 UI。

试一试!

完整的应用程序可用于 Github。 请下载并试用示例,并让我们知道你的反馈。 我们希望听到你关于新 API 的意见!