【问题标题】:Get external player URL from Vimeo api for tvOS从 Vimeo api for tvOS 获取外部播放器 URL
【发布时间】:2016-01-12 21:52:19
【问题描述】:

我想使用 vimeo 为 AppleTV 应用托管视频。我意识到我需要一个专业帐户来做我想做的事,但目前只是想做一个 POC。 我需要实现的是检索在 1 小时后过期的我的私人视频的 url,我希望应用程序使用我的凭据进行身份验证,而不需要用户登录(好像拥有应用程序,然后他们可以观看视频)。

我正在使用的代码如下,设置的常量是:

kVimeoToken 是我在 vimeo 上为应用创建的访问令牌,我已将 vimeo api 导入到我的项目中。

-(NSString*) getVimeoUrls2 {


    VIMClient *client = [[VIMClient alloc] initWithDefaultBaseURL];
    AFJSONRequestSerializer *serializer= [AFJSONRequestSerializer serializer];


    NSString *token = kVimeoToken;
   //[serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [serializer setValue:@"application/vnd.vimeo.*+json; version=3.2" forHTTPHeaderField:@"Accept"];
    [serializer setValue:[NSString stringWithFormat:@"Bearer %@", token]   forHTTPHeaderField:@"Authorization"];
    client.requestSerializer = serializer;

    __block NSString *str= nil;


    [client requestURI:@"/me" completionBlock:^(VIMServerResponse *response, NSError *error)
    {

        id JSONObject = response.result;
        NSLog(@"JSONObject: %@", JSONObject);
        NSLog(@"Error: %@", [error localizedDescription]);
        str = [[NSString alloc] initWithData:JSONObject encoding:NSUTF8StringEncoding];

    }];

return str;
}

我得到的只是一个空字符串,知道我做错了什么吗? 如果我更改访问令牌使其不正确,那么我会返回一条错误消息 {"error":"You must provide a valid authenticated access token."},所以看来我通过了身份验证。我也尝试了其他一些端点,但它们都以空字符串结尾。

我尝试了两种不同的方法,结果都一样......即没有,或者是一个空字符串。

我在 vimeo 论坛上发布了这个问题,并得到了这两个链接:

developer.vimeo.com/api/authentication#single-user github.com/vimeo/VIMNetworking#lightweight-use

上述代码的日志输出如下:

2016-01-09 08:13:26.091 tvOSShortGame[68357:91090409] 服务器启动 (/me/watched/videos) 2016-01-09 08:13:26.461 tvOSShortGame[68357:91090448] 服务器成功 0.370109 秒(/me/watched/videos)

..如果我将端点更改为 /xxx(强制出错)

2016-01-09 08:07:28.826 tvOSShortGame[67829:91039056] 服务器启动 (/xxx) 2016-01-09 08:07:29.003 tvOSShortGame[67829:91039045] 服务器故障 0.177531 秒 (/xxx) 2016-01-09 08:07:29.003 tvOSShortGame[67829:91039460] JSONObject: (null) 2016-01-09 08:07:29.003 tvOSShortGame[67829:91039460] 错误:请求失败:未找到 (404)

其他端点得到相同的结果,报告成功但没有返回 JSON 对象。

任何帮助表示赞赏。

【问题讨论】:

  • 您在生成令牌时选择了哪些范围?
  • 嗨 Ryan,我有公共和私有范围。我现在可以使用该令牌,而不是通过 Vimeo 类。找到了一个非常有用的工具 Postman,它可以让您验证端点并返回 JSON,然后为您提供多种语言的代码 sn-p。
  • 考虑使用官方的 Vimeo iOS SDK:github.com/vimeo/VIMNetworking

标签: ios objective-c tvos vimeo-api vimeo-ios


【解决方案1】:

我终于通过使用我在一个 Vimeo 论坛上看到的 Postman 来完成这项工作。它以多种语言生成正确的代码,并显示生成的 JSON,以便您验证端点。

希望有人觉得它有用。

//Obj C version

NSDictionary *headers = @{ @"authorization": @"Bearer MY_VIMEO_TOKEN",
                           @"cache-control": @"no-cache",
                           @"postman-token": @"MY_POSTMAN_TOKEN" };

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://api.vimeo.com/videos/116999999"]
                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                   timeoutInterval:10.0];
[request setHTTPMethod:@"GET"];
[request setAllHTTPHeaderFields:headers];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
                                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                                if (error) {
                                                    NSLog(@"%@", error);
                                                } else {
                                                    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
                                                    NSLog(@"%@", httpResponse);
                                                }
                                            }];
[dataTask resume];


//Swift version

    let headers = [
        "authorization": "Bearer MY_VIMEO_TOKEN",
        "cache-control": "no-cache",
    ]

    var request = NSMutableURLRequest(URL: NSURL(string: "https://api.vimeo.com/videos/116999999")!,
        cachePolicy: .UseProtocolCachePolicy,
        timeoutInterval: 10.0)
    request.HTTPMethod = "GET"
    request.allHTTPHeaderFields = headers
    var str = ""
    let session = NSURLSession.sharedSession()
    let dataTask = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in
        if (error != nil) {
            print(error)
        } else {
            let httpResponse = response as? NSHTTPURLResponse
            str = self.parseJSON(data!)

        }
    })

    dataTask.resume()

【讨论】:

  • 我从您的问题正文中删除了您的身份验证令牌,在此处发布这些可能不是一个好主意。
猜你喜欢
  • 2015-12-12
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
  • 1970-01-01
  • 1970-01-01
  • 2019-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多