Scaledrone 0.5.3

Scaledrone 0.5.3

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2021 年 2 月
SPM支持 SPM

Serge 维护。



  • Scaledrone

Scaledrone Swift

使用 Scaledrone Swift 客户端连接到 Scaledrone 实时消息服务

该项目仍在进行中,欢迎 pull requests 和 issues。

安装

CocoaPods

查看 Get Started 选项卡在 cocoapods.org 上。

要在项目中使用 Scaledrone,请将以下 'Podfile' 添加到您的项目

pod 'Scaledrone', '~> 0.5.2'

然后运行

pod install

Carthage

查看 Carthage 快速入门说明

要使用 Carthage 与 Scaledrone 一起使用,请将以下内容添加到您的 Cartfile 中

github "ScaleDrone/Scaledrone-Swift"

然后运行

carthage update

之后,按照 Carthage 文档上的说明 进行操作。

使用方法

首先需要导入框架。有关如何将框架添加到项目的安装说明中。

import Scaledrone

导入之后,您可以连接到Scaledrone。

scaledrone = Scaledrone(channelID: "your-channel-id")
scaledrone.delegate = self
scaledrone.connect()

连接成功后,需要实现一些代理方法。

scaledroneDidConnect

func scaledroneDidConnect(scaledrone: Scaledrone, error: Error?) {
    print("Connected to Scaledrone")
}

scaledroneDidReceiveError

func scaledroneDidReceiveError(scaledrone: Scaledrone, error: Error?) {
    print("Scaledrone error", error ?? "")
}

scaledroneDidDisconnect

func scaledroneDidDisconnect(scaledrone: Scaledrone, error: Error?) {
    print("Scaledrone disconnected", error ?? "")
}

认证

实现 ScaledroneAuthenticateDelegate 协议并设置一个额外的代理

scaledrone.authenticateDelegate = self

然后使用认证方法使用JWT进行认证

scaledrone.authenticate(jwt: "jwt_string")

scaledroneDidAuthenticate

func scaledroneDidAuthenticate(scaledrone: Scaledrone, error: Error?) {
    print("Scaledrone authenticated", error ?? "")
}

发送消息

scaledrone.publish(message: "Hello from Swift", room: "myroom")
// Or
room.publish(message: ["foo": "bar", "1": 2])

订阅消息

订阅一个房间并实现 ScaledroneRoomDelegate 协议,然后设置其他代理

let room = scaledrone.subscribe(roomName: "myroom")
room.delegate = self

scaledroneRoomDidConnect

func scaledroneRoomDidConnect(room: ScaledroneRoom, error: Error?) {
    print("Scaledrone connected to room", room.name, error ?? "")
}

scaledroneRoomDidReceiveMessage

当消息通过网络API(而不是REST API)发送到 可观察房间 时,存在 member 参数。

func scaledroneRoomDidReceiveMessage(room: ScaledroneRoom, message: ScaledroneMessage) {
    if message.member != nil {
        // This message was sent to an observable room
        // This message was sent through the socket API, not the REST API
        print("Received message from member:", message.memberID as Any)
    }
    
    let data = message.data
    
    if let messageData = data as? [String: Any] {
        print("Received a dictionary:", messageData)
    }
    if let messageData = data as? [Any] {
        print("Received an array:", messageData)
    }
    if let messageData = data as? String {
        print("Received a string:", messageData)
    }
}

可观察房间

可观察房间与普通房间类似,但提供更强大的功能,用于跟踪连接的成员和将消息与成员关联。

向成员对象添加数据

可观察房间允许向已连接用户添加自定义数据。这些数据可以通过两种方式添加

  1. 将数据对象传递给Swift代码中的Scaledrone的新实例。
let scaledrone = Scaledrone(channelID: "<channel_id>", data: ["name": "Swift", "color": "#ff0000"])

稍后可以像这样访问这些数据

