В моем приложении Swift я создаю PubNub на viewDidLoad с правильной конфигурацией , а затем присоединяюсь к каналу. Тем не менее, похоже, что он вообще не присоединяется к каналу, если я не запускаю действие кнопки отправки на . Отправить сообщение (я выбрал код конфигурации/соединения канала в кнопке «Отправить» , чтобы посмотреть, будет ли это работать) , Код в функции кнопки отправки - , идентичный коду в viewDidLoad, но код в viewDidLoad равен , который по-прежнему игнорируется. Это расстраивает, потому что текущий пользователь моего приложения не отправит сообщения, отправленные на канал, если пользователь сначала не отправит сообщение.Не удается получить сообщение PubNub, если я не опубликую первое сообщение
Вот код в контроллере представления (я удалил много кода, так что легче смотреть на Если вы думаете, что проблема лежит в другом месте я могу разместить больше.):
class MessageViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate, PNObjectEventListener{
var pubNub: PubNub!
var pnConfiguration: PNConfiguration!
var ids: String = ""
@IBAction func sendButton(sender: UIButton) {
//create Pubnub channel
pnConfiguration = PNConfiguration(publishKey: "key", subscribeKey: "key")
pnConfiguration.uuid = currentUser.objectId!
print(pnConfiguration.uuid)
pubNub = PubNub.clientWithConfiguration(pnConfiguration)
let channelName = ids as String
let channelArray: [String] = [channelName]
pubNub.subscribeToChannels(channelArray, withPresence: true)
pubNub.publish(self.messageText.text!, toChannel: channelName, compressed: false, withCompletion: nil)
pubNub.addListener(self)
self.messageText.enabled = true
self.view.userInteractionEnabled = true
dispatch_async(dispatch_get_main_queue()) {
self.messageText.text = ""
self.messageTableView.reloadData()
}
}
override func viewDidLoad() {
super.viewDidLoad()
//Query that sets self.ids = user1.objectId! + user2.objectId!
//set Pubnub config
pnConfiguration = PNConfiguration(publishKey: "key", subscribeKey: "key")
pubNub = PubNub.clientWithConfiguration(pnConfiguration)
pnConfiguration.uuid = currentUser.objectId!
//create channel
let channelName = ids as String
print(channelName)
let channelArray: [String] = [channelName]
pubNub.subscribeToChannels(channelArray, withPresence: true)
pubNub.addListener(self)
dispatch_async(dispatch_get_main_queue()) {
self.messageTableView.reloadData()
}
}
EDIT:
После просмотра журналов это похоже на то, почему он не работает, потому что он присоединяется к каналу под названием «», хотя print(channelName)
возвращает имя реального канала. Почему он не берет название канала? Разве это не правильный тип данных?
Спасибо за помощь! Это привело меня к правильному пути. По какой-то причине клиент Pubnub инициализировался до того, как мои идентификаторы были установлены в запросе Parse. Я переместил код init в отдельную функцию и теперь вызываю функцию сразу после создания идентификаторов. Эта часть работает сейчас. По какой-то причине мое сообщение UUID неправильно настроено. Он игнорирует мой код 'pnConfiguration.uuid'. Он печатает правильный UUID, но когда я действительно отправляю сообщение, message.uuid в функции клиента возвращает совсем другое значение – winston
Есть ли другой метод, который я должен использовать для установки сообщения uuid? Кроме кода 'pnConfiguration.uuid'? – winston
@james, что _uuid_ предназначен для отладки и предоставляет информацию о самом клиенте-клиенте. Если вам необходимо, чтобы удаленные приемники сообщений знали о UUID пользователя, вам необходимо отправить его как часть полезной нагрузки сообщения. –