Получите URL внешнего плеера из Vimeo api для tvOS

Я хочу использовать vimeo для размещения видео для приложения AppleTV. Я понимаю, что мне понадобится профессиональная учетная запись, чтобы делать именно то, что я хочу, но на данный момент я просто пытаюсь сделать POC. Мне нужно получить URL-адрес моего частного видео, срок действия которого истекает через 1 час, и я хочу, чтобы приложение было аутентифицировано с моими учетными данными, без необходимости входа пользователя в систему (как если бы у него было приложение, тогда они можно просматривать видео).

Код, который я использую, приведен ниже, установлены следующие константы:

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": "Вы должны предоставить действительный аутентифицированный токен доступа."}, Поэтому кажется, что я прошел аутентификацию в порядке. Я также пробовал некоторые другие конечные точки, но все они заканчиваются пустой строкой.

Я пробовал два разных подхода, оба с одинаковым результатом ... т.е. ни одного или пустую строку.

Я разместил вопрос на форумах 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 / смотрели / видео) 2016-01-09 08: 13: 26.461 tvOSShortGame [68357: 91090448] сервер успешно 0,370109 сек (/ me / смотрели / видео)

..и если я изменю конечную точку на / 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.

Любая помощь приветствуется.


person guytz72    schedule 12.01.2016    source источник
comment
Какие области действия вы выбрали при создании токена?   -  person Ryan Hefner    schedule 26.01.2016
comment
Привет, Райан, у меня были публичные и частные прицелы. Теперь он работает с этим токеном, но не через классы Vimeo. Нашел очень полезный инструмент Postman, который позволяет проверять конечные точки и возвращает JSON, а затем предоставляет фрагмент кода на нескольких языках.   -  person guytz72    schedule 27.01.2016
comment
Рассмотрите возможность использования официального SDK Vimeo для iOS: github.com/vimeo/VIMNetworking   -  person Alfie Hanssen    schedule 30.03.2016


Ответы (1)


Наконец, я получил эту работу с помощью Postman, который я видел на одном из форумов Vimeo. Он создает правильный код на нескольких языках и показывает полученный 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()
person guytz72    schedule 27.01.2016
comment
Я удалил ваши токены авторизации из текста вашего вопроса, вероятно, не рекомендуется публиковать их здесь. - person Alfie Hanssen; 30.03.2016