【发布时间】:2019-03-27 04:06:06
【问题描述】:
我正在尝试构建一个应用程序,用户可以在其中播放谷歌驱动器存储的本地内容并进行投射。
根据谷歌驱动器文档Google Drive Developers Docs,我必须发出这样的http请求:
GET https://www.googleapis.com/drive/v3/files/0B9jNhSvVjoIVM3dKcGRKRmVIOVU?alt=media
Authorization: Bearer <ACCESS_TOKEN>
要在本地播放它,我使用的是exoplayer,它工作得非常顺利,我的问题是当我尝试投射内容时。
我想我已经阅读了来自 google cast 开发者网站 Google Cast Developers Docs 的所有关于发送者和接收者应用程序的文档,但我无法投射内容。
当我调试时接收器应用程序正在获取403 error,因为它需要身份验证。 403 Error on browser.
这个错误是因为我无法设置 HTTP 标头“Authorization: Bearer ACCESS_TOKEN”,因为据我所知没有设置 HTTP 标头的选项。 p>
我什至向 google Here 开了一个问题单,我在其中请求将该功能包含在通用接收器应用程序中,这样我们就不必仅为该功能托管接收器应用程序。他们回答了这个
"您将需要编写一个接收器并在playbackConfig.manifestRequestHandler 中提供一个处理程序来添加标头。 您将需要使用加载请求的 customData 字段来传递您的令牌或任何其他数据。"
所以,我尝试按照他们告诉我的操作,现在发送方应用程序将授权令牌发送到接收方应用程序,但我无法将令牌设置为请求标头。
这是接收方应用程序的当前代码。
const context = cast.framework.CastReceiverContext.getInstance();
const castOptions = new cast.framework.CastReceiverOptions();
const playerManager = context.getPlayerManager();
let playbackConfig = (Object.assign(new cast.framework.PlaybackConfig(), playerManager.getPlaybackConfig()));
playerManager.setMessageInterceptor(
cast.framework.messages.MessageType.LOAD,
request => {
console.log("token: ", request.media.customData.token);
playbackConfig.manifestRequestHandler = requestInfo => {
requestInfo.withCredentials = true;
requestInfo.headers = {};
requestInfo.headers['Authorization'] = request.media.customData.token;
};
return request;
});
castOptions.playbackConfig = playbackConfig;
context.start(castOptions);
如果有人可以帮助我或指导我,那就太好了。谢谢
【问题讨论】:
标签: javascript android google-drive-api chromecast google-cast