开始使用 iOS SDK
mitter 的 iOS SDK 目前具有非常基础的功能,如
- 获取当前用户信息
- 创建频道
- 发送文本消息
- 通过 FCM(通过 APNs)接收消息
安装
SDK 目前作为本地 Cocoapod 提供,可以像常规 pod 一样安装。
如果您使用的是 Mitter SDK 示例项目,只需在终端中导航到 Mitter SDK 示例文件夹,并运行此命令
pod install
否则,如果您从一个新项目开始,请在您的项目中新创建一个 Podfile
,并添加以下依赖项
pod ‘Mitter’
在此之前,请确保您已为项目安装和配置了 Cocoapods 安装和配置。
然后导航到您的项目,并运行
pod install
基本设置
在您开始使用 SDK 与 Mitter 通信之前,需要使用您的 应用程序 ID 和 用户身份验证令牌 ID 进行配置。
配置全局 Mitter
对象的最佳位置是在您的 AppDelegate.swift
文件中。
打开 AppDelegate
文件,并为 Mitter
对象声明一个实例字段,如下所示
var mitter: Mitter = Mitter(applicationId: "")
完成此操作后,找到具有 didFinishLaunchingWithOptions
签名的函数,并使用如下示例中的您的应用程序和用户详细信息初始化您的 Mitter
对象
mitter = Mitter(
applicationId: "MZzf4-na9nL-O98wq-M1HxS",
userAuthToken: "eyJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJtaXR0ZXItaW8iLCJ1c2VyVG9rZW5JZCI6IkhYbkZJSXIydUpQRHMzankiLCJ1c2VydG9rZW4iOiJhaHFtNTgzcjRwbzEwZmNqZTllaHE5dDV1NCIsImFwcGxpY2F0aW9uSWQiOiJNWnpmNC1uYTluTC1POTh3cS1NMUh4UyIsInVzZXJJZCI6ImNzckN5LVNKTDN1LThBS01ULVdxdjZ5In0.FTgn0GBgIQrA0NznQEUHyC7SN7rbN9O9cWlI5mejuDG466VSJHjwGWZF2DB3nsn8eoeCg5toIXXh5Sxz2MMU3w"
)
用户令牌足以帮助 SDK 确定用户 ID。因此,您无需明确添加用户 ID。
获取当前用户详情
现在,进入你主 ViewController
,这是你项目下的 ViewController.swift
文件。
在 viewDidLoad()
函数内,通过添加以下行获取 AppDelegate
实例的引用
let appDelegate = UIApplication.shared.delegate as! AppDelegate
现在,你可以通过在 Mitter.Users
对象上调用 getCurrentUsers()
函数来轻松调用 Mitter 并查看当前认证用户详情。
可以这样操作
appDelegate.mitter.users.getCurrentUser {
result in
switch result {
case .success(let user):
print("Current User is: \(user)")
case .error:
print("Unable to get user!")
}
}
现在,按 ⌘R
运行你的项目在任何 iPhone 模拟器上。
如果一切按照之前的步骤设置,你应该会在 Xcode 的控制台日志中看到当前认证用户详情。
创建一个频道
要使用 SDK 创建新的频道,你需要创建至少两个带有参与者用户 ID 的 Participant
实例,并将它们作为数组传递给 createDirectMessageChannel()
或 createGroupMessageChannel()
函数,具体取决于参与者的数量。
让我们初始化两个参与者并创建一个直接消息频道。
let stan = Participant(id: "csrCy-SJL3u-8AKMT-Wqv6y")
let rahul = Participant(id: "E3CAM-jjw8A-WeqDe-cWFe7")
在此处替换为你的用户 ID。
现在,调用该函数
appDelegate.mitter.channels.createGroupMessageChannel(participants: [stan, rahul]) { result in
switch result {
case .success(let channelId):
print("New channel created: \(channelId)")
case .error:
print("Couldn't create channel")
}
}
运行你的项目,现在你应该会在控制台日志中看到 已创建新频道 消息和新建频道的 ID。
记下 ID,因为我们将会用它发送和接收消息。
发送普通文本消息
发送普通文本消息非常简单。只需在 Mitter.Messaging
实例上调用 sendTextMessage()
函数,并传递一个频道 ID 和文本负载。
appDelegate.mitter.messaging.sendTextMessage(
forChannel: "rakfT-XPdJb-WsucS-Pxy4B",
"Hello from iOS!"
) { result in
switch result {
case .success:
print("Message sent!")
case .error:
print("Couldn't send message")
}
}
在此处,您可以用上一步创建新频道时得到的频道 ID 进行指定。
运行项目,它应该会向频道发送一条新消息。
获取频道中的消息
你可以通过调用 getMessagesInChannel()
并传递频道 ID 来获取特定频道发送的消息。
appDelegate.mitter.messaging.getMessagesInChannel("rakfT-XPdJb-WsucS-Pxy4B") {
result in
switch result {
case .success(let messages):
print("Messages: \(messages)")
case .error:
print("Couldn't fetch messages")
}
}
运行项目,你应该在控制台日志中看到一条消息列表。
从 FCM 接收推送消息
在您开始通过 FCM 接收消息之前,您需要在项目中设置 FCM。
Firebase 提供了关于设置 FCM 的非常全面的教程。请遵循这里的步骤,您应该可以准备好通过 FCM 接收消息。
现在您已经在项目中配置了 FCM,可以使用以下步骤将其连接到 Mitter
注册交付端点
在您从 Mitter 接收任何消息之前,您需要将设备的 FCM 令牌注册为 Mitter 的交付端点。
您可以通过在具有 didRegisterForRemoteNotificationsWithDeviceToken
变量签名的函数中对 Mitter
对象调用 registerFcmToken()
函数来获取和注册 FCM 令牌,如下所示
InstanceID.instanceID().instanceID { (result, error) in
if let error = error {
print("Error fetching remote instange ID: \(error)")
} else if let result = result {
print("Remote instance ID token: \(result.token)")
self.mitter.registerFcmToken(token: result.token) {
result in
switch result {
case .success(let deliveryEndpoint):
print("Endpoint is: \(deliveryEndpoint.serializedEndpoint)")
case .error:
print("Unable to register endpoint!")
}
}
}
}
之后,您需要通过将它们转发到 Mitter 来处理传入的 FCM 消息。查找名为 userNotificationCenter
的函数,该函数具有名为 willPresent
的变量,然后从 FCM 通知字典中获取序列化数据字典,如下所示
let messageString = userInfo["data"] as! String
接下来,您需要将此转换为 MessagingPipelinePayload
对象。这可以通过传递上一步骤中的序列化字典来完成,如下所示
let messagingPipelinePayload = mitter.parseFcmMessage(data: messageString)
现在您已经拥有了 MessagingPipelinePayload
对象,您可以通过调用函数 isMitterMessage
并返回 Bool
来检查消息是否来自 Mitter。
接下来,通过传递 MessagingPipelinePayload
对象并连接完成处理程序来处理推送消息。
if mitter.isMitterMessage(messagingPipelinePayload) {
let payload = mitter.processPushMessage(messagingPipelinePayload!)
switch payload {
case .NewMessagePayload(let message, let channelId):
print("Received Message: \(message), for Channel: \(channelId)")
default:
print("Nothing to print!")
}
}
在这里,payload
是一个枚举,具有各种情况,如 NewMessagePayload
、NewChannelPayload
等。
请注意,为了使 FCM 消息正常工作,您需要在物理 iOS 设备上运行项目。
_ 此外,您需要将 dataType 包含为 cloud-notification 在任何选择使用 Postman 或其他 REST 客户端直接 API 调用的消息中。
干杯!