ActionCableSwift

请给⭐️来支持 Action Cable Swift 的开发

Action Cable Swift 推文

SPM Action Cable Swift Cocoa Pods

Action Cable Swift 是一个为 Action Cable Rails 5 发布的客户端库,它可以轻松地为你的应用添加实时功能。这个 Swift 客户端的灵感来源于 "Swift-ActionCableClient",但是它现在不被支持了,所以我创建了 Action-Cable-Swift。

此外,web sockets 客户端现在已与此客户端分离。

安装

安装非常简单,只需

Swift Package Manager

⚠️对于 13 版本之前的 iOS,请使用 0.4.0 版本

将以下行添加到你的 Package.swift 文件中

    // ...
    .package(name: "ActionCableSwift", url: "https://github.com/nerzh/Action-Cable-Swift.git", from: "1.0.0"),
    targets: [
        .target(
            name: "YourPackageName",
            dependencies: [
                .product(name: "ActionCableSwift", package: "ActionCableSwift")
            ])
    // ...

用法

import ActionCableSwift

/// action cable client
let clientOptions: ACClientOptions = .init(debug: false, reconnect: true)
let client: ACClient = .init(stringURL: "ws://:3001/cable", options: clientOptions)
/// pass headers to connect
/// on server you can get this with env['HTTP_COOKIE']
client.headers = ["COOKIE": "Value"]

/// make channel
/// buffering - buffering messages if disconnect and flush after reconnect
let channelOptions: ACChannelOptions = .init(buffering: true, autoSubscribe: true)
/// params to subscribe passed inside the identifier dictionary
let identifier: [String: Any] = ["key": "value"] 
let channel: ACChannel = client.makeChannel(name: "RoomChannel", identifier: identifier, options: channelOptions)

// !!! Make sure that the client and channel objects is declared "globally" and lives while your socket connection is needed

channel.addOnSubscribe { (channel, optionalMessage) in
    print(optionalMessage)
}
channel.addOnMessage { (channel, optionalMessage) in
    print(optionalMessage)
}
channel.addOnPing { (channel, optionalMessage) in
    print("ping")
}

/// Connect
client.connect()

手动订阅频道

client.addOnConnected { (headers) in
    try? channel.subscribe()
}

频道回调

func addOnMessage(_ handler: @escaping (_ channel: ACChannel, _ message: ACMessage?) -> Void)

func addOnSubscribe(_ handler: @escaping (_ channel: ACChannel, _ message: ACMessage?) -> Void)

func addOnUnsubscribe(_ handler: @escaping (_ channel: ACChannel, _ message: ACMessage?) -> Void)

func addOnRejectSubscription(_ handler: @escaping (_ channel: ACChannel, _ message: ACMessage?) -> Void)

func addOnPing(_ handler: @escaping (_ channel: ACChannel, _ message: ACMessage?) -> Void)

在频道上执行操作

// Send an action
channel.addOnSubscribe { (channel, optionalMessage) in
    try? channel.sendMessage(actionName: "speak", params: ["test": 10101010101])
}

授权 & 请求头

client.headers = [
    "Authorization": "sometoken"
]

如果你想实现你自己的 WebSocket Provider,你应该实现 ACWebSocketProtocol 协议,并为 ACClient 使用另一个初始化器

import ActionCableSwift

/// web socket client
let ws: YourWSS = .init(stringURL: "ws://:3001/cable")

/// action cable client
let clientOptions: ACClientOptions = .init(debug: false, reconnect: true)
let client: ACClient = .init(ws: ws, options: clientOptions)

要求

Websocket-kit

作者

许可证

ActionCableSwift 基于 MIT 许可证发布。有关更多信息,请参阅 LICENSE 文件。