2016-05-13 1 views
1

J'essaie d'utiliser le SDK SendBird pour implémenter une fonction de messagerie instantanée simple dans mon application iOS.Quelles sont les causes possibles de l'erreur 14000, "Impossible de démarrer la messagerie" dans le SDK SendBird iOS?

J'ai lu les guides de démarrage rapide, d'authentification et de messagerie - Basic, et j'ai tenté de configurer un canal de messagerie 1-1 comme ils le décrivent.

En application:didFinishLaunchingWithOptions J'ai inclus SendBird.initAppId("MyAppID").

Dans mon contrôleur de vue initial, je me connecte à l'utilisateur. J'utilise le nom d'utilisateur de l'utilisateur de mon application comme son userId, et je concaténer son prénom et le nom à utiliser comme son surnom 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) 
    } 
} 

Enfin, dans le contrôleur de vue de chat réel, je tente de lancer un canal de messagerie avec un autre utilisateur:

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 

    } 
} 

à l'exception des lignes I a commenté, ce code vient directement du manuel SendBird. Toutefois, lorsqu'il s'exécute, je reçois le code d'erreur 14000 et le message «Échec de démarrage de la messagerie» est consigné.

Quelle est la cause réelle de l'erreur? Ai-je manqué une étape lors de la connexion de l'utilisateur ou de l'initialisation du SDK, ou y a-t-il une autre étape dans la création d'un canal? Ou est-ce autre chose entièrement?

+0

Avez-vous déjà ouvert une session avec 'targetId'? –

+0

Lorsque j'ai posé cette question, oui, je me suis connecté avec le targetId. Cependant, je n'avais pas connecté un utilisateur avec un jeton. J'ai décidé d'essayer de se connecter aux utilisateurs avec des jetons, bien que la stratégie d'utilisateur de jeton non-Access soit définie sur Lecture et écriture, et que les utilisateurs puissent ensuite envoyer et recevoir des messages. – ConfusedByCode

Répondre