【问题标题】:Embed private Vimeo videos in both a web app AND mobile apps -- Ionic/Angular在网络应用程序和移动应用程序中嵌入私人 Vimeo 视频——Ionic/Angular
【发布时间】:2019-04-02 16:05:06
【问题描述】:

我的情况是,我们既是包含私人视频的 Vimeo 专业帐户的所有者,又是我们嵌入这些视频的 Ionic/Angular 应用程序的开发人员。

由于我们不希望任何人都能够在任何地方嵌入这些视频...部署到我们的网络应用程序时,我只需在我们的 Vimeo 帐户中选择“仅在特定域中嵌入这些视频”选项,然后提供我们的网络应用程序的域。这工作得很好。

在部署到 iOS/Android 时,我没有要添加到“白名单”的特定域,因此我们在嵌入这些视频的应用程序中收到一条错误消息,内容是“抱歉,由于其隐私设置,此视频无法在此处显示。”

我的问题是在阅读了 Vimeo 文档并在网上进行了全面搜索之后,我似乎找不到任何这种特殊情况的示例。

我似乎不需要整个 OAuth,因为我并不真正要求我的用户使用他们自己的 Vimeo 帐户或允许我们访问他们帐户上的任何内容。

我只是想让我们的视频在 Vimeo 上保持私密,但也能够以某种方式将它们嵌入到我们的网络和移动应用程序中。

在这里采取什么合适的路径?我愿意接受任何和所有建议。就目前而言,我暂时将我们的视频设置回“嵌入任何地方”,以便它适用于我们现有的用户,但我真的希望能够将其设置回仅特定域,然后找出移动端为好吧。

感谢您的帮助或指导!

编辑:我应该说到目前为止我最接近的是这个页面上的这个小 sn-p:https://developer.vimeo.com/api/authentication 它说...

"注意:如果您想在自己的网站上嵌入自己的视频(并且只使用 Vimeo 进行转码和托管服务),您不需要使用 API 来验证您的应用程序。您需要做的就是生成从您的应用页面获取一个新令牌并将其包含在您的应用程序中。这是一种特殊情况,您既是最终用户又是应用程序所有者。由于您很特殊,您可以跳过本文档的其余部分。"

这似乎正是我想要的,但是没有关于如何做到这一点的进一步说明。

【问题讨论】:

  • 我应该提到我现在已经到了尝试通过对api.vimeo.com/videos/${our video id} 的 GET 请求来访问 Vimeo API 的地步,并在我们的授权令牌中包含授权标头.如果我将 Vimeo 中的“谁可以观看”设置更改为“任何人”,那么我会收到包含视频所有信息的回复。如果我将此设置保留为“对 Vimeo 隐藏”(我们希望保留的设置),那么我只会收到“找不到请求的视频”错误。

标签: angular ionic-framework vimeo vimeo-api


【解决方案1】:

如果您只需要在网站中嵌入视频,您可以在 Vimeo 上将您的视频设为私密,并通过转到 https://vimeo.com/settings/videos/upload_defaults 授权将视频嵌入您的网站,设置“您的视频可以嵌入到哪里? "选择“仅我选择的网站”,然后使用“添加域”按钮添加您网站的域。

这适用于网站,但不适用于应用程序(除非您的应用程序包含指向您网站上的页面的 webview 或 iframe,而不是实际嵌入您应用程序中的视频)。在这种情况下,一个可能的解决方案是使用视频设置中的分发选项 (https://vimeo.com/manage/{assetID}/distribution)。在页面底部附近,您会找到“视频文件链接”部分,该部分将为您提供下载或流式传输视频的链接。这些是指向实际视频的链接,因此无法像通常的嵌入代码链接一样进行控制,因此请注意使用它们的位置和时间。

如果您确实需要进行 API 调用,我自己也遇到了一些问题,因此只能提供有限的帮助。目前,我能够对 Vimeo 的 API 端点进行 API 调用(包括下面的 PHP 示例),提供我的访问令牌,并获得包含所请求信息的结果,但 仅当我使用的访问令牌是一个我不久前为旧应用生成的。 我生成的任何新访问令牌(无论是在我帐户中的新应用还是旧应用中,似乎都无关紧要)将不起作用。使用 Vimeo 网站上概述的 OAuth 2.0 流程检索的任何访问令牌也是如此。非常令人沮丧...

似乎 Vimeo 建议的所有 OAuth 2.0 API 工作流程都是为了授予开发人员对最终用户视频的访问权限,而不是授予最终用户对开发人员视频的访问权限。

    $albumsVideosURL = "https://api.vimeo.com/users/$userID/albums/$albumID/videos?&per_page=2";

    $headers = array( 
        "Content-type: application/json", 
        "Accept: application/vnd.vimeo.*+json;version=3.4", 
        "Authorization: Bearer " . $access_token,
        "scope: public private video_files",
    );

    $ch = curl_init($albumsVideosURL);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);  
    $data = curl_exec($ch);
    curl_close($ch);

编辑:

我终于让它工作了!并且无需安装 Vimeo 的 PHP SDK 库!

归结为身份验证类型!我一直在尝试BasicOauth,但它需要设置为Bearer!我已经编辑了上面示例中的 PHP 代码以反映我目前的理解,我将在下面包含一个 JavaScript 示例。看起来您也不需要在标题中包含内容类型、接受或范围。您真正需要的只是身份验证,并且身份验证必须设置为 Bearer。

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        var output = this.responseText;
        console.log(output);
    }
};
xmlhttp.open("GET", endpoint, true);
xmlhttp.setRequestHeader("Authorization", "Bearer " + access_token);
xmlhttp.send();

我真希望 Vimeo 支持技术刚刚打开它,而不是反复告诉我设置标题集而不告诉我要使用什么类型......哦,好吧,最后到达那里。

【讨论】:

  • 我实际上把它发给了我们的一位后端人员(我们也使用 PHP)。我的主要问题最终是设置 Vimeo Pro 帐户的人也在开发控制台中设置了我们的应用程序,但他设置错误。无论如何,我们完全搞定了,就在今天早上,我将所有视频切换回“仅嵌入特定域”,你瞧,它似乎有效。我相信经过令牌验证的链接也会在几个小时后过期,因此这非常适合我们的案例。感谢您与我一起努力!
猜你喜欢
  • 1970-01-01
  • 2018-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 1970-01-01
相关资源
最近更新 更多