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)
}
}
可观察房间
可观察房间与普通房间类似,但提供更强大的功能,用于跟踪连接的成员和将消息与成员关联。
向成员对象添加数据
可观察房间允许向已连接用户添加自定义数据。这些数据可以通过两种方式添加
- 将数据对象传递给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)
}
- 在身份验证过程中,将数据添加到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、消息的时间以及发送的数据。
待办事项
- 自动重新连接