入门
安装
所需条件
- 有效的 iOS 推送令牌
- 物理 iOS 设备(推送服务在仿真器中不起作用)
- 具有
AppId
、Token
、Secret
和Events Token
的 Redlink 账户 - 部署目标等于或高于 iOS 10.0 的应用程序
步骤
- 添加通知服务扩展
- 将 Redlink 框架导入到您的项目中
- 配置 Xcode 项目
- 添加所需代码
1. 添加通知服务扩展
- 在 Xcode 中选择
文件
->新建
->目标
- 选择
通知服务扩展
并按下一步
- 在
产品名称
中填入project_nameNotificationServiceExtension
(将project_name
改为您项目的名称) - 在
语言
部分下选择Swift
(即使您的项目是用Obj-C
编写的) - 使用
取消
跳过激活方案警报 - 删除由Xcode生成的类体,导入Redlink框架并使用
RedlinkNotificationServiceExtension
作为基类。您的扩展现在应该看起来像这样
import Redlink
class project_nameNotificationServiceExtension: RedlinkNotificationServiceExtension {
}
2. 将Redlink导入到您的项目中
可以通过CocoaPods导入Redlink。如果您不熟悉CocoaPods,请参阅官方指南。
在Podfile中使用以下代码。请记住,Redlink Pod必须也添加到NotificationServiceExtension目标。
def shared_pods
pod 'Redlink', ~> '1.0'
end
target 'project_name' do
shared_pods
end
target 'project_nameNotificationServiceExtension' do
shared_pods
end
在命令行运行pod install
3. 配置Xcode项目
- 在
导航器
中选择您的项目 - 在顶部工具栏中选择
能力
- 启用
推送通知
4. 添加RedlinkConfig.plist
- 在Xcode中选择
文件
->新建
->文件
- 在资源部分下选择
属性列表
- 将
保存为
填入名称RedlinkConfig.plist
并选择目标(应为两个,即project_name
和project_nameNotificationServiceExtension
) - 在添加的
RedlinkConfig.plist
上右击并选择打开方式
->源代码
- 用以下代码替换原始代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AppId</key>
<string>your_application_id</string>
<key>Token</key>
<string>your_application_token</string>
<key>Secret</key>
<string>your_application_secret</string>
<key>EventsToken</key>
<string>your_application_events_token</string>
</dict>
</plist>
- 将
your_application_id
、your_application_token
、your_application_secret
和your_application_events_token
替换为从Redlink仪表板获取的变量
5. 添加所需的代码
- 打开您的
AppDelegate
类 - 使用
import Redlink
导入Redlink框架 - 将以下代码添加到
didFinishLaunchingWithOptions
方法中
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
Redlink.configure(using: RedlinkConfiguration.defaultConfiguration())
Redlink.push.registerForPushNotifications(with: RedlinkPushOptions.default())
return true
}
6. 备注
请注意,当与使用同一种方法的Firebase
和其他框架(如Redlink)一起使用时,自动配置可能会导致意外的行为。如果是这种情况,请考虑使用自定义配置。
用户识别
要更新用户信息,请使用RedlinkUserData类。可以在以下位置访问
Redlink.user
您可以更改以下每个数据字段
- 电子邮件
String
- 电话
String
- 姓氏
String
- 名字
String
- 自定义参数
[String: Any]
- 其中Any
是String
、Int
、Bool
或Date
。任何其他类型的值都将被忽略并自动删除
验证
电子邮件
需要有效的电子邮件格式电子邮件
、公司名称
、姓氏
、名字
最多可包含64个长度字符
更改用户数据后,您必须手动保存它。为此,请调用
func saveUser()
更新用户数据的完整示例
func updateUser() {
let userData = Redlink.user
userData.email = "[email protected]"
userData.firstName = "Redlink"
userData.customParameters = [
"myKey": "myValue"
]
userData.saveUser()
}
还有可能删除所有存储的用户数据。要这样做,请调用
Redlink.user.removeUser()
如果你想取消用户订阅Redlink推送通知服务,你也可以在删除用户时使用额外的参数,如下所示
Redlink.user.removeUser(deletePushToken: true)
当用户注销且不想发送通知时,您可以使用该方法。要使当前用户的设备重新接收推送通知,您需要调用
Redlink.user.saveUser()
分析
要跟踪自定义用户事件,请使用RedlinkAnalytics
类。它可以在以下位置访问
Redlink.analytics
每个事件通过EventName
进行标识。为了跟踪一个事件使用
Redlink.analytics.trackEvent(withName: "event_name")
您也可以为事件提供额外的参数
Redlink.analytics.trackEvent(withName: "event_name", parameters: [
"myKey": "myValue"
])
参数类型为[String: Any]
- 其中 Any
是 String
、Int
、Bool
或 Date
。任何其他类型的值都将被忽略并自动删除。
验证
EventName
最多可包含64个长度字符- 参数
key
最多可包含64个长度字符
除了参数外,您还可以注入作为有效JSON字符串的userData
Redlink.analytics.trackEvent(withName: "event_name", userData: "{\"foo\":\"bar\"}")
深度链接
深度链接使用官方的Apple SDK。为了处理接收到的URL,请使用
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool
请记住注册您自定义的URL方案。您可以在官方文档中找到更多信息。
高级配置
RedlinkPush自定义配置
除了标准配置,在Redlink框架自动执行所有必要初始化的情况下,您还可以手动配置框架。
在AppDelegate中初始化RedlinkPush时,您可以使用具有默认选项的RedlinkPushOptions
RedlinkPushOptions.default()
或者您可以创建具有自定义配置的RedlinkPushOptions
实例
RedlinkPushOptions(authorizationOptions: RedlinkPushAuthorizationOptions, useAutomaticConfiguration: Bool)
默认情况下,useAutomaticConfiguration
设置为true,这意味着所有重要的iOS事件,如APNS令牌注册、接收推送通知等,都由Redlink框架(使用方法交换)自动处理。
如果将useAutomaticConfiguration
设置为false,则需要手动将所有必要信息注入到Redlink框架中。在这种情况下,您对框架的控制更多,但需要在以下类和方法中添加一些额外的代码。
1. AppDelegate
您需要在Redlink.push
中调用这些方法
func didRegisterForRemoteNotifications(with deviceToken: Data)
func didFailToRegisterForRemoteNotifications(with error: Error)
所需更改示例
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Redlink.push.didRegisterForRemoteNotifications(with: deviceToken)
}
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
Redlink.push.didFailToRegisterForRemoteNotifications(with: error)
}
2. UNUserNotificationCenter
您需要在Redlink.push
中调用这些方法
func willPresentNotification(_ notification: UNNotification)
func didReceiveNotificationResponse(response: UNNotificationResponse)
willPresentNotification
为您提供了更改当前通知的UNNotificationPresentationOptions
的机会。默认情况下,Redlink对所有通知使用[.alert]
。
为了使其成为可能,请在您的 AppDelegate
实现中遵循 UNUserNotificationCenterDelegate
协议,如下所示
UNUserNotificationCenter.current().delegate = self
所需更改示例
extension AppDelegate: UNUserNotificationCenterDelegate {
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
completionHandler(Redlink.push.willPresentNotification(notification, presentationOptions: []))
}
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
Redlink.push.didReceiveNotificationResponse(response: response)
}
}
额外信息
为了接收有关通知的更多额外信息,可以在 RedlinkPush
中设置自定义代理(RedlinkPushDelegate
)
Redlink.push.delegate = self
代理有 4 个可选方法,每个方法都有一个带有所有通知有效负载数据的 userInfo
参数。
推送通知动作
动作可以通过与通知(点击动作)或通知动作按钮进行交互来调用。动作始终首先打开应用程序,然后执行预期动作
每个动作都有四种动作类型之一
BROWSER
- 打开 Safari 浏览器
WEBVIEW
- 打开 RedlinkWebViewController
,默认情况下,它使用来自 UIApplication.shared.keyWindow
的当前可见控制器来执行展示
DEEPLINK
- 使用给定的 URL 执行 UIApplication.shared.open
NONE
- 不进行任何操作(通知消失)
示例应用程序
我们提供了示例应用程序,简单展示 Redlink 的能力。这还将向您展示如何在项目中配置框架是多么简单。请检查 示例
目录以获取相关信息。