Использование метода sendTextMessage GCKMediaControlChannel приводит к ошибке

С google cast iOS SDK метод sendTextMessage GCKMediaControlChannel прост и его трудно использовать неправильно, поэтому я предполагаю, что это может быть ошибка в SDK ... надеюсь, кто-то докажет, что я ошибаюсь, чтобы я мог вернуться к работе!

Вот код:

NSDictionary *messageDict = @{
                            @"message": @"blah",
                            @"num":[NSNumber numberWithInt:2]
                            };
  NSError *error;
  NSData *msgData = [NSJSONSerialization dataWithJSONObject:messageDict
                                                      options:0
                                                        error:&error];
  NSString *message = @"" ;
  if (!msgData) {
    DDLogError(@"ERROR serializing message: %@", error);
    return NO ;
  } else {
    message = [[NSString alloc] initWithData:msgData encoding:NSUTF8StringEncoding];
    [self sendTextMessage:message] ;
  }

... получатель выдает эту ошибку, когда сообщение получено [cast.receiver.mediaManager] Ignoring request, requestId is not an integer: undefined

На первый взгляд кажется, что GCKMediaControlChannel напрямую наследует свой метод sendTextMessage от GCKCastChannel, не имея возможности реализовать некоторые аспекты обмена сообщениями, специфичные для медиа-канала (в частности, не удается заключить сообщение в конверт медиа-стиля с атрибутами requestId и mediaSessionID).

Кто-нибудь еще сталкивался с этим? Я что-то упускаю? Есть ли обходной путь?


person Hugo    schedule 22.02.2014    source источник


Ответы (1)


Я выполнил рекомендацию по билет, который я создал, обмен сообщениями с мультимедийным приложением-получателем с использованием настраиваемого пространства имен с использованием GCKCastChannel вместо выделенного GCKMediaControlChannel для решения проблемы. Ответ на билет подтверждает, что "не используйте sendTextMessage напрямую с GCKMediaControlChannel"

person Hugo    schedule 22.02.2014
comment
Я понятия не имею, как вы интерпретировали ответ в тикете, поскольку GCKMediaControlChannel содержит ошибку, вы неправильно использовали канал управления мультимедиа, поэтому ошибка на самом деле находится в вашем коде, а не в SDK. - person Ali Naddaf; 23.02.2014
comment
@AliNaddaf Мой код следовал за API как документированный. Если SDK работает не так, как описано в документации, значит, SDK содержит ошибки или документ. Не пытаюсь начать дискуссию о том, что правильно или неправильно, я достаточно счастлив, если помог следующему разработчику застрять из-за того, что откровенно следовал документу API. - person Hugo; 23.02.2014
comment
Канал управления мультимедиа является подклассом и определяет конкретное пространство имен. Каждое пространство имен определяет спецификацию сообщений, которые оно может обрабатывать; Канал управления медиа имеет свою спецификацию и сообщения, которые он обрабатывает. Если вы напишете подкласс TicTacToe Channel, вы должны определить новое пространство имен и спецификацию для сообщений, которые он может обрабатывать; нельзя ожидать одинаковой интерпретации текстовых сообщений разными каналами. В документации говорится, что он отправляет текстовое сообщение, но оставляет открытым, что это может быть текстовое сообщение или как оно будет обрабатываться / интерпретироваться, поскольку это зависит от подклассов. - person Ali Naddaf; 23.02.2014
comment
Я понимаю, как это работает ... но можем ли мы согласиться с тем, что тот факт, что sendTextMessage непригоден для использования с выделенным медиа-каналом и ни слова об этом в документе, в лучшем случае сбивает с толку? В любом случае я перефразировал свой ответ - person Hugo; 23.02.2014
comment
Когда вы определяете новое пространство имен и новый канал, вы определяете протокол. Отправитель - это только половина дела, другая половина - получатель: отправитель собирает сообщение и отправляет его получателю, и на основе согласованного протокола получатель интерпретирует сообщение. Таким образом, отправитель действительно отправляет текстовое сообщение, но получатель проигнорирует или пожалуется, если не соответствует согласованному протоколу. (см. остальное в следующем комментарии из-за ограничения размера комментария) - person Ali Naddaf; 23.02.2014
comment
Вот что здесь происходит; текстовое сообщение, которое вы отправляли, действительно доходит до получателя, но получатель Media Channel не принимает, поскольку ваше сообщение не соответствует ожидаемой спецификации. Если бы вы отправили сообщение, которое придерживалось протокола Media Channel, получатель принял бы его. Вот почему я сказал, что sendTextMessage () действительно отправляет сообщение, и документация верна. Кроме того, спасибо за обновление вашего ответа, выглядит неплохо. - person Ali Naddaf; 23.02.2014