본 가이드는 Alli 의 안드로이드 SDK 를 연동하는 방법에 대한 가이드입니다. Alli SDK 는 안드로이드 4.4 (API 레벨 19) 혹은 그 이상을 요구합니다.

Step 1. SDK 다운로드 및 불러오기

  1. 여기 에서 SDK 를 다운로드합니다.
  2. 안드로이드 스튜디오를 실행하고 File > New > New Module 에서 다운로드한 Alli SDK 를 프로젝트로 불러옵니다.
    image2-2
  3. File > Project Structure > Dependencies에서 allisdk 를 디펜던시로 추가합니다.
    image3-1

Step 2. Alli SDK 를 디펜던시로 추가

앱 모듈의 build.gradle 파일에 Alli SDK 를 디펜던시로 추가합니다.

  dependencies {
    implementation project(":allisdk")
  }

Step 3. 앱 권한 및 액티비티 추가

  1. 아래 내용을 AndroidManifest.xml에 추가합니다:
  <manifest>
    <uses-permission android:name="android.permission.INTERNET"/>
  </manifest>
  1. 아래 액티비티를 AndroidManifest.xml의 어플리케이션 블럭에 추가합니다:
  <activity
      android:name=".MainActivity"
      android:configChanges="orientation|screenSize" />

Step 4.  자바 8 언어 기능 설정

안드로이드 플러그인 버전이 3.0.0 이상임을 확인하고 아래 내용을 상응하는 build.gradle 파일에 설정합니다:

  android {
    ...
    // Java 8 언어 기능을 사용하는 모듈만 설정합니다.
    // 소스코드 혹은 디펜던시 어떤 경우에도 적용됩니다.
    // through dependencies).
    compileOptions {
      sourceCompatibility JavaVersion.VERSION_1_8
      targetCompatibility JavaVersion.VERSION_1_8
    }
  }

Steps 5. Alli SDK 초기화

  1. Alli SDK 가 주요 파일들에 임포트되었는지 확인합니다:
  import ai.allganize.allisdk.Alli;
  import ai.allganize.allisdk.AlliErrorCode;
  import ai.allganize.allisdk.AlliEventHandler;
  1. Alli 의 API 키를 이용해 아래 내용을 onCreate() 메소드로 어플리케이션의 첫 액티비티 클래스에 추가하면 Alli 라이브러리가 초기화됩니다:
  protected void onCreate(Bundle savedInstanceState) {
    ...  
    // new Alli(String apiKey, WebView webView, AlliEventHandler eventHandler, boolean showHeader, boolean showFooter, boolean showBackButton) 형식입니다.
    // showHeader - 선택 사항이며 기본값은 true 입니다. 헤더를 제거하려면 이 옵션을 끄면 됩니다.
    // showFooter - 선택 사항이면 기본값은 ture 입니다. footer 를 제거하려면 이 옵션을 끄면 됩니다.
    // showBackButton - 선택 사항이며 기본값은 ture 입니다. 헤더에서 뒤로가기 버튼을 제거하려면 이 옵션을 끄면 됩니다.
    alli = new Alli("YOUR_API_KEY", webView, this, true, true, false);
    alli.initialize();
    ...
  }

API 키는 Alli 대시보드의 설정 메뉴에서 찾을 수 있습니다:

Step 6. 유저 특정

유저가 앱에 로그인하여 유저가 특정되어 있는 경우 Alli 에게 정보를 전달할 수 있습니다. 혹은 로그인되지 않은 유저를 위해 임시 ID 를 생성할 수도 있습니다.

예를 들어 유저 ID 가 USER-123 인 경우 아래와 같이 입력합니다.

  protected void onCreate(Bundle savedInstanceState) {
    ...  
    userId.setText("USER-123");
    placement.setText("LANDING");
    notify.setText("NOT INITIALIZED");

    alli = new Alli("YOUR_API_KEY", webView, this);
    alli.initialize();
    ...
  }

Step 7. 대화창 생성

대화창을 생성하고 고객과 대화를 시작하려면 아래와 같이 호출합니다.

alli.event(userId, placement, context);

Alli 대화창은 부모 뷰 컨트롤러에서 구현해야 합니다. 이 때, 부모 뷰 컨트롤러를 위임 속성으로 할당해야합니다. 이 호출에 전달 된 ViewController가 최상위 뷰이며, 다른 뷰에 가려지면 안 됩니다. 그리고 부모 뷰는 최소의 높이와 폭이 필요합니다.

Step 8: Alli 이벤트를 위한 델리게이트 메소드

아래 델리게이트 메소드들이 챗 대화 상태에 피드백을 제공합니다.

  public protocol AlliEventHandler {
    // 성공적으로 초기화되면 호출됩니다.
    // 이 이벤트 전에 호출되면 NOT_INITIALIZE_YET 에러가 발생할 수 있습니다.
    void onInitialized(WebView view);

    // 대화가 시작되면 호출됩니다.
    void onConversationStarted(WebView view, String userId, String placement, Object context);


    // Alli.event 가 호출되었는데 대화가 시작되지 않으면 호출됩니다.
    void onConversationNotStarted(_ view: WKWebView!, userId: String, placement: String, context: Any?)


    // 유저가 챗 윈도우를 닫거나 Alli.close()가 호출되면 호출됩니다.
    void onConversationClosed(WebView view, String userId, String placement, Objective context)

    void onError(WebView view, AlliErrorCode errorCode, String userId, String placement, Object context)
  }

Step 9: 대화 인터페이스 출력

기본 설정으로, 대화가 진행되지 않을 때 대화창은 숨김 상태입니다.

  public void onConversationClosed(WebView view, String userId, String placement, Object context) {
    view.post(() -> view.setVisibility(View.INVISIBLE));
  }

AlliEventHandler.onConversationStarted 이벤트를 받으면 대화창이 보이게 됩니다.

  public void onConversationStarted(WebView view, String userId, String placement, Object context) {
    view.post(() -> view.setVisibility(View.VISIBLE));
  }