BPMobileMessaging
示例
要运行示例项目,请先克隆仓库,然后从 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)")
}
}
作者
许可
BPMobileMessaging在MIT许可下可用。有关更多信息,请参阅LICENSE文件。