Freshworks iOS SDK
"适应销售和客户参与团队的现代消息软件 FreshworksSDK FreshworksSDK。"
安装
可以通过在 podfile 中指定以下内容使用 cocoapods 整合 Freshworks iOS SDK
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '14.0'
target 'Your project target' do
pod 'FreshworksSDK'
end
文档
初始化
在 Appdelegate 的 didFinishLaunchingWithOptions 中(调用 Freshworks 初始化)
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
Freshworks.shared.initializeFreshworksSDK(with: SDKConfig(source: "JS-Path", appID: "AppID", appKey: "AppKey", domain: "Mobile-specific-domain"))
registerNotifications() // For notification related, check PushNotification section at the last
return true
}
JS-Path
==> 管理设置 -> 网络 -> 网页小部件 -> 选择所需的小部件 -> 点击嵌入 -> 在嵌入代码下使用 src
JS-Path AppId, AppKey
==> 管理设置 -> 移动SDK -> 在Appkeys Domain
==> 管理设置 -> 聊天移动应用程序 -> 唯一域名ID
用户创建和恢复ID
- 需要监听
已创建用户
和恢复ID
。 - 监听器名称 ->
FRESHWORKS_USER_CREATED
和FRESHWORKS_USER_RESTORE_ID_GENERATED
- 实现
NotificationCenter.default.addObserver(self, selector: #selector(self.onUserCreated(_:)), name: Notification.Name(FRESHWORKS_USER_CREATED), object: nil) NotificationCenter.default.addObserver(self, selector: #selector(self.onRestoreIdReceived(_:)), name: Notification.Name(FRESHWORKS_USER_RESTORE_ID_GENERATED), object: nil)
@objc func onUserCreated(_ notification: NSNotification) { print("User created") print(notification.object ?? "") } @objc func onRestoreIdReceived(_ notification: NSNotification) { print("RestoreId Generated") print(notification.object ?? "") }
用户
-
为了创建/更新/设置用户,请以下文作为参考。(customProperties -> Keys 需要在门户中创建后才能使用)。
这只能在用户创建后使用
Freshworks.shared.setUserDetails(firstName: "UserFirstName", lastName: "UserLastName", email: "[email protected]", phone: "9876543210", phoneCountry: "+91", customProperties: ["cf_custom_field_name": "field value"])
注意:对于启用JWT的帐户,更新用户属性将通过JWT有效负载完成。请参阅下面的 'JWT' 部分。
-
为用户设置标识符
Freshworks.shared.identifyUser(externalId: "externalId")
-
恢复现有用户
Freshworks.shared.identifyUser(externalId: "externalId", restoreId: "restoreId")
-
获取当前用户信息
Freshworks.shared.getUser { [weak self] user in print(user) }
-
为了重置用户
Freshworks.shared.resetUser()
启动支持体验
注意:self --> 当前ViewController
-
对话
Freshworks.shared.showConversations(self)
-
常见问题解答
Freshworks.shared.showFAQs(self)
-
按对话标签筛选
在创建对话时添加标签来自定义您的对话。标签帮助在 freshworksDK 上过滤和显示特定的对话。为了实现,在相关对话的 showConversations 公共API调用中传递标签。
Freshworks.shared.showConversations(self, convTags: ["Conversation tags applicable"])
-
按常见问题解答标签筛选
在创建常见问题解答时添加标签来自定义。标签有助于在 FreshworksSDK 上过滤和显示特定的常见问题解答。为了实现,在 showFAQs 公共API调用中包含 faqTags。根据具体要求使用 filterType(类别、文章或无)。
Freshworks.shared.showFAQs(self, faqTags: FAQTags(tags: ["FaqTags applicable"], filterType: "FAQFilterType(category or article or none)"))
-
并行对话
在Freshchat中,启用同一主题的并行对话。虽然支持多个主题,但在单个主题上启动并行对话曾经是一个挑战。例如,在电子商务环境中,管理各种交易的支付支持可能会很繁琐。我们的解决方案“并行对话”允许在同一主题上有多个对话线程。要实现这一点,请使用FreshworksSDK提供独特的conversationReferenceId。客户可以使用API showConversation。支持代表会指导用户配置独特的conversationReferenceId,以实现无缝的主题特定对话。
Freshworks.shared.showConversation(conversationReferenceId: "<conv ref id>", topicName: "<topicName>") Freshworks.shared.showConversation(conversationReferenceId: "1", topicName: "Test Topic")
推送通知
如果允许,请请求通知权限并将令牌注册到Freshworks。
extension AppDelegate: UNUserNotificationCenterDelegate {
func registerNotifications() {
UNUserNotificationCenter.current().delegate = self
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in
// Handle authorization status
if granted {
DispatchQueue.main.async {
UIApplication.shared.registerForRemoteNotifications()
}
}
}
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Freshworks.shared.setPushRegistrationToken(deviceToken)
}
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
let userInfo = notification.request.content.userInfo
if Freshworks.shared.isFreshworksNotification(userInfo) {
Freshworks.shared.handleRemoteNotification(userInfo) {
completionHandler( [.banner, .badge, .sound])
}
} else {
completionHandler( [.banner, .badge, .sound])
}
}
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
if Freshworks.shared.isFreshworksNotification(response) {
Freshworks.shared.handleRemoteNotification(response) {
completionHandler()
}
} else {
completionHandler()
}
}
}
多语言支持(区域变更)
FreshworksSDK提供多语言支持。以下表格提供了所有支持的语言及其键。
语言代码 | 语言 |
---|---|
ar | 阿拉伯语(右对齐语言) |
en | 英语 |
ca | 加泰罗尼亚语 |
zh-HANS | 简体中文 |
zh-HANT | 繁体中文 |
cs | 捷克语 |
da | 丹麦语 |
nl | 荷兰语 |
de | 德语 |
et | 爱沙尼亚语 |
fi | 芬兰语 |
fr | 法语 |
hu | 匈牙利语 |
id | 印度尼西亚语 |
it | 意大利语 |
ko | 韩语 |
lv | 拉脱维亚语 |
nb | 挪威语 |
pl | 波兰语 |
pt | 葡萄牙语 |
pt-BR | 巴西葡萄牙语 |
ro | 罗马尼亚语 |
ru | 俄语 |
sk | 斯洛伐克语 |
sl | 斯洛文尼亚语 |
es | 西班牙语 |
es-LA | 拉美西班牙语 |
sv | 瑞典语 |
th | 泰语 |
tr | 土耳其语 |
uk | 乌克兰语 |
vi | 越南语 |
-
小部件区域变更
语言的选择基于优先级,下面将进行说明。
- 配置的语言:在初始化freshworksSDK或调用changeWidgetLanguage公共API时指定的语言具有最高优先级。例如,在下面的代码中,key locale用于在初始化freshworksSDK或调用changeWidgetLanguage公共API时设置语言。
Freshworks.shared.initializeFreshworksSDK(with: SDKConfig(source: "JS-Path", appID: "AppID", appKey: "AppKey", domain: "Mobile-specific-domain", locale: "en")) or use below after initialization Freshworks.shared.changeWidgetLanguage(locale: "ar")
- 默认语言:默认语言优先级最低,在您的Freshchat账户中设置。这将是您Freshchat账户中指定的主要语言。
-
用户区域更改
如果希望Freshchat小部件的语言根据用户的选定动态更改,例如语言下拉菜单,则在更改下拉菜单时必须设置区域。在这种情况下,您必须使用以下代码来指定语言。请参阅以下示例代码以获得更好的清晰度。
Freshworks.shared.changeUserLanguage(locale: "en")
跟踪用户事件
- Freshchat允许您跟踪用户执行的所有事件。这可以是一切,从更新他们的个人资料图片到将5个项目添加到购物车。您可以在与用户互动时使用这些事件作为上下文。事件还可用于设置触发消息或对用户进行营销活动的细分。
Freshworks.shared.trackUserEvents(name: "eventName", payload: ["eventName":"eventValue"])
JWT身份验证
- 启用基于JSON Web Token的用户身份验证
Freshchat使用JSON Web Token (JWT)仅允许经过身份验证的用户通过Freshchat消息传递与您发起对话。Freshchat会发送回调(以及用户的身份验证状态),让您知道有关消息传递和用户身份验证状态的任何事件。
步骤1:使用公钥和私钥创建无UUID的JWT。
步骤2:使用上面的JWT初始化SDK。
Freshworks.shared.initializeFreshworksSDK(with: SDKConfig(
source: "JS-Path", appID: "AppID", appKey: "AppKey", domain: "Mobile-specific-domain", jwtAuthToken: "jwt-token-without-uuid"
))
注意:如果您的账户已启用JWT,则在SDK初始化时必须传递JWT。
步骤3:将'YourClass'设置为接收用户状态更改更新的代理。
Freshworks.shared.setJWTDelegate(self) // 'self' is the instance of <YourClass>'
步骤4:实现'FreshworksJWTDelegate'函数以接收用户状态更改更新。接收到用户状态更改更新后,如果用户未经过身份验证,则从'Freshworks.shared.getUUID { uuid in }'获取UUID。
extension <YourClass>: FreshworksJWTDelegate {
func userStateChanged(_ userState: UserState) {
switch userState {
case .authenticated, .created, .loaded, .identified, .restored:
break
case .unloaded, .notLoaded, .notCreated, .notAuthenticated:
fetchUUID()
@unknown default:
break
}
}
func fetchUUID() {
Freshworks.shared.getUUID { [weak self] uuid in
// Use this uuid to generate a valid JWT
}
}
}
步骤5:使用第4步中接收到的UUID创建一个有效的JWT并将其更新。
Freshworks.shared.updateUser("<valid-JWT>")
注意:上述API(Freshworks.shared.updateUser)还将负责更新用户详细信息。在创建JWT时,需要更新的详细信息应添加到负载中。
Beta Readme Note
问题: 如果 SDK 未初始化,则用户属性不会更新。
解决方案: 要成功更新用户详情,请确保 SDK 正确初始化。如果用户详情检索失败,则可能是 SDK 尚未初始化。在尝试更新用户信息之前,请确保初始化。我们感谢您对我们改善体验的努力表示理解和支持。
许可协议
FreshworksSDK是以商业许可证发布的。请参阅许可协议获取详细信息。