Freshchat 안드로이드 SDK 통합 단계

목차

1. 프로젝트에 Freshchat SDK 추가

2. SDK 초기화

2.1 초기화 구성 옵션

3. 사용자 정보

3.1 사용자 정보 업데이트

3.2 사용자 속성 업데이트 (메타 데이터)

3.3 타임라인에 사용자 이벤트 기록 (버전 3.1.0부터 사용 가능)

3.4 사용자 데이터 재설정

3.5 사용자 복원

4. 지원 솔루션 시작

4.1 대화

4.1.1 대화 주제 필터링

4.1.2 읽지 않은 수

4.1.3 태그로 필터링된 대화에서 읽지 않은 메시지 수

4.2. FAQ

4.2.1 FAQ 옵션

4.2.2 태그로 FAQ 카테고리 필터링

4.2.3 태그로 FAQ 문서 필터링

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

5. 메시지 전송 API

6. 푸시 알림

6.1 Freshchat과 FCM 연결하기 

6.1.1 Freshchat 웹 포털에 FCM 서버 키 저장하기

6.2 알림 맞춤 설정

7. 언어 현지화

7.1 기본 SDK 텍스트 변경

7.2 현지화

7.3 오른쪽에서 왼쪽으로 쓰는 언어 지원

7.4 런타임 앱 로케일 변경

8. 사용자 정의

8.1 UI 사용자 정의 옵션

8.2 사용자 정의 이미지 로더

8.3 앱 내 비 Freshchat 링크 가로채기 및 처리

9. 기타 참고 사항

9.1 출시 체크리스트

9.2 권한

9.3 Proguard 구성 (앱에서 Proguard가 활성화된 경우)

9.4 샘플 앱


사전 요구 사항

  • Freshchat SDK 클라이언트는 Android 4.1 이상을 실행하는 장치가 필요합니다.
  • Freshchat SDK는 appcompat-v7 r24.2 이상을 사용하는 Android 버전 7.0을 대상으로 하는 앱을 지원합니다.


앱 ID, 앱 키 및 도메인 가져오기

계정 소유자/관리자로 Freshchat 계정에 로그인합니다. 관리자 > 모바일 SDK로 이동합니다.



1. 프로젝트에 Freshchat SDK 추가


i) Maven URL을 루트 build.gradle (project/build.gradle)에 추가합니다.

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


ii) 다음 종속성을 앱 모듈의 build.gradle 파일 (project/app/build.gradle)에 추가합니다.               

apply plugin: 'com.android.application'

android {
// ...
}

dependencies {
// ...
    implementation 'com.github.freshworks:freshchat-android:{{latest-version}}'
}

{{latest-version}}을 여기에서 SDK의 최신 버전으로 교체합니다. 

예: implementation 'com.github.freshworks:freshchat-android:4.2.0'


iii) 앱이 Android 7.0+를 대상으로 하고 이미지 첨부가 활성화된 경우, FileProvider를 구성해야 합니다.

AndroidManifest.xml에 아래와 같이 provider를 포함합니다.

AndroidManifest.xml

<provider
   android:name="androidx.core.content.FileProvider"
    android:authorities="com.example.demoapp.provider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/freshchat_file_provider_paths" />
</provider>

Strings.xml

<string name="freshchat_file_provider_authority">com.example.demoapp.provider</string>


자세한 정보는 이 비디오를 참조하세요.


2. SDK 초기화

Freshchat SDK의 다른 기능을 호출/사용하기 전에 앱 ID, 앱 키 및 도메인으로 Freshchat.init()을 호출합니다. 


앱의 런처/지원 활동의 onCreate() 함수에서 init()을 호출하는 것을 강력히 권장합니다. Freshchat SDK는 init() 중에 구성 요소의 존재 여부를 확인하고 구성 요소가 누락되었거나 매니페스트 항목이 누락된 경우 경고합니다. 


다음 코드 스니펫에서 YOUR-APP-ID, YOUR-APP-KEY 및 YOUR-DOMAIN을 실제 앱 ID, 앱 키 및 도메인으로 교체합니다.


