Как подключить сокет в Swift 4 - PullRequest
0 голосов
/ 24 апреля 2018

Я хочу подключить мое приложение к сокету, вот код: -

  import UIKit
  import SocketIO

 class SocketIOManager: NSObject {
static let manager = SocketManager(socketURL: URL(string: "myURL")!)
static let socket = manager.defaultSocket


class func connectSocket() {
    let token = UserDefaults.standard.getAccessToken()

    self.manager.config = SocketIOClientConfiguration(
        arrayLiteral: .connectParams(["token": token]), .secure(true) // problem is here in passing token value
        )
        socket.connect()
}

class func receiveMsg() {
    socket.on("new message here") { (dataArray, ack) in

        print(dataArray.count)

    }
}
}

Я создал новый класс SocketIOManager.swift и вызываю свою функцию в контроллере представления

  SocketIOManager.connectSocket()

и я не использую локальный URL, но мое приложение все еще не подключено к сокету. Думаю, я следовал этому Как подключиться к Socket.io?Swift 4 enter image description here и я также добавляю App Transport Security в info.plist.Любая помощь?Проблема в том, что когда я передаю значение токена, он выдает ошибку, иначе он работает правильно.Нужно ли передавать токен при использовании сокета?

Ответы [ 3 ]

0 голосов
/ 24 апреля 2018

Защищен ли ваш URL под HTTPS?Если это не так, это может быть проблемой из-за ограничений безопасности транспорта приложений.

См. Справочник по списку информации

См. Также этот пост здесь .

Если проблема не в этом.Я бы посоветовал проверить, совпадают ли ваши версии Socket с обеих сторон, сервер и клиент.Недавно у меня возникла проблема из-за этого.

Надеюсь, это поможет!

0 голосов
/ 24 апреля 2018

попробуйте этот пример:

 let manager = SocketManager(socketURL: URL(string: 
 "http://xxxxxxxxx.com")!, config: [.log(true), .compress])
 var socket = manager.defaultSocket

socket.connect()
    socket.on(clientEvent: .connect) {data, ack in
        print("socket connected")
        self.gotConnection()
       }
    }

 func gotConnection(){

 socket.on("new message here") { (dataArray, ack) in

    print(dataArray.count)

     }
   }
0 голосов
/ 24 апреля 2018

Вы должны создать общее свойство в своем классе SocketIOManager следующим образом:

static let shared = SocketIOManager()

, а затем создать init() следующим образом:

    var socket: SocketIOClient!

    // defaultNamespaceSocket and swiftSocket both share a single connection to the server
    let manager = SocketManager(socketURL: URL(string: "http://localhost:3000")!, config: [.log(true), .compress])

    override init() {
        super.init()

        socket = manager.defaultSocket
        }

и, наконец, написать свои методыкак это:

func connectSocket() {
    let token = UserDefaults.standard.getAccessToken()

    self.manager.config = SocketIOClientConfiguration(
        arrayLiteral: .connectParams(["token": token]), .secure(true)
        )
        socket.connect()
}

func receiveMsg() {
    socket.on("new message here") { (dataArray, ack) in

        print(dataArray.count)

    }
}

и вызовите ваш метод следующим образом:

SocketIOManager.shared.connectSocket()

Дело в том, что вы должны сделать строгую ссылку на свойство менеджера в вашем viewController, и static let shared = SocketIOManager() вы делаетеэто для тебя!

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