MBMessagesSwift
MBMessagesSwift 是一个用于 MBurger 的插件库,允许您在应用中显示应用消息并管理推送通知。该库的最低部署目标为 iOS 11.0。
使用此库,您可以在应用中显示在 MBurger 控制台中设置的消息。您还可以设置和管理与您的 MBurger 项目连接的推送通知。
安装
Swift 包管理器
从 Xcode 11 开始,您可以使用 Swift 包管理器 将 MBMessagesSwift 添加到项目中。按照以下简单步骤操作
- 在 Xcode 中转到文件 > Swift 包 > 添加包依赖关系。
- 在“选择包存储库”对话框中输入
https://github.com/Mumble-SRL/MBMessagesSwift.git
并按下一步。 - 指定版本时,使用规则“直到下一个主要版本”,其最早版本为“0.1.1”,然后按下一步。
- Xcode 将尝试解析版本,之后您可以选择
MBMessagesSwift
库并将其添加到您的应用目标中。
CocoaPods
CocoaPods 是一个用于 iOS 的依赖管理工具,它可以自动化并简化在项目中使用第三方库的过程。您可以使用以下命令安装 CocoaPods:
$ gem install cocoapods
要使用 CocoaPods 将 MBMessagesSwift 集成到您的 Xcode 项目中,请在 Podfile 中指定它。
platform :ios, '12.0'
target 'TargetName' do
pod 'MBMessagesSwift'
end
如果您使用的是 Swift,请记住在 pod 说明前添加 use_frameworks!
。
然后,运行以下命令:
$ pod install
CocoaPods 是安装库的首选方法。
Carthage
Carthage 是一个去中心化的依赖管理器,它构建您的依赖并提供二进制框架。要使用 Carthage 将 MBMessagesSwift 集成到您的 Xcode 项目中,请在 Cartfile 中指定它。
github "Mumble-SRL/MBMessagesSwift"
手动安装
要手动安装库,请将文件夹 MBMessages
拖放到 XCode 中的项目结构中。
请注意,MBMessagesSwift
使用 MBurgerSwift (1.0.8)
和 MPushSwift (0.2.13)
作为依赖项,因此您还必须安装这些库。
初始化
要初始化 SDK,您必须将 MBMessagesSwift
添加到 MBurger
的插件数组中。
import MBurgerSwift
import MBMessagesSwift
...
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
MBManager.shared.apiToken = "YOUR_API_TOKEN"
MBManager.shared.plugins = [MBMessages()]
return true
}
然后,您必须告诉 MBManager.shared 应用程序是通过 MBManager.shared.applicationDidFinishLaunchingWithOptions(launchOptions: launchOptions)
打开的,这将触发所有 MBurger 插件的启动动作。完成此操作后,应用程序启动时将自动检索消息,如果需要展示,则会展示。
...
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
MBManager.shared.apiToken = "YOUR_API_TOKEN"
MBManager.shared.plugins = [MBMessages()]
MBManager.shared.applicationDidFinishLaunchingWithOptions(launchOptions: launchOptions)
return true
}
使用参数初始化 MBMessages
您可以在初始化 MBMessages
插件时设置一些参数
let messagesPlugin = MBMessages(delegate: [the delegate],
viewDelegate: [view delegate],
styleDelegate: [style delegate],
messagesDelay: 1
debug: true)
- messagesDelay:这是在检索到消息后显示消息的时间
- debug:如果设置为
true
,则将显示服务端返回的所有消息,如果设置为false
,则安装应用程序后仅显示一次消息。默认值为false
。 - 委托:如果消息的获取失败,则会调用委托,并提供导致失败的错误,请参阅 MBMessagesDelegate 了解详细信息。
- 视图委托:当显示或隐藏消息视图时,视图委托将接收调用,当视图中的按钮被触摸时,它也会接收调用。如果您想从应用内消息打开应用内链接,则需要实现此协议。请参阅 MBInAppMessageViewDelegate 了解协议的详细描述。
- 样式委托:您可以使用此协议指定应用内消息的颜色和字体。请参阅 Stylize in app messages 了解详细信息。
Stylize in app messages
如果您想指定显示的消息的字体和颜色,可以使用 MBInAppMessageViewStyleDelegate
协议。此协议的所有函数都是可选的,如果未实现函数,框架将使用默认值。以下是可以进行样式化的元素:
- 背景样式:可以是纯色或半透明色
- 背景颜色:背景颜色
- 标题颜色:消息标题的文本颜色
- 正文颜色:正文的文本颜色
- 关闭按钮颜色:关闭按钮的颜色
- 按钮1背景颜色:第一个操作按钮的背景颜色
- 按钮1标题颜色:第一个操作按钮的文本颜色
- 按钮2背景颜色:第二个操作按钮的背景颜色
- 按钮2标题颜色:第二个操作按钮的文本颜色
- 按钮2边框颜色:第二个操作按钮的边框颜色
- 标题字体:标题的字体
- 正文字体:正文的字体
- 按钮文本字体:按钮标题的字体
示例
func backgroundStyle(forMessage message: MBInAppMessage) -> MBInAppMessageViewBackgroundStyle {
return .solid
}
func backgroundColor(forMessage message: MBInAppMessage) -> UIColor {
return .green
}
func titleColor(forMessage message: MBInAppMessage) -> UIColor {
return .blue
}
func bodyColor(forMessage message: MBInAppMessage) -> UIColor {
return .darkText
}
func button1TitleColor(forMessage message: MBInAppMessage) -> UIColor {
return .white
}
func button1BackgroundColor(forMessage message: MBInAppMessage) -> UIColor {
return .cyan
}
MBMessagesDelegate
如果您想接收当应用内消息视图显示或隐藏时的功能调用,则需要实现此协议。如果您想响应用户在应用内消息视图上的按钮点击,您也需要使用此协议。
viewWillAppear
和 viewDidAppear
在视图显示时被调用,而 viewWillDisappear
和 viewDidDisappear
在视图隐藏时被调用。
func viewWillAppear(view: MBInAppMessageView)
func viewDidAppear(view: MBInAppMessageView)
func viewWillDisappear(view: MBInAppMessageView)
func viewDidDisappear(view: MBInAppMessageView)
要响应用户对按钮的点击,您必须实现 func buttonPressed(view: MBInAppMessageView, button: MBInAppMessageButton)
,以下是一个示例
func buttonPressed(view: MBInAppMessageView, button: MBInAppMessageButton) {
let linkType = button.linkType
if linkType == .link && button.link.hasPrefix("http") {
if let url = URL(string: button.link) {
//Open url
}
} else {
// Open in app link (button.link)
}
}
MBMessagesDelegate
实现此协议,当从服务器获取消息失败时,你将收到调用
func inAppMessageCheckFailed(sender: MBMessages, error: Error?)
推送通知
使用此插件,您还可以管理MBurger的推送通知部分,这是对MPush(基础平台)的包装,因此您应参考MPush文档来了解概念并开始推送集成。为了使用MBMessagesSwift
代替MPushSwift
,您需要进行以下更改
设置推送令牌如下
MBMessages.pushToken = "YOUR_PUSH_TOKEN"
然后注册您的设备到主题(所有其他函数都有类似的语法更改)
MBMessages.registerDeviceToPush(deviceToken: deviceToken, success: {
MBMessages.registerPushMessages(toTopic: MBPTopic("YOUR_TOPIC"))
})
MBurger有两个默认主题,您应使用它们以确保参与平台的正确功能
MBMessages.projectPushTopic
:此主题代表注册此项目推送通知的所有设备MBMessages.devicePushTopic
:此主题代表当前设备
MBMessages.registerPushMessages(toTopics:[MBMessages.projectPushTopic,
MBMessages.devicePushTopic,
MBPTopic("OTHER_TOPIC")])
MBPTopic附加参数
在创建主题时,您可以指定附加参数
title
:该主题的标题,将在仪表板中显示,如果未指定,则与主题id的值相同single
:如果主题标识单个用户或一组用户,则默认为false
用户与推送通知互动
使用MBMessagesSwift
,您可以设置一个回调,当用户与推送通知互动或在推送的情况下打开应用时将被调用。您可以像这样设置代码,payload变量将包含推送有效负载
MBMessages.userDidInteractWithNotificationBlock = { payload in
// Do actions in response
print("Notification arrived:\n\(payload)")
}
为了让它生效,您需要告诉 MBMessagesSwift
已经收到通知,所以您需要在您的 UNUserNotificationCenterDelegate
类(通常为 AppDelegate
)中添加以下代码。
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler
completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
// Add this line
MBMessages.userNotificationCenter(willPresent: notification)
completionHandler(UNNotificationPresentationOptions.alert)
}
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler
completionHandler: @escaping () -> Void) {
// Add this line
MBMessages.userNotificationCenter(didReceive: response)
completionHandler()
}
消息度量
使用 MBMessagesSwift
让您可以收集有关用户和推送通知的信息,这些信息将显示在 MBurger 仪表板上。正如前一段所述,为了让这生效,您需要告诉 MBMessagesSwift
已收到推送通知,如果在上面步骤中已执行,则无需操作。否则,您需要将 MBMessages.userNotificationCenter(willPresent: notification)
和 MBMessages.userNotificationCenter(didReceive: response)
添加到您的 UNUserNotificationCenterDelegate
类中。
自动化
如果消息启用了自动化,则它们将由 MBAutomationSwift SDK 忽略并管理,请确保正确包含和配置自动化 SDK。