【发布时间】:2020-10-16 05:43:55
【问题描述】:
在我的项目中,我使用了 Google Drive API。我得到了用户文件的列表,并且可以将它们保存到设备内存中。 我也希望能够直接从 Google Drive 播放音频文件,但我就是做不到。 AVPlayer 不想使用我传输给他的 URL 链接播放音频文件。但是,如果我将此链接粘贴到任何浏览器中,则会播放该曲目。 有没有人遇到过这个问题并且知道如何解决这个问题?如果有任何帮助,我将不胜感激。 我的代码看起来像这样(它是一个简化版本):
import AVKit
class MyVC: UIViewController {
...
var player: AVPlayer!
...
private func playTrack() {
let url = URL(string: "https://drive.google.com/uc?export=open&id=XXXXX" //where XXXXX is an item id
let playerItem: AVPlayerItem = AVPlayerItem(url: url!)
player = AVPlayer(playerItem: playerItem)
player!.play()
}
}
例如,我传输到 AVPlayer 的 URL 链接如下所示:
https://drive.google.com/uc?export=open&id=1JzuAhQ-7R01wLhtD8zEN_sC5nvFlt7wU
但如果我将它粘贴到浏览器中,它会自动更改并如下所示:
https://doc-0g-1s-docs.googleusercontent.com/docs/securesc/anu2dlv0j1ugsoh1pb6b8qpkkt7k1j6k/hp3dnmru336i1cpkk4f5p4bstc83b30f/1602827400000/02426681720429398713/02426681720429398713/1JzuAhQ-7R01wLhtD8zEN_sC5nvFlt7wU?e=open&authuser=0&nonce=4dd9dhoo6he8g&user=02426681720429398713&hash=o87f0k3t4iv19ugae899urmcjd14ogiq
也许这很重要。
【问题讨论】:
-
所以提供的 URL 需要任何 google session 的身份验证或没有身份验证,它会工作吗?
-
当然是认证成功了,不然我就拿不到文件id了。我写的是例子中的代码被简化了。
-
是的,您在身份验证后获得该 ID,但要访问特定 URL,您需要在其中传递您的令牌,否则您无法直接访问,这就是我在您的案例中看到的问题。
-
但是为什么即使我没有登录谷歌它也能在浏览器中运行?
-
例如,检查您的第二个 URL 是否正常工作,因为您的浏览器中有一个活动会话,因此它将获取用户会话详细信息并将其附加到您的项目 URL 中。
标签: ios swift google-drive-api avplayer