React Native SDK를 채팅에 통합하는 방법은?

채팅 설정

React Native SDK를 채팅에 통합하는 방법

사전 요구 사항

RN v0.60 이상은 Chat SDK v2.0.0부터 지원됩니다.

APP ID 및 APP Key 가져오기

귀하의 채팅 계정은 모바일 SDK를 채팅과 통합하는 데 사용되는 고유한 APP ID 및 APP Key와 연결되어 있습니다.

  1. 계정 소유자/관리자로 채팅 계정에 로그인합니다.
  2. 관리자 설정 > 채널 > 채팅 및 메시징 > 모바일 SDK로 이동합니다. 여기에서 APP ID와 APP Key를 찾을 수 있습니다.

1. 프로젝트에 Chat SDK 추가

Chat 노드 패키지 이름은 'react-native-freshchat-sdk'입니다.

React Native 프로젝트의 Package.json 파일에서 dependencies에 ”react-native-freshchat-sdk”: “{{latest-version}}”을 추가합니다.

최신 SDK 버전은 다음 링크를 참조하세요: https://www.npmjs.com/package/react-native-freshchat-sdk

1.1. iOS 설정

RN 버전 Chat 버전 단계
0.60+ 2.0.0+
  1. 아래 명령어를 실행하여 SDK를 자동 연결합니다.
  2. cd ios
    pod install
< 0.60 2.0.0+
  1. Podfile이 ios 프로젝트 디렉토리에 있는지 확인합니다. 없으면 ios 프로젝트 디렉토리 내에서 pod를 초기화하고 podfile에 React 종속성을 추가합니다. React 종속성은 이 표 아래에 제공됩니다.
  2. 다음 명령어를 사용하여 React Native Chat SDK를 연결합니다.
  3. react-native link react-native-freshchat-sdk
< 0.60 < 2.0.0
  1. 다음 명령어를 사용하여 React Native Chat SDK를 연결합니다.
  2. react-native link react-native-freshchat-sdk
  3. React Native 프로젝트의 ios 폴더로 이동합니다.
  4. Podfile에 아래와 같이 FreshchatSDK 항목을 추가합니다.
  5. target 'ProjectName' do
        pod 'FreshchatSDK', :path=> '../node_modules/react-native-freshchat-sdk/ios/FreshchatSDK.podspec'
    end
  6. iOS 디렉토리에서 pod install을 실행합니다.
0.60+ < 2.0.0 Chat SDK 2.0.0+만 RN v0.60+와 호환됩니다.

RN < 0.60 및 Chat SDK 2.0.0+의 React 종속성

# React Native 요구 사항
pod 'React', :path => '../node_modules/react-native', :subspecs => [
  'Core',
  'CxxBridge', # RN >= 0.47에 필요
  'DevSupport', # RN >= 0.43에 In-App Devmenu 활성화에 필요
  'RCTText',
  'RCTNetwork',
  'RCTWebSocket', # 디버깅에 필요
  'RCTAnimation', # FlatList 및 네이티브 UI 스레드에서 실행되는 애니메이션에 필요
  # 프로젝트에서 사용하려는 다른 서브스펙 추가
]
# RN >= 0.42.0을 사용하는 경우 Yoga를 명시적으로 포함
pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'
pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'

기존 Chat 통합을 Chat SDK 2.0.0+로 마이그레이션

  1. 다음 명령어를 사용하여 React 프로젝트에서 React Native Chat SDK의 연결을 해제합니다.
  2. react-native unlink react-native-freshchat-sdk
  3. iOS 프로젝트 내의 Podfile에서 다음 줄을 제거합니다.
  4. pod 'FreshchatSDK', :path=> '../node_modules/react-native-freshchat-sdk/ios/FreshchatSDK.podspec'
  5. 위의 표를 참조하여 요구 사항에 따라 단계를 선택합니다.

1.2. Android 설정

프로젝트 수준 build.gradle 파일에 maven { url "https://jitpack.io" }를 추가합니다.

allprojects {
    repositories {
        .....
        maven { url "https://jitpack.io" }
    }
}

