MBMessagesSwift
MBMessagesSwift 是一个用于 MBurger 的插件库,允许您在应用中显示应用消息并管理推送通知。此库的最小部署目标为 iOS 11.0。
使用此库,您可以在应用中显示在 MBurger 控制面板中设置的消息。您还可以设置和管理与您的 MBurger 项目关联的推送通知。
安装
Swift Package Manager
从 Xcode 11 开始,您可以使用 Swift Package Manager 将 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"
fang facefacefaceMING
要手动安装库,将文件夹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
。 - delegate:如果消息拉取失败,将调用拖拽,其中包含造成失败的错误。有关更多信息,请参见MBMessagesDelegate。
- viewDelegate:当消息视图显示或隐藏时,视图拖拽将收到调用。当视图中的按钮被触摸时,它也会收到调用。如果您想从一个应用内消息打开应用内链接,则需要实现此协议。有关协议的详细描述,请参见MBInAppMessageViewDelegate。
- styleDelegate:您可以使用此协议来指定应用内消息的颜色和字体。有关详细信息,请参见美化应用内消息。
美化应用内消息
如果您想指定显示的消息的字体和颜色,可以使用MBInAppMessageViewStyleDelegate
协议。该协议的所有功能都是可选的,如果未实现某个功能,框架将使用默认值。以下是可以美化的元素:
- backgroundStyle:可以是纯色或半透明色。
- backgroundColor:背景颜色。
- titleColor:消息标题的文本颜色。
- bodyColor:消息正文的文本颜色。
- closeButtonColor:关闭按钮的颜色。
- button1BackgroundColor:第一个动作按钮的背景颜色。
- button1TitleColor:第一个动作按钮的文本颜色。
- button2BackgroundColor:第二个动作按钮的背景颜色。
- button2TitleColor:第二个动作按钮的文本颜色。
- button2BorderColor:第二个动作按钮的边框颜色。
- titleFont:标题的字体。
- bodyFont:正文的字体。
- buttonsTextFont:按钮标题的字体。
示例
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
已收到推送,如果在上一步已经做了,那么就没有问题,否则您需要在您的 UNUserNotificationCenterDelegate
类中添加 MBMessages.userNotificationCenter(willPresent: notification)
和 MBMessages.userNotificationCenter(didReceive: response)
。
自动化
如果消息启用了自动化,则将由 MBAutomationSwift SDK 忽略并管理,因此请确保正确地包含和配置自动化 SDK。