Freshchat SDK는 arm64 아키텍처를 위한 슬라이스를 포함하고 있으며 iOS 8.0 이상만 지원합니다. 아래 단계를 따라 Freshchat을 iOS 앱에 통합하세요.
APP ID, APP Key 및 도메인 가져오기
귀하의 Freshchat 계정은 고유한 APP ID 및 APP Key와 연결되어 있으며, 이는 모바일 SDK를 Freshchat과 통합하는 데 사용됩니다.
Admin > Mobile SDK로 이동합니다. 여기에서 APP ID, APP Key, 및 도메인을 찾을 수 있습니다.

1. Freshchat SDK를 프로젝트에 추가
Podfile을 업데이트하여 Freshchat을 프로젝트에 단일 단계로 추가하세요.
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
target 'Your project target' do
target 'Your project target' do
pod 'FreshchatSDK''
endObjective C
AppDelegate.m 파일에 "FreshchatSDK.h"를 가져옵니다.
Swift
브리징 헤더 파일에 "FreshchatSDK.h"를 가져옵니다.
또는, cocoapods를 사용하지 않는 경우 여기에서 Freshchat SDK를 추가할 수 있습니다 (https://github.com/freshworks/freshchat-ios) 그런 다음 FreshchatSDK.xcframework 폴더를 프로젝트에 드래그 앤 드롭합니다. 드래그 앤 드롭에 필요한 프레임워크 추가는 다음과 같습니다 -
"Foundation", "AVFoundation", "AudioToolbox", "CoreMedia", "CoreData", "ImageIO", "Photos", "SystemConfiguration", "Security", "WebKit", "CoreServices"
프로젝트 설정, 일반 > 빌드 설정 > 기타 링커 플래그에 "-all_load", "-objC" 플래그를 설정하세요.
2. SDK 초기화
Freshchat을 초기화하려면 AppDeleage.m 또는 ObjC 및 Swift의 경우 각각 AppDelegate의 didFinishLaunchingWithOptions에 다음 스니펫을 붙여넣으세요.
Objective C
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)
([[[UIDevice currentDevice] systemVersion]
compare:v
options:NSNumericSearch] != NSOrderedAscending)
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)
launchOptions
{
//Initialize Freshchat
FreshchatConfig *config = [[FreshchatConfig alloc]initWithAppID:@"YOUR-APP-ID"
andAppKey:@"YOUR-APP-KEY"
config.domain = @"YOUR-DOMAIN
[[Freshchat sharedInstance] initWithConfig:conf;
return
}Swift
func application(_ application: UIApplication,
didFinishLaunchingWithOptions
launchOptions:
[UIApplicationLaunchOptionsKey: Any]?) -> Bool
{
let freshchatConfig:FreshchatConfig = FreshchatConfig.init(appID: "YOUR-APP-ID", andAppKey: "YOUR-APP-KEY")
config.domain = "YOUR-DOMAIN"
Freshchat.sharedInstance().initWith(freshchatConfig)
return true
}2.1. 구성 옵션 초기화
초기화 시 사진 메시징과 같은 기능을 켜거나 끌 수 있습니다. initWithConfig: 메서드를 호출하기 전에 아래 스니펫을 사용하여 필요한 대로 Freshchat 기능을 구성하세요.
Objective C
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)
([[[UIDevice currentDevice] systemVersion] compare:v
options:NSNumericSearch] != NSOrderedAscending)
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
/* Initialize Freshchat*/
FreshchatConfig *config = [[FreshchatConfig alloc]initWithAppID:@"YOUR-APP-ID"
andAppKey:@"YOUR-APP-KEY"];
config.domain = @"YOUR-DOMAIN";
config.gallerySelectionEnabled = YES;
// set NO to disable picture
selection for messaging via gallery
config.cameraCaptureEnabled = YES;
// set NO to disable picture selection for messaging via camera
config.teamMemberInfoVisible = YES;
// set to NO to turn off showing team member avatar. To customize the avatar shown, use the theme file
config.showNotificationBanner = YES;
// set to NO if you don't want to show the in-app notification banner upon receiving a new message while the app is open
config.responseExpectationVisible = YES;
//set NO to hide it if you want to hide the response expectation for the Topic
[[Freshchat sharedInstance] initWithConfig:config];
return YES;
}Swift
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions:
[UIApplicationLaunchOptionsKey: Any]?) -> Bool
{
let freshchatConfig:FreshchatConfig = FreshchatConfig.init(appID: "YOUR-APP-ID", andAppKey: "YOUR-APP-KEY")
config.domain = "YOUR-DOMAIN"
freshchatConfig.gallerySelectionEnabled = true;
// set FALSE to disable picture selection for messaging via gallery
freshchatConfig.cameraCaptureEnabled = true;
// set FALSE to disable picture selection for messaging via camera
freshchatConfig.teamMemberInfoVisible = true;
// set to FALSE to turn off showing a team member avatar. To customize the avatar shown, use the theme file
freshchatConfig.showNotificationBanner = true;
// set to FALSE if you don't want to show the in-app notification banner upon receiving a new message while the app is open
freshchatConfig.responseExpectations = true;
//set to FALSE if you want to hide the response expectations for the Topics
Freshchat.sharedInstance().initWith(freshchatConfig)
return true
}3. 사용자 정보
3.1 사용자 정보 업데이트
지원 상담원이 사용자와 메시지를 주고받을 때 사용자에 대한 더 많은 컨텍스트를 제공하기 위해 언제든지 기본 사용자 정보를 얻을 수 있습니다.
/*
* 다음 세 가지 방법은 사용자를 식별하는 데 사용됩니다.
* 이러한 사용자 속성은 Freshchat 웹 대시보드에서 볼 수 있습니다.
*/
Objective C
// Create a user object FreshchatUser *user = [FreshchatUser sharedInstance]; // To set an identifiable first name for the user user.firstName = @"John"; // To set an identifiable last name for the user user.lastName = @"Doe"; //To set user's email id user.email = @"john.doe.1982@mail.com"; //To set user's phone number user.phoneCountryCode=@"00"; user.phoneNumber = @"9999999999"; [[Freshchat sharedInstance] setUser:user];
Swift
// Create a user object let user = FreshchatUser.sharedInstance(); // To set an identifiable first name for the user user?.firstName = "John" // To set an identifiable last name for the user user?.lastName = "Doe" //To set user's email id user?.email = "john.doe.1982@mail.com" //To set user's phone number user?.phoneCountryCode="00" user?.phoneNumber = "9999999999" Freshchat.sharedInstance().setUser(user)
3.2 사용자 속성(메타 데이터) 업데이트
앱의 사용자 및 이벤트에 대한 추가 메타데이터를 캡처하고 전송할 수 있으며, 이는 나중에 메시지를 푸시할 사용자 세그먼트를 만드는 방법이 됩니다.
Objective C
//You can set custom user properties for a particular user [[Freshchat sharedInstance] setUserPropertyforKey:@"customerType" withValue:@"Premium"]; //You can set user demographic information [[Freshchat sharedInstance] setUserPropertyforKey:@"city" withValue:@"San Bruno"]; //You can segment based on where the user is in their journey of using your app [[Freshchat sharedInstance] setUserPropertyforKey:@"loggedIn" withValue:@"true"]; //You can capture a state of the user that includes what the user has done in your app [[Freshchat sharedInstance] setUserPropertyforKey:@"transactionCount" withValue:@"3"];
Swift
//You can set custom user properties for a particular user
Freshchat.sharedInstance().setUserPropertyforKey("customerType", withValue: "Premium")
//You can set user demographic information
Freshchat.sharedInstance().setUserPropertyforKey("city", withValue: "San Bruno")
//You can segment based on where the user is in their journey of using your app
Freshchat.sharedInstance().setUserPropertyforKey("loggedIn", withValue: "true")
//You can capture a state of the user that includes what the user has done in your app
Freshchat.sharedInstance().setUserPropertyforKey("transactionCount", withValue: "3")3.3 타임라인에 사용자 이벤트 기록
사용자 이벤트를 추적하면 애플리케이션의 사용자에 대한 더 많은 통찰력과 컨텍스트를 얻을 수 있습니다. 사용자 행동 및 실패/오류 사례와 같은 이벤트는 이 API를 사용하여 추적할 수 있습니다. 추적된 이벤트는 상담원 측의 이벤트 타임라인에 나열됩니다.
Objective C
[[Freshchat sharedInstance]
trackEvent:"Event_Name" withProperties:PropertiesDictionary];Swift
Freshchat.sharedInstance()?.trackEvent("Event_Name", withProperties: PropertiesDictionary)1. Freshchat은 계정당 121개의 고유 이벤트만 허용합니다.
2. 이벤트 이름은 문자열 값(최대 32자)을 허용합니다.
3. 속성 키 이름은 문자열 유형이어야 합니다(최대 32자).
4. 속성 값은 모든 기본 객체 유형일 수 있습니다(최대 256자).
5. Freshchat은 이벤트당 최대 20개의 속성을 전송할 수 있습니다.
3.4 사용자 데이터 재설정
로그아웃 시 또는 앱에서 사용자 작업에 따라 적절하다고 판단될 때 resetUser API를 호출하여 사용자 데이터를 재설정합니다.
Objective C
[[Freshchat sharedInstance] resetUserWithCompletion:^
{
//Completion block code here
}];Swift
Freshchat.sharedInstance().resetUser(completion:
{
() in
//Completion code
})3.5 브라우저/디바이스 간 사용자 대화 복원
디바이스/세션/플랫폼 간에 채팅 메시지를 유지하려면 모바일 앱이 동일한 외부 ID 및 복원 ID 조합을 사용자에게 전달해야 합니다. 이를 통해 사용자는 Android, iOS, 웹 등 지원되는 모든 플랫폼에서 대화를 원활하게 이어갈 수 있습니다.
- 외부 ID - 이는 이상적으로는 사용자 ID 또는 이메일 ID 등과 같은 시스템의 사용자에 대한 고유 식별자여야 하며 identifyUserWithExternalID: API를 사용하여 설정됩니다.
- 복원 ID - 이는 현재 사용자에 대해 Freshchat에 의해 생성되며, 외부 ID가 설정된 경우 언제든지 [FreshchatUser sharedInstance].restoreID API를 사용하여 검색할 수 있습니다.
앱은 동일한 디바이스 또는 다른 디바이스 및 플랫폼에서 세션 간 대화를 계속하기 위해 Freshchat SDK에 외부 ID와 복원 ID의 조합을 저장합니다.
Objective C
//To set external id:
[[Freshchat sharedInstance] identifyUserWithExternalID:@"externalId" restoreID:nil];
//To lookup and restore user by external id and restore id:
[[Freshchat sharedInstance] identifyUserWithExternalID:@"externalId" restoreID: @"restoreId"];
//To retrieve the restore id:
[FreshchatUser sharedInstance].restoreID;
//To listen to restore id generated event:
// Register for local notification
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(userRestoreIdReceived:)
name:FRESHCHAT_USER_RESTORE_ID_GENERATED
object :nil];
- (void) userRestoreIdReceived:(NSNotification *) notification{
NSLog(@"Your restore id is - %@",[FreshchatUser sharedInstance].restoreID);
NSLog(@"Your query external id is - %@",[FreshchatUser sharedInstance].externalID);
}
//Unregister
[[NSNotificationCenter defaultCenter]
removeObserver:self
name:FRESHCHAT_USER_RESTORE_ID_GENERATED object:nil];Swift
Freshchat.sharedInstance().identifyUser(withExternalID: "externalId", restoreID: nil)
//To lookup and restore user by external id and restore id:
Freshchat.sharedInstance().identifyUser(withExternalID: "externalId", restoreID: "restoreId")
//To retrieve the restore id:
FreshchatUser.sharedInstance().restoreID
//To listen to restore id generated event:
// Register for local notification
NotificationCenter.default.addObserver(self,selector:
#selector(userRestoreIdReceived),name: NSNotification.Name(rawValue: FRESHCHAT_USER_RESTORE_ID_GENERATED),object: nil)
func userRestoreIdReceived()
{
print("Your restore id is - " FreshchatUser.sharedInstance().restoreID)
print("Your query external id is - " FreshchatUser.sharedInstance().externalID)
}
//Unregister local notification
NotificationCenter.default.removeObserver(FRESHCHAT_USER_RESTORE_ID_GENERATED)4. 지원 경험 시작
다음 스니펫을 사용하여 앱의 호출 작업에서 FAQ 또는 대화 기반 지원 경험을 시작하세요. 호출 작업 또는 진입점은 화면 버튼이나 메뉴 항목일 수 있습니다.
4.1 대화
언제든지 Freshchat의 대화 목록 또는 단일 대화 오버레이를 불러오려면 showConversations: API를 사용해야 합니다.
예를 들어, 버튼을 눌러 피드백 오버레이를 불러오려면 ViewController 클래스의 대상 메서드는 다음과 같을 수 있습니다.
Objective C
- (IBAction)showFeedbackOverlay:(id)sender
{
[[Freshchat sharedInstance] showConversations:self];
} Swift
func presentConversation(sender: Any)
{
Freshchat.sharedInstance().showConversations(self)
}4.1.1 주제 필터링
다른 유형의 사용자 또는 다른 화면에서 태그를 사용하여 주제를 필터링하여 다른 주제 세트를 표시할 수 있습니다. 이는 ConversationsOptions() 메서드에 전달하여 구성할 수 있습니다.
Objective C
ConversationOptions *options = [ConversationOptions new]; [options filterByTags:@[ @"all", @"paiduser" ] withTitle:@"Filter_View_Title"]; [[Freshchat sharedInstance] showConversations:self withOptions: options];
Swift
let options = ConversationOptions.init() let tags: [String] = ["all","paidUser"] //Your filter tags options.filter(byTags: tags, withTitle: "Filter_View_Title") Freshchat.sharedInstance().showConversations(self, with: options)
contactUsTags를 사용하여 사용자가 셀프 헬프 섹션에서 올 때 다른 주제 세트를 표시할 수도 있습니다.
4.1.2 읽지 않은 메시지 수
사용자에게 받은 편지함에 읽지 않은 메시지가 있음을 알리고 싶다면 읽지 않은 메시지 수를 검색하여 표시할 수 있습니다. 블록은 사용자의 읽지 않은 메시지 수를 나타내는 정수를 반환합니다.
Objective C
[[Freshchat sharedInstance]unreadCountWithCompletion:^(NSInteger count)
{
NSLog(@"your unread count : %d", (int)count);
}];Swift
Freshchat.sharedInstance().unreadCount
{
(count:Int) -> Void in
print("Unread count (Async) :\(count)")
}앱은 또한 앱이 열려 있을 때 읽지 않은 메시지 수의 변경 사항을 수신 대기할 수 있습니다.
Objective C
[[NSNotificationCenter defaultCenter]addObserverForName:FRESHCHAT_UNREAD_MESSAGE_COUNT_CHANGED
object:nil queue:nil usingBlock:^(NSNotification *note)
{
[[Freshchat sharedInstance]unreadCountWithCompletion:^(NSInteger count)
{
NSLog(@"your unread count : %d", (int)count);
}];
}];Swift
// Register for notification
NotificationCenter.default.addObserver(self, selector:
#selector(self.methodOfReceivedNotification(notification:)), name:
Notification.Name(FRESHCHAT_UNREAD_MESSAGE_COUNT_CHANGED), object: nil)
//Handling method -
func methodOfReceivedNotification(notification: Notification)
{
Freshchat.sharedInstance().unreadCount { (count:Int) -> Void in
print("Unread count (Async) :\(count)")
}
}4.2. FAQ
언제든지 Freshchat의 FAQ 오버레이를 불러오려면 showFAQs() API를 사용하세요.
예를 들어, 버튼을 눌러 피드백 오버레이를 불러오려면 ViewController 클래스의 대상 메서드는 다음과 같을 수 있습니다.
Objective C
- (IBAction)showFeedbackOverlay:(id)sender
{
[[Freshchat sharedInstance] showFAQs:self];
}Swift
func presentFAQ(sender: Any)
{
Freshchat.sharedInstance().showFAQs(self)
}4.2.1 FAQ 옵션
FAQ 흐름의 사용자 정의는 showFAQs() API에 전달된 FaqOptions 인스턴스에서 관련 옵션을 지정하여 달성할 수 있습니다.
Objective-C :
FAQOptions *options = [FAQOptions new];
options.showFaqCategoriesAsGrid = YES; // Show FAQ in grid formal, NO to list view
options.showContactUsOnFaqScreens = YES; // Show chat option from FAQ section
options.showContactUsOnFaqNotHelpful = YES; // Show contact us in article detail when user select Not Helpful
options.showContactUsOnAppBar = YES; // Show chat option over navigation bar in FAQ category view or article list view
[[Freshchat sharedInstance]showFAQs:self withOptions:options];
Swift :
let options = FAQOptions.init()
options.showFaqCategoriesAsGrid = true // Show FAQ in grid formal, false to list view
options.showContactUsOnFaqScreens = true // Show chat option from FAQ section
options.showContactUsOnFaqNotHelpful = true // Show contact us in article detail when user select Not Helpful
options.showContactUsOnAppBar = true // Show chat option over navigation bar in FAQ category view or article list view
Freshchat.sharedInstance().showFAQs(self, with: options)4.2.2 FAQ 필터링
특정 화면에서 또는 로그인한 고객과 방문자와 같은 일부 사용자에게만 특정 용어로 태그된 FAQ만 필터링하여 표시할 수 있습니다. 이러한 태그는 대시보드에서 설정할 수 있습니다.
예를 들어, 결제 실패와 관련된 FAQ를 해당 페이지에서만 표시하려면 특정 FAQ에 "결제" 및 "청구" 태그를 지정할 수 있습니다. 그런 다음 필터링하여 사용자에게 표시할 수 있습니다.
기사로 FAQ 필터링
Objective C
FAQOptions *options = [FAQOptions new]; [options filterByTags:@[ @"payment", @"billing" ] withTitle:@"Filtered_View_title" andType: ARTICLE]; [[Freshchat sharedInstance]showFAQs:self withOptions:options];
Swift
let options = FAQOptions.init() let tags: [String] = ["payment","billing"] options.filter(byTags: tags, withTitle:"Filtered_View_title", andType :ARTICLE) Freshchat.sharedInstance().showFAQs(self, with: options)
카테고리로 FAQ 필터링
카테고리도 태그로 필터링할 수 있습니다. 이렇게 하면 카테고리(해당 카테고리 아래에 기사가 나열됨)의 필터링된 보기가 표시됩니다. 이는 다른 고객(예: 유료 고객 대 무료 고객)에게 다른 카테고리 세트를 표시하는 데 유용합니다.
Objective C
FAQOptions *options = [FAQOptions new]; [options filterByTags:@[ @"payment", @"billing" ] withTitle:@"Filtered_View_Title" andType: CATEGORY]; [[Freshchat sharedInstance]showFAQs:self withOptions:options];
Swift
let options = FAQOptions.init() let tags: [String] = ["payment", "billing"] options.filter(byTags: tags, withTitle:"Filtered_View_Title", andType :CATEGORY) Freshchat.sharedInstance().showFAQs(self, with: options)
4.2.3 FAQ에서 "문의하기" 클릭 시 표시되는 주제를 태그로 필터링
FAQ 화면에서 사용자가 "문의하기"를 클릭할 때 특정 용어로 태그된 주제만 필터링하여 표시하려면 showFAQs() API에 전달된 FAQOptions 인스턴스에서 filterContactUsByTags API를 사용하세요.
Objective C
FAQOptions *options = [FAQOptions new]; [options filterContactUsByTags:@[@"filter_tags"] withTitle:"Filtered_Message_Us_View_title"]; [[Freshchat sharedInstance]showFAQs:self withOptions:options];
이 문서가 도움이 되었나요?같은 폴더의 문서