RN 버전 < 0.60을 사용하는 경우 아래 명령어를 실행하세요.

react-native link react-native-freshchat-sdk

2. SDK 초기화

Chat SDK의 다른 기능을 호출하거나 사용하기 전에 Freshchat.init()을 앱 ID와 앱 키로 호출합니다. 앱의 런처/지원 화면 시작 시 init()을 호출하는 것을 강력히 권장합니다. Chat SDK는 init() 중에 구성 요소의 존재 여부를 확인하고 누락된 구성 요소가 감지되면 경고합니다. 다음 코드 스니펫에서 YOUR-APP-ID와 YOUR-APP-KEY를 실제 앱 ID와 앱 키로 대체하세요.

import { Freshchat, FreshchatConfig } from 'react-native-freshchat-sdk';
var freshchatConfig = new FreshchatConfig(APP_ID, APP_KEY);
Freshchat.init(freshchatConfig);

참고: Freshchat 계정이 Freshchat US 서버의 일부가 아닌 경우 서버 위치에 따라 도메인을 지정해야 합니다. 계정의 서버 위치를 확인하려면 지원 팀에 문의하세요.

다음은 서버 위치와 도메인 매핑 세부 정보입니다.

  • US2 - "https://msdk.us2.freshchat.com"
  • EU - "https://msdk.eu.freshchat.com"
  • AU - "https://msdk.au.freshchat.com"
  • IN - "https://msdk.in.freshchat.com"

샘플 코드:

freshchatConfig.setDomain("msdk.in.freshchat.com");

2.1 초기화 구성 옵션

초기화 전에 구성에서 카메라 캡처와 같은 기능을 활성화하거나 비활성화할 수 있습니다.

var freshchatConfig = new FreshchatConfig(APP_ID, APP_KEY);
freshchatConfig.teamMemberInfoVisible = true;
freshchatConfig.cameraCaptureEnabled = true;
freshchatConfig.gallerySelectionEnabled = true;
freshchatConfig.responseExpectationEnabled = true;
freshchatConfig.showNotificationBanner = true; //iOS 전용
freshchatConfig.notificationSoundEnabled = true; //iOS 전용
freshchatConfig.themeName = "CustomTheme.plist"; //iOS 전용
freshchatConfig.stringsBundle = "FCCustomLocalizable"; //iOS 전용
Freshchat.init(freshchatConfig);

3. 사용자 정보

3.1 사용자 정보 업데이트

지원 에이전트가 사용자와 메시지를 주고받을 때 사용자에 대한 더 많은 정보를 제공하기 위해 언제든지 기본 사용자 정보를 보낼 수 있습니다.

