Freshchat iOS SDK 통합 단계


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''
end


Objective 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)


Note:
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를 사용하여 설정됩니다.


Note: 외부 ID는 사용자에 대해 설정된 후 변경할 수 없습니다.
  • 복원 ID - 이는 현재 사용자에 대해 Freshchat에 의해 생성되며, 외부 ID가 설정된 경우 언제든지 [FreshchatUser sharedInstance].restoreID API를 사용하여 검색할 수 있습니다. 


Note: 복원 ID는 백엔드에 저장하고 대화를 복원하기 위해 검색할 수 있는 로직을 구현할 수 있습니다.

앱은 동일한 디바이스 또는 다른 디바이스 및 플랫폼에서 세션 간 대화를 계속하기 위해 Freshchat SDK에 외부 ID와 복원 ID의 조합을 저장합니다. 



Note: 알림은 한 번에 하나의 모바일 디바이스에서만 지원됩니다. 현재는 마지막으로 복원된 디바이스 또는 마지막으로 업데이트된 푸시 토큰이 있는 디바이스입니다.



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를 사용하여 사용자가 셀프 헬프 섹션에서 올 때 다른 주제 세트를 표시할 수도 있습니다.


Note: 일치하지 않는 주제의 경우 사용자는 기본 주제로 리디렉션됩니다.


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)")
        }        
    }


Note: SDK v1.5.0부터 읽지 않은 메시지 수 이벤트 이름이 FRESHCHAT_UNREAD_MESSAGE_COUNT에서 FRESHCHAT_UNREAD_MESSAGE_COUNT_CHANGED로 변경되었습니다.


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)
Note: 태그로 기사를 필터링할 때, 기사가 속한 카테고리의 태그도 적용됩니다.


4.2.3 FAQ에서 "문의하기" 클릭 시 표시되는 주제를 태그로 필터링


FAQ 화면에서 사용자가 "문의하기"를 클릭할 때 특정 용어로 태그된 주제만 필터링하여 표시하려면 showFAQs() API에 전달된 FAQOptions 인스턴스에서 filterContactUsByTags API를 사용하세요.


Note: FAQ 흐름 내에서 "문의하기"의 기본 동작은 showConversations()를 호출하는 것과 동일합니다. 즉, filterContactUsByTags API에 태그를 전달하여 주제를 필터링하지 않는 한 "모든 사용자에게 표시"로 표시된 모든 주제를 표시합니다.



Objective C

FAQOptions *options = [FAQOptions new];
[options filterContactUsByTags:@[@"filter_tags"]
withTitle:"Filtered_Message_Us_View_title"];
[[Freshchat sharedInstance]showFAQs:self withOptions:options];

이 문서가 도움이 되었나요?

Freshchat AI 도우미

Freshchat iOS SDK 통합 단계

AI 어시스턴트 초기화 중...