BPMobileMessaging 2.0.0

BPMobileMessaging 2.0.0

Alexander Lobastov 以及 BPMobileMessaging 维护。



  • 来自
  • https://www.brightpattern.com

BPMobileMessaging

CI Status Version License Platform

示例

要运行示例项目,请先克隆仓库,然后从 Example 目录运行 pod install

要求

快速入门

将 SDK 添加到您的项目中

BPMobileMessaging 通过 CocoaPods 提供。要安装它,只需简单地将以下行添加到 Podfile

pod 'BPMobileMessaging'
  • 将以下行添加到项目的 AppDelegate.swift 文件中
import BPMobileMessaging
  • 生成唯一的clientID字符串值。当应用程序在移动设备上首次运行时,应生成clientID并将其保存在本地存储中。应用程序应使用此值,直到从设备中删除它。每个应用程序/设备组合的clientID应该是唯一的。
var clientID = UUID().uuidString
  • 创建处理与BPCC服务器通信的ContactCenterCommunicator类的实例。
let baseURL = URL(string: "https://<your server URL>")!
let tenantURL = URL(string: "<your tenant URL>")!
var appID = "<your messaging scenario entry ID>"

lazy var contactCenterService: ContactCenterCommunicating = {
    ContactCenterCommunicator(baseURL: baseURL, tenantURL: tenantURL, appID: appID, clientID: clientID)
}()
  • 注册推通知。SDK支持原生的APNs和Google Firebase推送通知框架。一次只能使用一个框架。定义一个变量来存储设备令牌。
var deviceToken: String?
  • 如果使用APNs,实现处理APNs设备令牌结果的函数。
func application(_ application: UIApplication,
            didRegisterForRemoteNotificationsWithDeviceToken
                deviceToken: Data) {
    self.deviceToken = deviceToken.map { String(format: "%02.2hhx", $0) }.joined()
    service?.deviceTokenChanged(to: deviceToken)
}
  • 如果使用Google Firebase,实现MessagingDelegate扩展。
extension AppDelegate: MessagingDelegate {
    func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
        guard let fcmToken = fcmToken else {
            print("Empty fcm token")
            return
        }
        print("Received fcm token from Firebase: \(fcmToken)")
        self.deviceToken = fcmToken
    }
}
  • 实现UNUserNotificationCenterDelegate扩展以处理推送通知。
extension AppDelegate : UNUserNotificationCenterDelegate {

  func userNotificationCenter(_ center: UNUserNotificationCenter,
                              didReceive response: UNNotificationResponse,
                              withCompletionHandler completionHandler: @escaping () -> Void) {
    let userInfo = response.notification.request.content.userInfo
    contactCenterService.appDidReceiveMessage(userInfo)
    completionHandler()
  }
}
  • 设置APNs和Google Firebase框架的委托。
UNUserNotificationCenter.current().delegate = self
Messaging.messaging().delegate = self
  • 请求接收推送通知的权限。
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(options: authOptions) { (authorized, error) in
    guard authorized else {
        if let error = error {
            print("Failed to authorize remote notifications: \(error)")
        }
        return
    }
    DispatchQueue.main.async {
        UIApplication.shared.registerForRemoteNotifications()
    }
    print("Successfully authorized for remote notifications")
}
  • 实现ContactCenterEventsDelegating扩展以接收聊天事件。
extension AppDelegate: ContactCenterEventsDelegating {
    func chatSessionEvents(result: Result<[ContactCenterEvent], Error>) {
        switch result {
        case .success(let events):
            print("Received events from contact center")
            DispatchQueue.main.async {
                //  Handle events here ...
            }
        case .failure(let error):
            print("chatSessionEvents failed: \(error)")
        }
    }
}
  • ContactCenterCommunicator设置委托。
contactCenterService.delegate = self
  • 要验证聊天服务是否可用,请调用checkAvailability()方法。
contactCenterService.checkAvailability { [weak self] serviceAvailabilityResult in
    DispatchQueue.main.async {
        switch serviceAvailabilityResult {
        case .success(let serviceAvailability):
            print("Chat is \(serviceAvailability.chat)")
            self?.isChatAvailable = serviceAvailability.chat == .available
        case .failure(let error):
            print("Failed to check availability: \(error)")
        }
    }
}
  • 要请求新的聊天会话,请调用requestChat()方法并订阅新创建的聊天会话的推送通知。
contactCenterService.requestChat(phoneNumber: "12345", from: "54321", parameters: [:]) { [weak self] chatPropertiesResult in
    DispatchQueue.main.async {
        switch chatPropertiesResult {
        case .success(let chatProperties):
            self?.currentChatID = chatProperties.chatID
            contactCenterService.subscribeForRemoteNotificationsAPNs(chatID: chatProperties.chatID,
                                                                     deviceToken: deviceToken) { subscribeResult in
                DispatchQueue.main.async {
                    switch subscribeResult {
                    case .success:
                        print("Subscribe for remote notifications confirmed")
                    case .failure(let error):
                        print("Failed to subscribe for notifications: \(error)")
                    }
                }
            }
        case .failure(let error):
            print("\(error)")
        }
    }

作者

BrightPattern

许可

BPMobileMessaging在MIT许可下可用。有关更多信息,请参阅LICENSE文件。