Mitter 0.0.8

Mitter 0.0.8

Rahul Chowdhury 维护。



 
依赖
RxSwift~> 4.0
Moya/RxSwift~> 11.0
Moya-ModelMapper/RxSwift~> 7.1.0
Alamofire~> 4.7
RxCocoa~> 4.0
PhoneNumberKit~> 2.5
Swinject~> 2.5.0
JWTDecode~> 2.1
Firebase/Core>= 0
Firebase/Messaging>= 0
 

Mitter 0.0.8

开始使用 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 是一个枚举,具有各种情况,如 NewMessagePayloadNewChannelPayload 等。

请注意,为了使 FCM 消息正常工作,您需要在物理 iOS 设备上运行项目。

_ 此外,您需要将 dataType 包含为 cloud-notification 在任何选择使用 Postman 或其他 REST 客户端直接 API 调用的消息中。

干杯!🍻