FreshworksSDK 0.0.2-beta

FreshworksSDK 0.0.2-beta

Shahebaz ShaikhAjithram 维护。



FreshworksSDK 0.0.2-beta

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_CREATEDFRESHWORKS_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 越南语
  • 小部件区域变更

    语言的选择基于优先级,下面将进行说明。

    1. 配置的语言:在初始化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")
    1. 默认语言:默认语言优先级最低,在您的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是以商业许可证发布的。请参阅许可协议获取详细信息。

支持

[email protected]

支持门户