FreshchatConfig config = new FreshchatConfig("YOUR-APP-ID","YOUR-APP-KEY");
freshchatConfig.setDomain("YOUR-DOMAIN");
Freshchat.getInstance(getApplicationContext()).init(config);


2.1 초기화 구성 옵션

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

FreshchatConfig config = new FreshchatConfig("YOUR-APP-ID","YOUR-APP-KEY");
config.setDomain("YOUR-DOMAIN");
config.setCameraCaptureEnabled(true);
config.setGallerySelectionEnabled(true);
config.setResponseExpectationEnabled(true);
Freshchat.getInstance(getApplicationContext()).init(config);

3. 사용자 정보


3.1 사용자 정보 업데이트

기본 사용자 정보를 언제든지 보내어 지원 상담원이 사용자와 메시지를 주고받을 때 더 많은 컨텍스트를 제공할 수 있습니다. 

// 현재 설치에 대한 사용자 객체 가져오기
FreshchatUser freshchatUser = Freshchat.getInstance(getApplicationContext()).getUser();
freshchatUser.setFirstName("John");
freshchatUser.setLastName("Doe");
freshchatUser.setEmail("john.doe.1982@mail.com");
freshchatUser.setPhone("+91", "9790987495");

// setUser를 호출하여 사용자 정보를 Freshchat 서버와 동기화합니다.
Freshchat.getInstance(getApplicationContext()).setUser(freshchatUser);

3.2 사용자 속성(메타 데이터) 업데이트

앱의 사용자 및 이벤트에 대한 추가 메타데이터를 캡처하고 보낼 수 있으며, 이는 나중에 메시지를 푸시하기 위해 사용자를 세분화하는 방법이 됩니다. 

/* 상담원에게 더 많은 컨텍스트를 제공하고 마케팅 또는 사전 메시지를 위한 세분화를 위해 사용자 정의 메타데이터를 설정합니다. */
Map<String, String> userMeta = new HashMap<String, String>();
userMeta.put("userLoginType", "Facebook");
userMeta.put("city", "SpringField");
userMeta.put("age", "22");
userMeta.put("userType", "premium");
userMeta.put("numTransactions", "5");
userMeta.put("usedWishlistFeature", "yes");
                                
// setUserProperties를 호출하여 사용자 속성을 Freshchat 서버와 동기화합니다.
Freshchat.getInstance(getApplicationContext()).setUserProperties(userMeta);


3.3 타임라인에 사용자 이벤트 기록 (버전 3.1.0부터 사용 가능)


사용자 이벤트를 추적하면 애플리케이션의 사용자에 대한 더 많은 통찰력과 컨텍스트를 제공합니다. 사용자 행동, 실패/오류 사례와 같은 이벤트는 이 API를 사용하여 추적할 수 있습니다. 추적된 이벤트는 상담원 측의 이벤트 타임라인에 나열됩니다.


String eventName = "주문 세부 정보 페이지 방문";

// 아래와 같이 맵을 생성하고 필요한 속성을 설정합니다.  
HashMap<String, Object> properties = new HashMap<>();
properties.put("주문 ID", 3223232332);
properties.put("주문 날짜", "2020년 1월 24일");
properties.put("주문 상태", "배송 중");

// eventName과 속성 맵을 전달하여 trackEvent를 호출합니다.
Freshchat.trackEvent(getContext(), eventName, properties);



참고:
1. Freshchat은 계정당 최대 121개의 고유 이벤트만 허용합니다.

2. 이벤트 이름은 문자열 값(최대 32자)을 허용합니다.

3. 속성 키 이름은 문자열 유형이어야 합니다(최대 32자).

4. 속성 값은 모든 기본 객체 유형일 수 있습니다(최대 256자).

4. Freshchat은 이벤트당 최대 20개의 속성을 전송할 수 있습니다.


3.4 사용자 데이터 재설정

로그아웃 시 또는 앱에서 사용자 행동에 따라 적절하다고 판단될 때 resetUser API를 호출하여 사용자 데이터를 재설정합니다. 

Freshchat.resetUser(getApplicationContext());