import { FreshchatUser } from 'react-native-freshchat-sdk';
var freshchatUser = new FreshchatUser();
freshchatUser.firstName = "John";
freshchatUser.lastName = "Doe";
freshchatUser.email = "johndoe@dead.man";
freshchatUser.phoneCountryCode = "+91";
freshchatUser.phone = "1234234123";
Freshchat.setUser(freshchatUser, (error) =>
{ console.log(error); }); 3.2 사용자 속성 업데이트 (메타 데이터) 앱 내 사용자와 이벤트에 대한 추가 메타데이터를 캡처하고 전송할 수 있으며, 이는 나중에 사용자에게 메시지를 푸시하기 위한 세분화 방법이 됩니다. var userPropertiesJson = { "user_type": "Paid", "plan": "Gold" } Freshchat.setUserProperties(userPropertiesJson, (error) => { console.log(error); }); 3.3 사용자 데이터 재설정 로그아웃 시 또는 앱 내 사용자 행동에 따라 적절하다고 판단될 때 resetUser API를 호출하여 사용자 데이터를 재설정합니다. Freshchat.resetUser(); 3.4 사용자 복원 기기/세션/플랫폼 간에 채팅 메시지를 유지하려면 모바일 앱이 동일한 외부 ID와 복원 ID 조합을 사용자에게 전달해야 합니다. 이를 통해 사용자는 Android, iOS 및 웹과 같은 지원 플랫폼에서 대화를 원활하게 이어갈 수 있습니다. 외부 ID - 이는 사용자 ID 또는 이메일 ID와 같은 시스템의 고유 식별자여야 하며 Freshchat.identifyUser() API를 사용하여 설정됩니다. 사용자가 설정한 후에는 변경할 수 없습니다. 복원 ID - 외부 ID가 설정된 경우 현재 사용자에 대해 Chat에서 생성되며 Freshchat.getUser().getRestoreId() API를 사용하여 언제든지 검색할 수 있습니다. 앱은 동일한 기기 또는 다른 기기 및 플랫폼에서 세션 간에 채팅 대화를 계속하기 위해 외부 ID와 복원 ID 조합을 저장하고 나중에 Chat SDK에 제공할 책임이 있습니다. 참고: 1. 사용자의 복원 ID는 일반적으로 사용자가 메시지를 보냈을 때만 생성됩니다. 2. 알림은 한 번에 하나의 모바일 기기에서만 지원되며 현재는 마지막으로 복원된 기기 또는 마지막으로 업데이트된 푸시 토큰이 있는 기기입니다. 외부 ID 설정하기 Freshchat.identifyUser("EXTERNAL_ID", null, (error) => { console.log(error); }); 복원 ID 검색하기 Freshchat.getUser((user) => { var restoreId = user.restoreId; console.log("restoreId: " + restoreId); }) 외부 ID와 복원 ID로 사용자 조회 및 복원하기 Freshchat.identifyUser("EXTERNAL_ID", "RESTORE_ID", (error) => { console.log(error); }); 복원 ID 생성 이벤트 수신 대기 복원 ID 생성은 비동기 프로세스입니다. 애플리케이션 수명 주기 동안 이 이벤트를 수신 대기해야 합니다. 일반적으로 사용자가 대화를 시작한 후에 생성이 발생합니다. 복원 ID 생성 이벤트 등록 Freshchat.addEventListener( Freshchat.EVENT_USER_RESTORE_ID_GENERATED, () => { console.log("onRestoreIdUpdated triggered"); Freshchat.getUser((user) => { var restoreId = user.restoreId; var externalId = user.externalId; console.log("externalId: " + externalId); console.log("restoreId: " + restoreId); }) } ); 3.5 채팅 사용자 ID 가져오기 getFreshchatUserId() API를 사용하여 사용자의 고유 식별자를 가져올 수 있습니다. Freshchat.getFreshchatUserId((data) => { console.log(data); }); 4. 지원 솔루션 시작하기 앱 내에서 FAQ 또는 대화 기반 지원 경험으로 진입하기 위해 아래의 스니펫을 사용하십시오. 진입점은 화면의 버튼이나 메뉴 항목일 수 있습니다. 4.1 대화 메뉴 선택 또는 버튼 클릭 이벤트와 같은 특정 UI 이벤트에 응답하여 showConversations() API를 호출하여 대화 흐름을 시작합니다. 앱에 여러 채널이 구성된 경우 사용자는 채널 목록을 보게 됩니다. 메시지가 없는 경우 채널 목록은 대시보드에 지정된 대로 정렬됩니다. 메시지가 있는 경우 가장 최근에 사용된 순서로 정렬됩니다. 참고: showConversations() API를 사용할 때 "모든 사용자에게 표시"로 설정된 메시지 채널만 표시됩니다. 앱 화면의 버튼 클릭으로 대화 목록 시작하기 Freshchat.showConversations(); 4.1.1 대화 채널 필터링 특정 용어로 태그된 메시지 채널만 필터링하고 표시하려면 showConversations() API에 전달된 ConversationOptions 인스턴스에서 filterByTags API를 사용하십시오. 예: 앱의 주문 페이지에서 특정 메시지 채널만 연결하고 표시하려면 해당 메시지 채널을 "order_queries"라는 용어로 태그할 수 있습니다. import { ConversationOptions } from 'react-native-freshchat-sdk'; var conversationOptions = new ConversationOptions(); conversationOptions.tags = ["premium"]; conversationOptions.filteredViewTitle = "Premium Support"; Freshchat.showConversations(conversationOptions); 4.1.2 읽지 않은 메시지 수 참고: 1. 일치하는 채널이 없으면 사용자는 기본 채널로 리디렉션됩니다. 2. showConversations() API를 사용할 때 일반적으로 보이지 않는 메시지 채널도 태그가 지정되고 해당 태그가 ConversationOptions 인스턴스의 filterByTags API에 전달되면 표시됩니다. 4.1.2 읽지 않은 메시지 수 앱 시작 시 또는 다른 특정 이벤트에서 사용자의 읽지 않은 메시지 수를 얻고 싶다면 getUnreadCountAsync API를 사용하여 수를 표시하십시오. Freshchat.getUnreadCountAsync((data) =>{ console.log(data); }); 앱이 열려 있을 때 읽지 않은 메시지 수의 변경 사항을 수신 대기하도록 선택할 수도 있습니다. 읽지 않은 메시지 수 이벤트 수신 대기 Freshchat.addEventListener( Freshchat.EVENT_UNREAD_MESSAGE_COUNT_CHANGED, () => { console.log("onUnreadMessageCountChanged triggered"); Freshchat.getUnreadCountAsync((data) => { var count = data.count; var status = data.status; if (status) { console.log("Message count: " + count); } else { console.log("getUnreadCountAsync unsuccessful"); } }); } ); 4.2. FAQ 메뉴 선택 또는 버튼 클릭 이벤트와 같은 특정 UI 이벤트에 응답하여 showFAQs() API를 호출하여 FAQ 화면을 시작합니다. 기본적으로 FAQ 카테고리는 하단에 "문의하기" 버튼이 있는 그리드로 표시됩니다. 이를 사용자 정의하려면 FAQ 옵션을 확인하세요. Freshchat.showFAQs(); 4.2.1 FAQ 옵션 FAQ 흐름의 사용자 정의는 showFAQs() API에 전달된 FaqOptions 인스턴스에 관련 옵션을 지정하여 달성할 수 있습니다. ```javascript import { FaqOptions } from 'react-native-freshchat-sdk'; var faqOptions = new FaqOptions(); faqOptions.tags = ["premium"]; faqOptions.filteredViewTitle = "Tags"; faqOptions.filterType = FaqOptions.FilterType.ARTICLE; Freshchat.showFAQs(faqOptions); ``` filteredViewTitle - 필터가 적용된 결과 목록 페이지에 주어진 제목입니다. tags - 필터가 적용되는 태그의 이름입니다. filterType - 카테고리/기사. 카테고리 - 기사 및 하위 카테고리의 조합. 기사 - 기사만 포함합니다. 참고: 적용된 필터에 일치하는 항목이 없을 경우 기본적으로 모든 FAQ 카테고리를 표시합니다. 4.2.2 태그로 FAQ 카테고리 필터링 특정 용어로 태그된 FAQ 카테고리만 필터링하고 표시하려면 아래와 같이 showFAQs() API에 전달된 FAQOptions 인스턴스에서 필터 유형을 카테고리로 설정하여 filterByTags API를 사용하세요. 예: 특정 사용자 유형과 관련된 FAQ 카테고리를 표시하려면 해당 특정 FAQ 카테고리를 "premium"이라는 용어로 태그할 수 있습니다. ```javascript import { FaqOptions } from 'react-native-freshchat-sdk'; var faqOptions = new FaqOptions(); faqOptions.tags = ["premium"]; faqOptions.filteredViewTitle = "Tags"; faqOptions.filterType = FaqOptions.FilterType.CATEGORY; Freshchat.showFAQs(faqOptions); ``` 4.2.3 태그로 FAQ 기사 필터링 특정 용어로 태그된 FAQ만 필터링하고 표시하려면 아래와 같이 showFAQs() API에 전달된 FAQOptions 인스턴스에서 필터 유형을 기사로 설정하여 filterByTags API를 사용하세요. 참고: FAQ는 부모 FAQ 카테고리에서 태그를 상속받습니다. 예: 결제 실패와 관련된 FAQ에 연결하려면 해당 특정 FAQ를 "payment_failure"라는 용어로 태그하고 앱의 결제 페이지에서 연결할 수 있습니다. ```javascript import { FaqOptions } from 'react-native-freshchat-sdk'; var faqOptions = new FaqOptions(); faqOptions.tags = ["premium"]; faqOptions.filteredViewTitle = "Tags"; faqOptions.filterType = FaqOptions.FilterType.ARTICLE; Freshchat.showFAQs(faqOptions); ``` 4.2.4 FAQ에서 "문의하기" 클릭 시 표시되는 메시지 채널을 태그로 필터링 FAQ 화면에서 사용자가 "문의하기"를 클릭할 때 특정 용어로 태그된 메시지 채널만 필터링하고 표시하려면 아래와 같이 showFAQs() API에 전달된 FAQOptions 인스턴스에서 filterContactUsByTags API를 사용하세요. 참고: FAQ 흐름 내에서 "문의하기"의 기본 동작은 showConversations()를 호출하는 것과 동일합니다. 즉, 채널 필터링이 filterContactUsByTags API에 태그를 전달하여 활성화되지 않는 한 "모든 사용자에게 표시"로 표시된 모든 채널을 표시합니다. 예: FAQ 쇼의 특정 섹션과 관련된 메시지 채널을 표시하려면 해당 특정 메시지 채널을 "payment_failure"라는 용어로 태그할 수 있습니다. ```javascript import { FaqOptions } from 'react-native-freshchat-sdk'; var faqOptions = new FaqOptions(); faqOptions.tags = ["payment_failure"]; faqOptions.filteredViewTitle = "Payments"; faqOptions.filterType = FaqOptions.FilterType.ARTICLE; faqOptions.showFaqCategoriesAsGrid = true; faqOptions.showContactUsOnFaqScreens = true; faqOptions.showContactUsOnFaqNotHelpful = true; faqOptions.contactusFilterTags = ["payments"]; Freshchat.showFAQs(faqOptions); ``` 5. 메시지 전송 API 앱은 sendMessage() API를 사용하여 사용자를 대신하여 메시지를 보낼 수 있습니다. 참고: 이 API는 메시지를 조용히 보내며 채팅 SDK UI를 실행하지 않습니다. 예: "premium"으로 태그된 채널에서 메시지를 보내려면 아래와 같이 API를 호출할 수 있습니다. ```javascript import { FreshchatMessage } from 'react-native-freshchat-sdk'; var freshchatMessage = new FreshchatMessage(); freshchatMessage.tag = "premium"; freshchatMessage.message = "text message"; Freshchat.sendMessage(freshchatMessage); ``` 6. 푸시 알림 앱에 채팅 푸시 알림을 통합하면 사용자가 지원 메시지를 더 빨리 받을 수 있습니다. 6.1.1 서버 측 통합 안드로이드 Firebase 콘솔에서 프로젝트 아래의 클라우드 메시징 탭으로 이동하면 서버 키를 볼 수 있으며, 이를 복사하세요. 애플리케이션에 대한 Firebase 계정이 없는 경우 https://firebase.google.com/docs/android/setup를 참조하세요. 이 FCM 서버 키를 채팅 웹 포털의 설정 ->Mobile SDK iOS .p12 파일 생성 및 Chat에 업로드하는 방법은 여기를 참조하세요. 6.1.2 클라이언트 측 통합 모바일 앱에 푸시 알림을 통합하려면 아래 단계를 따르세요. 아래 단계는 앱이 다른 푸시 알림을 처리하고 있다고 가정합니다. 단계 1. 푸시 토큰 저장: 각 애플리케이션에는 푸시 토큰이 있습니다. Chat은 사용자에게 푸시 알림을 보내기 위해 이 토큰이 필요합니다. 아래 코드 스니펫을 사용하여 Chat SDK에 토큰을 보낼 수 있습니다. Freshchat.setPushRegistrationToken(token); 2. 수신된 푸시 알림 페이로드를 Chat SDK에 전달합니다. Freshchat.isFreshchatNotification(notification, (freshchatNotification) => { if (freshchatNotification) { Freshchat.handlePushNotification(notification); } else { // 앱 알림 처리 } }) 6.2 알림 사용자 정의 (Android 전용) index.js에 아래 코드를 추가하세요. var freshchatNotificationConfig = new FreshchatNotificationConfig(); freshchatNotificationConfig.priority = FreshchatNotificationConfig.NotificationPriority.PRIORITY_HIGH; freshchatNotificationConfig.notificationSoundEnabled = true; freshchatNotificationConfig.largeIcon = "notif"; // Drawable 이름 freshchatNotificationConfig.smallIcon = "notif"; // Drawable 이름 Freshchat.setNotificationConfig(freshchatNotificationConfig); 6.3 푸시 알림 체크리스트 문제 발생 가능성이 있는 몇 가지 영역을 식별했습니다. 따라서 이를 체크리스트로 통합하여 모든 작업을 완료했는지 확인하세요. iOS 1. Freschat 포털에 올바른 푸시 인증서를 업로드했는지 확인하세요. 2. 개발 또는 프로덕션 환경에서 확인하고 해당 인증서를 Freschat 포털에 업로드했는지 확인하세요. 3.iOS 시뮬레이터에서는 푸시 알림 기능이 없으므로 확인하지 마세요. 실제 기기에서 확인하세요. 4.Xcode 프로젝트에서 푸시 알림 기능이 활성화되어 있는지 확인하세요. 5. 애플리케이션에 푸시 알림 권한을 부여했는지 확인하세요. 그렇지 않으면 설정 -> 애플리케이션에서 푸시 알림을 활성화하세요. 6. 다음 방법을 사용하여 기기 토큰을 Chat에 전달했는지 확인하세요, Freshchat.setPushRegistrationToken(device.pushToken); 7. Appdelegate 클래스에서 UNUserNotificationCenter 대리자 메서드 또는 [UIApplicationDelegate application:didReceiveRemoteNotification:fetchCompletionHandler:]가 구현되어 있는지 확인하세요. UNUserNotificationCenter 프레임워크가 사용되는 경우 대리자가 설정되어 있는지 확인하세요. 8. 푸시 알림 대리자 메서드에 해당하는 React 브리징 코드를 추가하세요. 9. 플러그인 구현을 위한 코드를 참조하여 모든 권장 사항을 구현했는지 확인하세요. 10. 앱에 알림 확장이 있는 경우 알림을 차단하지 않는지 확인하세요. Android 1. Chat 포털에 애플리케이션의 올바른 FCM 키를 추가했는지 확인하세요. 2. Google Play 서비스가 활성화되지 않은 에뮬레이터에서는 확인하지 마세요. 실제 기기에서 확인하세요. 3. 다음 방법을 사용하여 기기 토큰을 Chat에 전달했는지 확인하세요, Freshchat.setPushRegistrationToken(device.pushToken); 4. FCM에서 알림을 수신하고 있는지 확인하세요. 5. 플러그인 구현을 위한 코드를 참조하여 모든 권장 사항을 구현했는지 확인하세요. 문제가 지속되면 다음 URL을 시도해 보세요, https://web.freshchat.com/app/api/notif_debug?convId=CONV_ID 여기서 CONV_ID는 알림을 받지 못한 대화의 대화 ID입니다. 브라우저에서 대화를 열 때 URL의 마지막 숫자 부분이 CONV_ID입니다. 이 URL을 열 때 관리자 권한으로 로그인했는지 확인하세요. 푸시 알림 실패의 원인을 알려줍니다. 7. 기타 참고 사항 현지화, UI 사용자 정의, RTL 지원 등에 대해서는 Android 및 iOS에 대한 플랫폼별 문서를 참조하세요.

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

Freshdesk Omni AI 도우미

React Native SDK를 채팅에 통합하는 방법은?

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