面向iOS应用的Mailfire SDK
您的关键产品指标电子邮件营销和推送平台 https://mailfire.io
介绍
使用Mailfire SDK设计和发送推送通知,跟踪和报告应用中发生的事件。使用Mailfire SDK与它们的App相结合的开发者需要注册凭据,并将其(apiKey)指定在应用中。未执行此操作会导致某些功能受限,并降低其他服务品质。为了获得这些凭据,请访问开发者门户https://mailfire.io并注册许可。凭据是应用于进程标识符的特定凭据。请勿在多个应用间重复使用凭据。
安装
要求
- iOS 10.0+
- Xcode 10.2+
- Swift 5+
通过依赖管理器CocoaPods(https://cocoapods.org.cn)整合Mailfire到您的Xcode项目,请在您的Podfile
中指定它:
pod 'Mailfire'
如果您喜欢手动操作
- 从本存储库下载iOS软件包:Mailfire.framework文件夹。
- 将Mailfire动态框架添加到您的Xcode项目中。单击您的应用目标并选择“通用”选项卡。找到名为“嵌入式二进制文件”的部分,点击加号(+),然后点击“添加其他”按钮。从文件对话框中选择“Mailfire.framework”文件夹。确保已选中“如有必要则复制项”和“创建文件夹引用”选项,然后点击完成。
- 确保Mailfire.framework出现在“嵌入式二进制文件”和“链接的框架和库”部分。
- 运行应用。确保项目在iOS上运行无错误。iOS的SDK现在已准备好在您的Xcode项目中使用。现在您的项目已配置为与Mailfire SDK一起工作。
添加凭据
为了使用Mailfire平台,您必须提供您的账户和当前应用的凭据。您可以在管理面板中找到它们或从您的账户经理处请求。示例
clientId: 7345
clientToken: uawhvnkaeuvyagbwyeuvgbayw
appId: 837465 (aka projectId)
接下来,在库启动时提供这些凭据。
初始化SDK
同时也在分析中创建会话。
import Mailfire
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
Mailfire.initializeWithLaunchOptions(launchOptions, appId: 'YOUR_APP_ID', clientId: 'YOUR_CLIENT_ID', clientToken: 'YOUR_CLIENT_TOKEN')
}
附加用户
对于SDK中的所有方法,我们通过IDFV来匹配用户
另外,您可以提供更多产品信息用于分析和等。
-
在该方法之前,您不需要提供PushToken。
-
电子邮件 - 更好是在验证后提供 https://github.com/mailfire/php-sdk#check-email
-
userId - 您产品的id
Mailfire.logUser(email: "[email protected]", userId: userId)
推送通知
iOS推送提示
iOS应用有一个原生提示,用户点击“允许”来订阅推送。您可以使用以下方法在您的应用程序中触发该提示。
Warning: Use that method if no other third party or native lib do not invoke method to prompt for push permissions.
If Firebase is used for instance, just skip that section.
import Mailfire
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
...
Mailfire.promptForPushNotifications { granted in
if granted {
...
} else {
...
}
}
...
}
// Within native UIApplicationDelegate callback pass apns token to Mailfire server
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let tokenParts = deviceToken.map { data in String(format: "%02.2hhx", data) }
let token = tokenParts.joined()
Mailfire.shared.pushToken(.apns(token))
}
推送令牌
通过使用,将
Mailfire.shared.pushToken(.firebase(token))
注意:请确保您已将Firebase服务器密钥传递给Mailfire团队,否则推送将无法送达。
通过使用,将
Mailfire.shared.pushToken(.apns(token))
丰富推送
Mailfire允许您的iOS应用程序接收带有图像和徽章的丰富通知。
它还会通过didReceiveNotificationExtensionRequest将
所有要做的是引入通知服务扩展,并调用相应的Mailfire方法。
import UserNotifications
import Mailfire
class NotificationService: UNNotificationServiceExtension {
var contentHandler: ((UNNotificationContent) -> Void)?
var bestAttemptContent: UNMutableNotificationContent?
var receivedRequest: UNNotificationRequest!
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
let APP_ID : String = "XXXXX"
let APP_CLIENT_ID : String = "XXXXX"
let APP_CODE: String = "XXXXXXXXXXXXXXXXXX"
Mailfire.initialize(appId: APP_ID, clientId: APP_CLIENT_ID, clientToken: APP_CODE)
self.receivedRequest = request
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
if let bestAttemptContent = bestAttemptContent {
// Modify the notification content here...
bestAttemptContent.title = "\(bestAttemptContent.title) [modified]"
Mailfire.didReceiveNotificationExtensionRequest(self.receivedRequest, with: bestAttemptContent)
contentHandler(bestAttemptContent)
}
}
override func serviceExtensionTimeWillExpire() {
// Called just before the extension will be terminated by the system.
// Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
Mailfire.serviceExtensionTimeWillExpire(self.receivedRequest, with: bestAttemptContent)
contentHandler(bestAttemptContent)
}
}
}
点击跟踪
这是Mailfire分析功能所需的。记录收到的推送的有效负载信息。
extension PushNotificationHelper : UNUserNotificationCenterDelegate {
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
Mailfire.logPush(pushPayload: userInfo)
completionHandler()
}
}
未读跟踪
如果存在
extension PushNotificationService : UNUserNotificationCenterDelegate {
// foreground
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
....
// log push info code if push won't be shown
Mailfire.logUnseenPush(pushPayload: notification.request.content.userInfo)
completionHandler([])
}
退订
用户必须首先通过原生弹窗或应用设置进行订阅。这不会通过应用设置正式订阅或退订,而是退订接收 Mailfire 的推送。您只能使用 false 参数调用此方法以从 Mailfire 中退订用户接收通知。之后您可以传递 true 参数以让用户再次接收通知。
Mailfire.subscription = false
推送通知有效载荷
有效载荷键参考。表格列出了有效载荷可能包含的键。
键 | 值类型 | 描述 |
---|---|---|
data | 字典 | 数据消息只有自定义键值对,没有保留键名。 |
notification | 字典 | 拥有一组预定义的用户可见键和可选的包含自定义键值对的数据有效载荷。 |
表格列出了您可能在数据字典中接收到的键。
键 | 值类型 | 描述 |
---|---|---|
push_id | 字符串 | 发送者 ID 信息 |
type | 字符串 | 可能是任何类型。例如 'route' |
route | 字符串 | null |
from_user_id | 字符串 | 仅限 route 类型。chat |
image_url | 字符串 | 要显示的启动图像文件名。 |
sender_id | 字符串 | 这是与平台相关的选项。对于 iOS,默认为 2。 |
logic_id | 字符串 | 逻辑标识符 |
template_id | 字符串 | 模板的名称 |
mf_split_group | 字符串 | 拆分组名称。默认为 nil。 |
表格列出了您可能在通知字典中接收到的键。
键 | 值类型 | 描述 |
---|---|---|
title | 字符串 | 通知的标题。 |
body | 字符串 | 解释通知目的的附加信息。 |
badge | 数字 | 在您的应用程序图标上显示的徽章编号。 |