func scaledroneObservableRoomMemberDidJoin(room: ScaledroneRoom, member: ScaledroneMember) {
    print("member joined with clientData", member.clientData)
}
  1. 身份验证过程中,将数据添加到JSON Web Token的data子句中。这种方法更安全,因为用户无法在客户端更改数据。
{
  "client": "client_id_sent_from_javascript_client",
  "channel": "channel_id",
  "data": {
    "name": "Swift",
    "color": "#ff0000"
  },
  "permissions": {
    "^main-room$": {
      "publish": false,
      "subscribe": false
    }
  },
  "exp": 1408639878000
}

稍后可以像这样访问这些数据

func scaledroneObservableRoomMemberDidJoin(room: ScaledroneRoom, member: ScaledroneMember) {
    print("member joined with authData", member.authData)
}

接收可观察的事件

实现ScaledroneObservableRoomDelegate协议,然后设置额外的代理。

可观察的房间名称需要以前缀observable-开头。

let room = scaledrone.subscribe(roomName: "observable-room")
room.delegate = self
room.observableDelegate = self

scaledroneObservableRoomDidConnect

func scaledroneObservableRoomDidConnect(room: ScaledroneRoom, members: [ScaledroneMember]) {
    // The list will contain yourself
    print(members.map { (m: ScaledroneMember) -> String in
        return m.id
    })
}

scaledroneObservableRoomMemberDidJoin

func scaledroneObservableRoomMemberDidJoin(room: ScaledroneRoom, member: ScaledroneMember) {
    print("member joined", member, member.id)
}

scaledroneObservableRoomMemberDidLeave

func scaledroneObservableRoomMemberDidLeave(room: ScaledroneRoom, member: ScaledroneMember) {
    print("member left", member, member.id)
}

消息历史记录

创建Scaledrone房间时,您可以指定从该房间的历史记录中接收的消息数量。消息将按倒序、一个接一个地到达scaledroneRoomDidReceiveMessage,就像实时信息一样。

为了接收消息历史记录消息,需要在Scaledrone仪表板中启用此功能。您可以在Scaledrone文档中了解更多关于消息历史记录及其限制的信息。

let room = scaledrone.subscribe(roomName: "chat-room", messageHistory: 50)

基本示例

import UIKit

class ViewController: UIViewController, ScaledroneDelegate, ScaledroneRoomDelegate {

    let scaledrone = Scaledrone(channelID: "your-channel-id")

    override func viewDidLoad() {
        super.viewDidLoad()
        scaledrone.delegate = self
        scaledrone.connect()
    }

    func scaledroneDidConnect(scaledrone: Scaledrone, error: Error?) {
        print("Connected to Scaledrone channel", scaledrone.clientID)
        let room = scaledrone.subscribe(roomName: "notifications")
        room.delegate = self
    }

    func scaledroneDidReceiveError(scaledrone: Scaledrone, error: Error?) {
        print("Scaledrone error")
    }

    func scaledroneDidDisconnect(scaledrone: Scaledrone, error: Error?) {
        print("Scaledrone disconnected")
    }

    func scaledroneRoomDidConnect(room: ScaledroneRoom, error: Error?) {
        print("Scaledrone connected to room", room.name)
    }

    func scaledroneRoomDidReceiveMessage(room: ScaledroneRoom, message: String) {
        print("Room received message:", message)
    }
}

更长的示例请查看 ViewController.swift 文件。

迁移说明

0.5.0

_scaledrone 0.5.0 版本移除了在代理方法中使用 NSError,转而使用 Error,并添加了对 Swift 5 的支持。

0.5.2:

scaledroneRoomDidReceiveMessage(room:message:member) 已更名为 scaledroneRoomDidReceiveMessage(room:message:),且 message 现在的类型为 ScaledroneMessage,该类型包括成员和消息 ID、消息的时间以及发送的数据。

待办事项

  • 自动重新连接