2016-04-14 1 views
0

Когда didReceiveStatus вызывается после подписки на канал, мы не можем получить канал (каналы), который был только что подписан.Получить связанный канал (ы) в didReceiveStatus в PubNub для цели iOS C

PNSubscribeStatus.data.subscribedChannel или PNSubscribeStatus.data.actualChannel всегда являются нулевыми, а PNSubscribeStatus.subscribedChannels предоставляет все подписанные в настоящее время каналы, а не те, которые вызвали обратный вызов didReceiveStatus.

Что мы делаем неправильно здесь?

ответ

0

В SDK 4.0, didReceiveStatus возвращается PNStatus, который, согласно документации по классу, не содержит этой дополнительной информации, если нет ошибки. Для нашего приложения мы используем этот обработчик для контроля состояния соединения с сервером PubNub.

+0

Нам необходимо отправить определенное сообщение на канал после подписки. Цель состоит в том, чтобы отправить его из обратного вызова, поэтому мы уверены, что мы правильно подписаны на получение соответствующих ответов от других устройств. – ebelrose

+0

Я уверен, что вы это рассмотрели, но вы, вероятно, могли бы просто инициировать это из обработчика завершения подписки вызов. –

+0

Есть ли какой-либо обработчик завершения с подпиской? Не вижу этого в документации. - subscribeToChannels: withPresence: - subscribeToChannels: withPresence: clientState: – ebelrose

0

PubNub Сообщение получено название канала в прошивкой

Вы должны быть в состоянии получить канал, который вы получили сообщение о но получить это зависит от того, как вы подписались на канал или к группе каналов, которая содержит канал , Это пример кода из PubNub Objective-C for iOS SDK subscribe API Reference:

- (void)client:(PubNub *)client didReceiveMessage:(PNMessageResult *)message { 

    // Handle new message stored in message.data.message 
    if (message.data.actualChannel) { 

     // Message has been received on channel group stored in 
     // message.data.subscribedChannel 
    } 
    else { 

     // Message has been received on channel stored in 
     // message.data.subscribedChannel 
    } 
    NSLog(@"Received message: %@ on channel %@ at %@", message.data.message, 
      message.data.subscribedChannel, message.data.timetoken); 
} 

Если вам нужны другие каналы, которые клиент подписался, вы можете позвонить в where-now API.

Если вам нужно быть более динамичным относительно того, что должно быть в канале -, просто укажите это имя канала в сообщении, когда оно опубликовано, при условии, что издатель имеет предварительное знание о том, какой канал это. Или вы можете сделать как раз вовремя найти на своем сервере, на какой канал ответить.

+0

Hi Craig, Это не отвечает на наш вопрос. Мы не просили получить канал при получении сообщения, мы просим извлечь канал из ** обратного вызова ** ** aKeReceiveStatus – ebelrose

0

Вот PubNub поддержки ответ на это:

На самом деле status.data.subscribedChannel и status.data.actualChannel посвященное наличие событий и прием сообщений обратных вызовов, где информация об источниках события важна.

In -client: didReceiveStatus: клиент не предоставляет информацию о конкретном канале, на котором подписан клиент. Если клиент будет , начните отслеживать эту информацию, нет гарантии, что это будет вернуть ожидаемое значение (поскольку разработчик ожидает, что некоторые каналы будут там). В предыдущей версии (3.x) вся эта информация была отслежена, но , потому что она может быть изменена в любой момент - результат иногда был непредсказуемым.

Подписка может быть сделано в последовательности методов (один за другим), как: подписаться А1, подписаться C1, подписаться B1 и B2, C1 и отменить подписку B1 - это как результат будет в конечном итоге с одним вызовом -client : didReceiveStatus: с результирующим набором каналов.

Всегда лучше проверять, находятся ли ваши каналы в s_tatus.subscribedChannels_.

Мои комментарии: Точка иметь асинхронный процесс точно не думаю, что это как последовательность методов ... Мы не можем иметь гарантию, что подписки делается в том же порядке, как запрос подписки исключением случаев, когда мы блокируем другой запрос на подписку до тех пор, пока не будет выполнен предыдущий.

 Смежные вопросы

  • Нет связанных вопросов^_^