3.5 사용자 복원

기기/세션/플랫폼 간에 채팅 메시지를 유지하려면 모바일 앱이 사용자에 대해 동일한 외부 ID 및 복원 ID 조합을 전달해야 합니다. 이를 통해 사용자는 Android, iOS 및 웹과 같은 지원되는 플랫폼에서 대화를 원활하게 이어갈 수 있습니다.


  • 외부 ID - 이는 (이상적으로) 사용자 ID 또는 이메일 ID와 같은 시스템의 사용자에 대한 고유 식별자여야 하며 Freshchat.identifyUser() API를 사용하여 설정됩니다. 이는 사용자에 대해 설정된 후 변경할 수 없습니다.

  • 복원 ID - 이는 외부 ID가 설정된 경우 Freshchat에서 현재 사용자에 대해 생성되며 Freshchat.getUser().getRestoreId() API를 사용하여 언제든지 검색할 수 있습니다. 앱은 외부 ID 및 복원 ID 조합을 저장하고 나중에 Freshchat SDK에 제공하여 동일한 기기 또는 다른 기기 및 플랫폼 간에 채팅 대화를 계속할 수 있도록 해야 합니다.


참고:
사용자가 메시지를 보낸 경우에만 일반적으로 사용자에 대한 복원 ID가 생성됩니다.
알림은 한 번에 하나의 모바일 기기에서만 지원되며 현재 마지막으로 복원된 기기 또는 마지막으로 업데이트된 푸시 토큰이 있는 기기입니다.



외부 ID 설정

Freshchat.getInstance(getApplicationContext()).identifyUser(externalId, null);


복원 ID 검색

String restoreId = Freshchat.getInstance(getApplicationContext()).getUser().getRestoreId();
saveRestoreIdForUser(restoreId);


외부 ID 및 복원 ID로 사용자 조회 및 복원

Freshchat.getInstance(getApplicationContext()).identifyUser(externalId, restoreId);


복원 ID 생성 이벤트 수신

복원 ID 생성은 비동기 프로세스입니다. 따라서 복원 ID가 생성될 때 알림을 받기 위해 브로드캐스트 수신기를 등록해야 합니다. 이 수신기는 애플리케이션 클래스의 onCreate에서 등록하고 onTerminate에서 등록 해제할 수 있습니다.


브로드캐스트 수신기 등록

IntentFilter intentFilter = new IntentFilter(Freshchat.FRESHCHAT_USER_RESTORE_ID_GENERATED);
LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(broadcastReceiver, intentFilter);

브로드캐스트 수신기 수신

BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
  @Override
  public void onReceive(Context context, Intent intent) {
     String restoreId = Freshchat.getInstance(getApplicationContext()).getUser().getRestoreId();
  }
};

브로드캐스트 수신기 등록 해제

LocalBroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(broadcastReceiver);


4. 지원 솔루션 실행

앱의 콜 투 액션에서 FAQ 또는 대화 기반 지원 경험을 실행하려면 아래 스니펫을 사용하십시오. 콜 투 액션 또는 진입점은 화면의 버튼이나 메뉴 항목일 수 있습니다.


4.1 대화

메뉴 선택 또는 버튼 클릭 이벤트와 같은 특정 UI 이벤트에 응답하여 showConversations() API를 호출하여 대화 흐름을 시작합니다. 앱에 여러 주제가 구성된 경우 사용자는 주제 목록을 볼 수 있습니다. 메시지가 없는 경우 대시보드에 지정된 순서로 주제 목록이 정렬됩니다. 메시지가 있는 경우 가장 최근에 상호작용한 주제를 기준으로 순서가 정해집니다. 

참고: showConversations() API를 사용할 때 "모든 사용자에게 표시"로 설정된 주제만 표시됩니다.


앱 화면의 버튼 탭에서 대화 목록 실행

myConversationsButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {
        Freshchat.showConversations(getApplicationContext());
    }
}); 


4.1.1 대화 주제 필터링

특정 용어로 태그된 주제만 필터링하고 표시하려면 showConversations() API에 전달된 ConversationOptions 인스턴스에서 filterByTags API를 사용합니다.


