2016-05-13 6 views
1

Ich versuche, das SendBird SDK zu verwenden, um eine einfache Instant Messaging-Funktion in meiner iOS-App zu implementieren.Was sind die möglichen Ursachen für den Fehler 14000, "Fehler beim Starten der Nachrichtenübermittlung" im SendBird iOS SDK?

Ich habe die Schnellstart-, Authentifizierungs- und Messaging-Kanal - Grundlagen gelesen, und ich habe versucht, einen 1-1 Messaging-Kanal einzurichten, wie sie beschreiben.

In application:didFinishLaunchingWithOptions habe ich SendBird.initAppId("MyAppID") enthalten.

In meiner ersten Ansicht Controller, logge ich mich in den Benutzer. Ich verwende den Benutzername des Benutzers von meiner App als seine userId, und ich verketten seinen Vor- und Nachnamen als seine SendBird Spitznamen zu verwenden:

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) 
    } 
} 

schließlich in dem aktuellen Chat-View-Controller, ich versuche, einen Messaging-Kanal mit einem anderen Benutzer starten:

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 

    } 
} 

mit Ausnahme der Linien I kommentierte dieser Code direkt von den SendBird manuellen kommt. Wenn es jedoch ausgeführt wird, erhalte ich den Fehlercode 14000, und die Meldung "Messaging kann nicht gestartet werden" wird protokolliert.

Was ist die eigentliche Ursache des Fehlers? Fehle ich bei der Benutzeranmeldung oder der SDK-Initialisierung einen Schritt oder gibt es einen weiteren Schritt bei der Erstellung eines Kanals? Oder ist es etwas ganz anderes?

+0

Haben Sie sich jemals mit der 'targetId' angemeldet? –

+0

Als ich diese Frage gestellt habe, hatte ich mich mit der targetId angemeldet. Allerdings hatte ich keinen Benutzer mit einem Token angemeldet. Ich entschied mich, die Benutzer mit Token anzumelden, obwohl ich die Non-Access Token-Benutzerrichtlinie auf Read & Write gesetzt hatte und die Benutzer dann Nachrichten senden und empfangen konnten. – ConfusedByCode

Antwort

Verwandte Themen