Swiftアプリケーションでは、 の設定でviewDidLoadでPubNubをインスタンス化し、チャンネルに参加します。しかし、私が に送信ボタンアクションを発射しない限り、 がチャンネルに全く参加していないように見えます(設定/チャンネルコードを送信ボタン で投げただけです) 。送信ボタン関数のコードは、 で、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)
なぜそれはチャネル名を取っていないのですか?正しいデータ型ではありませんか?あなたのコードで
ありがとう!これは正しい軌道に乗った。何らかの理由で、私のIDがParseクエリで設定される前に、Pubnubクライアントが初期化されていました。私はinitコードを別の関数に移動し、idが作成された直後に関数を呼び出すようになりました。その部分は今働きます。しかし何らかの理由で、私のメッセージUUIDが正しく設定されていません。私の 'pnConfiguration.uuid'コードは無視されています。それは正しいUUIDを表示しますが、実際にメッセージを送信すると、クライアント関数のmessage.uuidは非常に異なる値を返します – winston
メッセージを設定するために使用する別の方法がありますか? 'pnConfiguration.uuid'以外のコード? – winston
@james _uuid_はデバッグ目的であり、受信側クライアント自体に関する情報を提供します。リモートメッセージ受信者にユーザーUUIDを認識させる必要がある場合は、メッセージペイロードの一部として送信する必要があります。 –