예: 앱의 주문 페이지에서 특정 주제만 연결하고 표시하려면 해당 주제에 "order_queries"라는 용어로 태그를 지정할 수 있습니다.

List<String> tags = new ArrayList<>();
tags.add("order_queries");
ConversationOptions options = new ConversationOptions()
    .filterByTags(tags, "Order Queries");
Freshchat.showConversations(MainActivity.this, options);


참고:
일치하는 주제가 없으면 사용자는 기본 주제로 리디렉션됩니다.

showConversations() API를 사용할 때 일반적으로 표시되지 않는 주제도 태그가 지정되고 특정 태그가 showConversations() API에 전달된 ConversationOptions 인스턴스의 filterByTags API에 전달되면 표시됩니다.




자세한 정보는 이 비디오를 참조하세요.

4.1.2 읽지 않은 메시지 수

앱 실행 시 또는 기타 특정 이벤트에서 사용자의 읽지 않은 메시지 수를 얻으려면 getUnreadCountAsync API를 사용하여 수를 표시합니다.


Freshchat.getInstance(getApplicationContext()).getUnreadCountAsync(new UnreadCountCallback() {
        @Override
        public void onResult(FreshchatCallbackStatus freshchatCallbackStatus, int unreadCount) {
            // "badgeTextView"가 카운트를 표시할 텍스트 뷰라고 가정합니다.
            badgeTextView.setText(Integer.toString(unreadCount));
        }
    });


앱이 열려 있을 때 읽지 않은 메시지 수의 변경 사항을 수신하도록 선택할 수도 있습니다. 브로드캐스트를 수신하는 방법은 아래에 설명되어 있습니다.


브로드캐스트 수신기 등록

IntentFilter intentFilter = new IntentFilter(Freshchat.FRESHCHAT_UNREAD_MESSAGE_COUNT_CHANGED);
    getLocalBroadcastManager(getApplicationContext()).registerReceiver(unreadCountChangeReceiver, intentFilter);


읽지 않은 메시지 수 수신

BroadcastReceiver unreadCountChangeReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Freshchat.getInstance(getApplicationContext()).getUnreadCountAsync(new UnreadCountCallback() {
            @Override
            public void onResult(FreshchatCallbackStatus freshchatCallbackStatus, int unreadCount) {
                // "badgeTextView"가 카운트를 표시할 텍스트 뷰라고 가정합니다.
                badgeTextView.setText(Integer.toString(unreadCount));
            }
        });
    }
}


브로드캐스트 수신기 등록 해제

getLocalBroadcastManager(getApplicationContext()).unregisterReceiver(unreadCountChangeReceiver);

4.1.3 태그로 필터링된 대화에서 읽지 않은 메시지 수

특정 태그로 필터링된 대화에서 사용자의 읽지 않은 메시지 수를 얻으려면 getUnreadCountAsync API를 사용합니다.


List<String> tags = new ArrayList<>();
    tags.add("premium"); // 대화를 필터링할 태그
    Freshchat.getInstance(getApplicationContext()).getUnreadCountAsync(new UnreadCountCallback() {
        @Override
        public void onResult(FreshchatCallbackStatus FreshchatCallbackStatus, int unreadCount) {
            badgeTextView.setText(Integer.toString(unreadCount));
        }
    }, tags);


4.2. FAQ

메뉴 선택 또는 버튼 클릭 이벤트와 같은 특정 UI 이벤트에 응답하여 showFAQs() API를 호출하여 FAQ 화면을 실행합니다. 기본적으로 FAQ 카테고리는 하단에 "문의하기" 버튼이 있는 그리드로 표시됩니다. 이를 사용자 정의하려면 FAQ 옵션을 확인하세요.

myFAQButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {
        Freshchat.showFAQs(getApplicationContext());
    }
});

4.2.1 FAQ 옵션

FAQ 흐름을 사용자 정의하려면 showFAQs() API에 전달된 FaqOptions 인스턴스에 관련 옵션을 지정하여 수행할 수 있습니다.

