Получить ответ от сокета в Swift - PullRequest
4 голосов
/ 13 апреля 2020

Я пытаюсь интегрировать Socket в свое приложение для чата в реальном времени. Бэкенд сделан на node.js, а фронтенд разработан на React, и оба работают нормально.

У меня проблема с добавлением сокета в моем проекте Swift.

В моей функции aaHandlers(), приведенной ниже, я ожидаю получить ответ JSON с подробным описанием 4 пользователей. Он отлично работает в веб-приложении, но не в Swift. Я правильно делаю?

Вот код

import Foundation
import SocketIO


let manager = SocketManager(socketURL: URL(string: "https://chatsapi.dummyUrl.io")!, config: [.log(true), .compress])
 let socket = manager.defaultSocket
 let socketConnectionStatus = socket.status

class SocketIOManager: NSObject {

    static let sharedInstance = SocketIOManager()

    override init() {
        super.init()

    }

    func addHandlers() {
        socket.on("get_all_user_list") { (data, ack) in
            print("KK get_all_user_list", data,ack) // this line never gets called. I tried putting breakpoints.
        }
    }


    func establishConnection() {
        socket.connect()
    }


    func closeConnection() {
        socket.disconnect()
    }

}

PS: Сокет подключен.

Вот что я получаю в консоли:

> 2020-04-13 18:14:05.790193+0530 SocketTry[41289:9400138] LOG
> SocketIOClient{/}: Adding handler for event: get_all_user_list

Ответы [ 2 ]

3 голосов
/ 21 апреля 2020

Пожалуйста, проверьте, используете ли вы какую-либо аутентификацию в сокете или нет. Если вы используете аутентификацию, вам нужно установить конфигурацию в вашем быстром коде. Здесь AUTHTOKEN, который является токеном пользователя, который вы получили от вашего логина ответа от вашего сервера. AUTH_USER_ID, который вы получили из вашего логина ответа от вашего сервера.


class SocketIOManager: NSObject {

    static let sharedInstance = SocketIOManager()

    override init() {
        super.init()
        initialize()
    }

    func initialize() {

        let socketUrl = "https://chatsapi.dummyUrl.io"

        let specs: SocketIOClientConfiguration = [
            .log(true),
            .connectParams(getConnectionParam())]
        socketManager = SocketManager(socketURL: URL(string: socketUrl)!, config: specs)
        socket = socketManager?.defaultSocket
    }

    func getConnectionParam() -> [String: Any] {
            return ["auth": "AUTHTOKEN", "user_id": "AUTH_USER_ID", "timeZone": "\(Date().localTimeZoneName)"]
    }

    func addHandlers() {
        socket.on("get_all_user_list") { (data, ack) in
            print("KK get_all_user_list", data,ack) // this line never gets called. I tried putting breakpoints.
        }
    }


    func establishConnection() {
        socket.connect()
    }


    func closeConnection() {
        socket.disconnect()
    }

}
0 голосов
/ 21 апреля 2020

Убедитесь, что вы установили соединение с сервером, когда приложение становится активным.

func applicationDidBecomeActive(application: UIApplication) {
    SocketIOManager.sharedInstance.establishConnection()
}

И еще одно важное замечание: будет вызван вышеуказанный метод socket.on (...) автоматически Socket.IO каждый раз, когда сервер отправляет список пользователей .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...