私はSendBird SDKを使用して、iOSアプリで簡単なインスタントメッセージ機能を実装しようとしています。SendBird iOS SDKのエラー14000「メッセージングの開始に失敗しました」の原因は何ですか?
私は、クイックスタート、認証、およびメッセージングチャネル - 基本ガイドを読んでいます。記述するとおり、1-1メッセージングチャネルを設定しようとしました。
application:didFinishLaunchingWithOptions
には、SendBird.initAppId("MyAppID")
が含まれています。
私の最初のビューコントローラーでは、ユーザーにログインします。私は彼のuserIdとしての私のアプリからユーザーのユーザー名を使用している、と私は彼のSendBirdニックネームとして使用するために彼の最初と最後の名前を連結しています:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
if let emailAddress = KCSUser.activeUser().email,
firstName = KCSUser.activeUser().givenName,
lastName = KCSUser.activeUser().surname {
let nickname = firstName.lowercaseString + lastName.lowercaseString
SendBird.loginWithUserId(emailAddress, andUserName: nickname)
}
}
最後に、実際のチャットビューコントローラでは、私がしようとし他のユーザーとのメッセージング・チャネルを開始します。
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
guard let targetId = session?.parent?.user?.email else {
return
}
// I logged in once with this id, so according to the SendBird docs, the
// user should exist.
SendBird.startMessagingWithUserId(targetId)
SendBird.setEventHandlerConnectBlock({ (channel) in
NSLog("%@", channel)
}, errorBlock: { (errorCode) in
NSLog("%D", errorCode)
}, channelLeftBlock: { (channel) in
}, messageReceivedBlock: { (message) in
}, systemMessageReceivedBlock: { (systemMessage) in
}, broadcastMessageReceivedBlock: { (broadcastMessage) in
}, fileReceivedBlock: { (fileLink) in
}, messagingStartedBlock: { (messagingChannel) in
SendBird.joinChannel(messagingChannel.getUrl())
// SendBirdChannelInfo is a custom struct for some use within the app
let channelInfo = SendBirdChannelInfo(
channelId: messagingChannel.getId(),
url: messagingChannel.getUrl()
)
// self.session is a custom data model for use with our database.
self.session?.sendBirdChannelInfo = channelInfo
SendBird.queryMessageListInChannel(messagingChannel.getUrl()).prevWithMessageTs(
Int64.max, andLimit: 30, resultBlock: { (queryResult) in
var maxMessageTs = Int64.min
for model in queryResult {
if maxMessageTs <= (model as! SendBirdMessageModel).getMessageTimestamp() {
maxMessageTs = (model as! SendBirdMessageModel).getMessageTimestamp()
}
}
SendBird.connectWithMessageTs(maxMessageTs)
}, endBlock: { (error) in
if let fetchMessagesError = error {
NSLog(fetchMessagesError.localizedDescription)
}
})
}, messagingUpdatedBlock: { (messagingChannel) in
}, messagingEndedBlock: { (messagingChannel) in
}, allMessagingEndedBlock: {
}, messagingHiddenBlock: { (messagingChannel) in
}, allMessagingHiddenBlock: {
}, readReceivedBlock: { (readStatus) in
}, typeStartReceivedBlock: { (typeStatus) in
}, typeEndReceivedBlock: { (typeStatus) in
}, allDataReceivedBlock: { (unsignedInt, thirtyTwoBitInt) in
}, messageDeliveryBlock: { (sent, message, data, messageId) in
}, mutedMessagesReceivedBlock: { (message) in
}) { (fileLink) in
}
}
私はコメント行を除いて、このコードはSendBirdマニュアルから直接来ます。ただし、実行時にエラーコード14000が表示され、「メッセージングを開始できません」というメッセージが記録されます。
実際のエラーの原因を教えてください。ユーザーのログインやSDKの初期化中に一歩足りなかったのですか、チャンネルを作成する別のステップがありますか?それとも全く別のものなのでしょうか?
あなたは 'targetId'でログインしたことがありますか? –
私はこの質問をしました。はい、私はtargetIdでログインしていました。しかし、どちらのユーザーもトークンでログインしていませんでした。私はトークンを使ってユーザーにログインしようと決めましたが、非アクセストークンユーザーポリシーを読み取りと書き込みに設定してから、ユーザーはメッセージを送受信できました。 – ConfusedByCode