// 앱 화면의 버튼 클릭으로 FAQ 실행
myFAQButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {

        FaqOptions faqOptions = new FaqOptions()
            .showFaqCategoriesAsGrid(true)
            .showContactUsOnAppBar(true)
            .showContactUsOnFaqScreens(false)
            .showContactUsOnFaqNotHelpful(false);

        Freshchat.showFAQs(MainActivity.this, faqOptions);
    }
});


4.2.2 태그로 FAQ 카테고리 필터링

특정 용어로 태그된 FAQ 카테고리만 필터링하고 표시하려면 FAQOptions 인스턴스에 필터 유형을 카테고리로 설정하여 filterByTags API를 사용합니다.


예: 특정 사용자 유형과 관련된 FAQ 카테고리를 표시하려면 해당 FAQ 카테고리에 "premium"이라는 용어로 태그를 지정할 수 있습니다.

List<String> tags = new ArrayList<>();
tags.add("premium");

FaqOptions faqOptions = new FaqOptions()
    .filterByTags(tags, "FAQs", FaqOptions.FilterType.CATEGORY);//태그, 필터링된 화면 제목, 유형

Freshchat.showFAQs(MainActivity.this, faqOptions);


4.2.3 태그로 FAQ 기사 필터링

특정 용어로 태그된 FAQ만 필터링하고 표시하려면 FAQOptions 인스턴스에 필터 유형을 기사로 설정하여 filterByTags API를 사용합니다. 


참고: FAQ는 상위 FAQ 카테고리에서 태그를 상속받습니다.


예: 결제 실패와 관련된 FAQ를 연결하려면 해당 FAQ에 "payment_failure"라는 용어로 태그를 지정하고 앱의 결제 페이지에서 연결할 수 있습니다.

List<String> tags = new ArrayList<>();
tags.add("payment_failure");

FaqOptions faqOptions = new FaqOptions()
    .filterByTags(tags, "payment_failure", FaqOptions.FilterType.ARTICLE);//태그, 필터링된 화면 제목, 유형

Freshchat.showFAQs(MainActivity.this, faqOptions);


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

FAQ 화면에서 사용자가 "문의하기"를 클릭할 때 특정 용어로 태그된 주제만 필터링하고 표시하려면 FAQOptions 인스턴스에 filterContactUsByTags API를 사용합니다.


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


예: FAQ 쇼의 특정 섹션과 관련된 주제를 표시하려면 해당 메시지 주제에 "payment_failure"라는 용어로 태그를 지정할 수 있습니다. 

List<String> tags = new ArrayList<>();
tags.add("payment_failure");

FaqOptions faqOptions = new FaqOptions()
    .filterContactUsByTags(tags, "Payments"); //태그, 필터링된 화면 제목

Freshchat.showFAQs(MainActivity.this, faqOptions);


5. 메시지 전송 API

앱은 sendMessage() API를 사용하여 사용자를 대신하여 메시지를 보낼 수 있습니다. 


참고: 이 API는 메시지를 조용히 전송하며 Freshchat SDK UI를 실행하지 않습니다.


예: "premium"으로 태그된 주제에 메시지를 보내려면 아래와 같이 API를 호출할 수 있습니다.

String tag = "premium";
String msgText = "사용자가 주문 #1234에 문제가 있습니다.";
FreshchatMessage FreshchatMessage = new FreshchatMessage().setTag(tag).setMessage(msgText);
Freshchat.sendMessage(getContext(), FreshchatMessage);


6. 푸시 알림

애플리케이션에 Freshchat 푸시 알림을 통합하면 사용자가 지원 메시지를 더 빨리 받을 수 있습니다.

6.1 Freshchat과 FCM 연결 


사전 요구 사항

  1. 앱에 FCM 구현
  2. Play 서비스가 실행 중인 기기
  3. Freshchat 웹 포털에 저장된 FCM 서버 키

단계

  1. Freshchat 웹 포털에 FCM 서버 키 저장
  2. 기기에

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

Freshchat AI 도우미

Freshchat 안드로이드 SDK 통합 단계

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