2016-05-13 6 views
1

私は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の初期化中に一歩足りなかったのですか、チャンネルを作成する別のステップがありますか?それとも全く別のものなのでしょうか?

+0

あなたは 'targetId'でログインしたことがありますか? –

+0

私はこの質問をしました。はい、私はtargetIdでログインしていました。しかし、どちらのユーザーもトークンでログインしていませんでした。私はトークンを使ってユーザーにログインしようと決めましたが、非アクセストークンユーザーポリシーを読み取りと書き込みに設定してから、ユーザーはメッセージを送受信できました。 – ConfusedByCode

答えて

関連する問題