8.ExternalAPI

Edit

8.1ExternalAPI 소개

ExternalAPI는 넥사크로 앱과 외부 앱 간의 연동이 필요한 경우 사용하는 오브젝트입니다. 특정 앱으로 메시지를 전달하여 앱을 실행하거나 특정 기능을 수행할 수 있습니다. 물론 모든 앱과의 연동이 가능한 것은 아니며 넥사크로 앱에서 보내는 메시지를 받고 처리하는 로직이 구현된 앱과만 연동할 수 있습니다.

안드로이드와 iOS는 앱간 통신 방법에 차이가 있는데 ExternalAPI는 환경에 상관없이 동일한 사용법으로 이를 가능하게 해줍니다. 다만 메소드 호출시 대상 앱을 식별할 때 사용하는 ID 설정에서 약간의 차이가 있을뿐입니다. 안드로이드에서는 패키지명을, iOS에서는 custom URL scheme을 ID로 사용합니다. 그 외의 인수 설정은 동일합니다. 다음은 안드로이드와 iOS 환경에서 ExternalAPI 오브젝트의 execExtAPI 메소드 호출 예를 보여줍니다.

//Android
this.ExternalAPI00.execExtAPI("100", "com.nexacro.ExternalAPITest", "fn_Chk", "aa bb 'cc c' dd");
//iOS
this.ExternalAPI00.execExtAPI("200", "ExternalAPITest://", "fn_Chk", "aa bb 'cc c' dd");

당연하지만 안드로이드나 iOS 앱에서는 위 코드의 요청을 처리하기 위한 로직의 구현이 필요합니다. 안드로이드는 브로드캐스트 리시버에 대한 처리가 필요하며 iOS 앱에서는 custom URL scheme에 대한 처리가 필요합니다.

이번 장에서는 넥사크로 앱에서 다른 앱으로 메시지를 보내거나 API를 호출하는 방법에 관해 설명합니다. 넥사크로 앱과 통신할 테스트 용도의 안드로이드, iOS 앱을 제작하는 방법이나 앱 데모 프로젝트 파일은 테스트 앱 만들기를 참조하십시오.

8.2외부 앱으로의 접근 가능 여부 확인하기

외부 앱과 연동하려면 먼저 접근이 가능한지를 확인하는 것이 좋습니다. 연동하려는 앱이 설치가 되어 있는지 애플리케이션 ID가 정확한지도 모른채 무턱대고 메시지를 보내봐야 시스템 성능 저하의 원인이 될 뿐입니다. 이런 경우에 손쉽게 사용할 수 있는 메소드가 isAccessible 입니다. isAccessible 메소드는 패키지 이름(안드로이드) 혹은 custom URL scheme(iOS)을 사용하여 다른 앱으로 접근이 가능한지 확인하는 용도로 사용합니다.

8.2.1예제

다음은 외부 앱으로의 접근이 가능한지 확인하는 isAccessible 메소드의 사용 예입니다. 접근 여부를 확인할 앱의 Application ID를 입력한 후 Access 버튼을 터치합니다. 안드로이드 환경에서는 패키지 이름을 입력하고 iOS 환경에서는 custom URL을 입력합니다.

그림 8-1example_externalapi_01

다른 앱으로의 접근이 가능하면 onsuccess 이벤트를, 불가능하면 onerror 이벤트가 발생하며 결과 로그가 TextArea에 표시됩니다.

8.2.2예제에서 사용한 핵심 기능

ExternalAPI > isAccessible 메소드

특정 앱에 접근이 가능한지 확인하는 메소드입니다. 안드로이드는 애플리케이션 ID, iOS는 URL scheme을 인수로 호출합니다.

ExternalAPI > onsuccess 이벤트

ExternalAPI 오브젝트에서 요청한 작업이 성공했을 때 발생하는 이벤트입니다.

ExternalAPI > onerror 이벤트

ExternalAPI 오브젝트에서 요청한 작업이 실패했을 때 발생하는 이벤트입니다.

8.2.3예제 구현 방법

1

화면 구성하기

ExternalAPI 오브젝트를 추가합니다. 추가된 오브젝트는 Invisible Object 창에서 확인할 수 있습니다.

대상 앱의 Application ID 혹은 custom URL scheme을 입력받을 Static, Button, Edit 컴포넌트와 결과를 출력할 TextArea를 예제의 그림과 같이 적절히 배치합니다.

화면 구성을 위해 사용한 컴포넌트 및 오브젝트는 다음과 같습니다.

컴포넌트/오브젝트

ID

ExternalAPI

ExternalAPI00

Button

btn_isaccessible

Edit

edt_appid

Static

stt_appid

GroupBox

GroupBox00

TextArea

TextArea00

2

Form 이벤트 함수 작성하기

Form의 onload 이벤트 함수를 다음과 같이 작성합니다. isAccessible 메소드 호출시 OS에 따라 인수를 달리 설정해줘야 하므로 OS를 체크하여 Edit 컴포넌트에 기본 인수 값을 설정해줍니다.

this.example_externalapi_01_onload = function(obj:nexacro.Form,e:nexacro.LoadEventInfo)
{
    var strOS = nexacro.System.osversion;
    
    if(!strOS.toLowerCase().search(/android/))    //Android
    {
        this.edt_appid.set_value("com.nexacro.extAPITest");
    }
    else if(!strOS.toLowerCase().search(/ios/))    //iOS
    {
        this.edt_appid.set_value("extAPITest://");
    }
    else
    {
        this.edt_appid.set_value("");
    }    

    this.TextArea00.set_value("");
};

3

ExternalAPI 오브젝트 이벤트 함수 작성하기

onsuccess 이벤트 함수를 다음과 같이 작성합니다. ExternalAPI 오브젝트에 요청한 작업이 성공했을 때 호출됩니다.

this.ExternalAPI00_onsuccess = function(obj:nexacro.ExternalAPI,e:nexacro.ExternalAPIEventInfo)
{
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "- ExternalAPI onsuccess");
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "   > obj : " + obj);
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "   > e.eventid : " + e.eventid);
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "   > e.reason : " + e.reason);
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "   > e.recvid : " + e.recvid);        
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "   > e.recvdata : " + e.recvdata +"\n");
};

onerror 이벤트 함수를 다음과 같이 작성합니다. ExternalAPI 오브젝트에 요청한 작업이 실패했을 때 발생하는 이벤트입니다.

this.ExternalAPI00_onerror = function(obj:nexacro.ExternalAPI,e:nexacro.ExternalAPIErrorEventInfo)
{
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "- ExternalAPI onerror");
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "   > obj : " + obj);
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "   > e.eventid : " + e.eventid);
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "   > e.statuscode : " + e.statuscode);
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "   > e.errormsg : " + e.errormsg +"\n");    
};

4

Access 버튼 이벤트 함수 작성하기

Access 버튼의 onclick 이벤트 함수를 다음과 같이 작성합니다.

this.btn_isaccessible_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
    this.ExternalAPI00.isAccessible(this.edt_appid.value);
};

5

Edit 이벤트 함수 작성하기

Edit 컴포넌트의 onkeydown 이벤트 함수를 다음과 같이 작성합니다. 사용자가 Access 버튼을 터치하지 않고 Edit에서 입력한 후 소프트 키보드로 Enter 키를 입력했을 때 Access 버튼을 터치한 것처럼 처리해줍니다.

this.edt_appid_onkeydown = function(obj:nexacro.Edit,e:nexacro.KeyEventInfo)
{
    var strURL = this.edt_appid.value;
    
    if(e.keycode == "13")    //Enter key
    {            
        if(nexacro._isNull(strURL) || strURL == "")
        {
            this.edt_appid.setFocus();
        }
        else
        {
            this.btn_isaccessible_onclick();
        }    
    }
};

6

모바일 장치에서 확인하기

넥사크로 애플리케이션과 연동할 앱을 설치합니다. 안드로이드 앱은 Application ID가 설정되어 있어야 하고 iOS 앱은 custom URL scheme에 대한 설정이 되어 있어야 합니다.

OS에 따라 Application ID 혹은 custom URL scheme을 입력한 후 Access 버튼을 터치하여 수행이 정상적으로 수행되는지 확인합니다. 수행에 성공하면 onsuccess 이벤트가, 실패하면 onerror 이벤트 로그가 하단의 TextArea에 출력됩니다.

8.3외부 API 호출하기

외부 앱을 수행하거나 특정 기능을 사용하려면 execExtAPI 메소드를 사용할 수 있습니다. execExtAPI 메소드를 사용해 메시지를 전달하면 외부 앱에서 이를 받아 처리하고 결과를 전달합니다.

8.3.1예제

다음은 외부 앱으로 데이터를 전달하고 받는 execExtAPI 메소드 사용 예제입니다. 인수를 설정한 후 Go 버튼을 터치합니다. 데이터 전달이 성공하면 onsuccess 이벤트가 발생하며 외부 앱으로부터 데이터를 받으면 onrecvdata 이벤트가 발생합니다.

그림 8-2example_externalapi_02.png

다음은 넥사크로 애플리케이션으로부터 메시지를 전달받은 외부 앱의 로그 메시지입니다.

11-22 20:48:37.939 10661-10661/com.nexacro.extAPITest I/nexacro: >> [com.nexacro.extAPITest] message received.
11-22 20:48:37.941 10661-10661/com.nexacro.extAPITest I/nexacro: - sender:com.tobesoft.np17demodev.extAPI
11-22 20:48:37.942 10661-10661/com.nexacro.extAPITest I/nexacro: - recvID:1
11-22 20:48:37.943 10661-10661/com.nexacro.extAPITest I/nexacro: - apiname:dummyApi
11-22 20:48:37.943 10661-10661/com.nexacro.extAPITest I/nexacro: - params:arg1=text arg2=1234

8.3.2예제에서 사용한 핵심 기능

ExternalAPI > execExtAPI 메소드

외부 앱의 API를 호출하는 메소드입니다. 호출하려는 앱을 식별할 수 있는 애플리케이션 ID 혹은 URL shceme, 호출할 API 이름이 필요합니다. 필요한 경우 파라미터도 전달이 가능합니다.

ExternalAPI > onrecvdata 메소드

execExtAPI 메소드로 호출한 앱에서 데이터(문자열)를 전달받았을 때 발생하는 이벤트입니다.

8.3.3예제 구현 방법

1

화면 구성하기

ExternalAPI 오브젝트를 추가합니다. 추가된 오브젝트는 Invisible Object 창에서 확인할 수 있습니다.

execExtAPI 메소드 인수를 입력받기 위한 Static, Button, Edit 컴포넌트와 결과를 출력할 TextArea를 예제의 그림과 같이 적절히 배치합니다.

화면 구성을 위해 사용한 컴포넌트 및 오브젝트는 다음과 같습니다.

컴포넌트/오브젝트

ID

ExternalAPI

ExternalAPI00

Button

btn_go

Edit

edt_recvid

edt_appid

edt_apiname

edt_parameter

Static

stt_recvid

stt_appid

stt_apiname

stt_parameter

GroupBox

GroupBox00

TextArea

TextArea00

2

Form 이벤트 함수 작성하기

Form의 onload 이벤트 함수를 다음과 같이 작성합니다. execExtAPI 메소드 호출시 OS에 따라 Application ID 인수를 달리 설정해줘야 하므로 OS를 체크하여 Edit 컴포넌트에 기본 인수 값을 설정해줍니다.

this.example_externalapi_02_onload = function(obj:nexacro.Form,e:nexacro.LoadEventInfo)
{
    this.TextArea00.set_value("");
    var strOS = nexacro.System.osversion;
    
    if(!strOS.toLowerCase().search(/android/))
    {
        this.edt_appid.set_value("com.nexacro.extAPITest");
    }
    else if(!strOS.toLowerCase().search(/ios/))
    {
        this.edt_appid.set_value("extAPITest://");
    }
    else
    {
        this.edt_appid.set_value("");
    }    
};

3

ExternalAPI 오브젝트 이벤트 함수 작성하기

onsuccess 이벤트 함수를 다음과 같이 작성합니다. ExternalAPI 오브젝트에 요청한 작업이 성공했을 때 호출됩니다.

this.ExternalAPI00_onsuccess = function(obj:nexacro.ExternalAPI,e:nexacro.ExternalAPIEventInfo)
{
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "- ExternalAPI onsuccess");
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "   > obj : " + obj);
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "   > e.eventid : " + e.eventid);
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "   > e.reason : " + e.reason);
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "   > e.recvid : " + e.recvid);        
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "   > e.recvdata : " + e.recvdata +"\n");
};

onerror 이벤트 함수를 다음과 같이 작성합니다. ExternalAPI 오브젝트에 요청한 작업이 실패했을 때 발생하는 이벤트입니다.

this.ExternalAPI00_onerror = function(obj:nexacro.ExternalAPI,e:nexacro.ExternalAPIErrorEventInfo)
{
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "- ExternalAPI onerror");
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "   > obj : " + obj);
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "   > e.eventid : " + e.eventid);
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "   > e.statuscode : " + e.statuscode);
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "   > e.errormsg : " + e.errormsg +"\n");    
};

onrecvdata 이벤트 함수를 다음과 같이 작성합니다. 외부 앱으로부터 메시지를 받으면 발생하는 이벤트입니다. 전달받은 메시지는 e.recvdata 속성에서 확인할 수 있습니다.

this.ExternalAPI00_onrecvdata = function(obj:nexacro.ExternalAPI,e:nexacro.ExternalAPIEventInfo)
{
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "- ExternalAPI onrecvdata");    
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "   > obj : " + obj);
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "   > e.eventid : " + e.eventid);
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "   > e.reason : " + e.reason);
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "   > e.recvid : " + e.recvid);        
    this.TextArea00.set_value(this.TextArea00.value + "\n" + "   > e.recvdata : " + e.recvdata +"\n");    
};

4

Go 버튼 이벤트 함수 작성하기

Go 버튼의 onclick 이벤트 함수를 다음과 같이 작성합니다. 사용자로부터 입력받은 인수를 설정한 후 execExtAPI 메소드를 호출합니다.

this.btn_go_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
    var strRecvID = this.edt_recvid.value;
    var strApplicationID = this.edt_appid.value;
    var strAPI = this.edt_apiname.value;
    var strParams = this.edt_parameter.value;
    
    this.ExternalAPI00.execExtAPI(strRecvID, strApplicationID, strAPI, strParams);
};

5

모바일 장치에서 확인하기

넥사크로 앱과 연동할 앱이 모바일 장치에 설치되어 있는지 확인합니다. 설치가 되어 있으면 execExtAPI 메소드에 설정할 인수를 입력한 후 Go 버튼을 터치하여 정상적으로 수행되는지 확인합니다.

수행에 성공하면 onsuccess 이벤트가, 실패하면 onerror 이벤트 로그가 하단의 TextArea에 출력됩니다. 외부 앱으로부터 메시지를 받으면 onrecvdata 이벤트가 발생합니다.

8.4테스트 앱 만들기

안드로이드나 iOS에서는 각 환경에 맞게 앱간의 연동 방법들을 제공하고 있습니다. 이를 통해 앱 간에 메시지, 데이터를 전달하거나 앱을 호출하는 등의 연동을 가능하게 합니다. 이 과정에서와 같이 앱에 처리 로직을 구현해주면 넥사크로 앱과의 연동이 가능합니다.

이번 장에서는 넥사크로 앱과 데이터 전달, API 호출 등을 수행할 수 있는 테스트 앱을 제작하는 방법에 관해 설명합니다. 테스트 앱의 제작은 안드로이드에서는 안드로이드 스튜디오와 자바, iOS에서는 xcode와 오브젝티브C로 제작합니다. 메시지를 주고 받을 수 있는 인터페이스를 만들어 주는것이 중요하므로 사용자는 각자의 환경에 맞게 코틀린이나 스위프트 등으로 앱을 제작해도 무방합니다.

8.4.1안드로이드

안드로이드에서는 앱, 컴포넌트간 통신에 인텐트와 브로드캐스트 리시버를 사용할 수 있습니다. 인텐트는 앱의 컴포넌트간에 요청 및 메시지 등의 데이터를 전달해주는 역할을 하고 브로드캐스트 리시버는 인텐트를 안드로이드 시스템에 전파하거나 수신하는 역할을 합니다.

앱에서 브로드캐스트로 메시지가 담긴 인텐트를 안드로이드 시스템에 전파하면 앱에서 브로드캐스트 리시버를 통해 이를 수신할 수 있습니다. 안드로이드 시스템에 전파되는 여러 브로드캐스트 메시지중에서 자신이 수신할 메시지는 앱에서 등록한 인텐트 필터를 통해 고를 수 있습니다. 따라서 어떤 종류의 메시지를 수신할지 사전에 안드로이드 시스템에 등록해야 하며 이는 매니페스트를 통해 할 수 있습니다.

예제가 포함된 데모 프로젝트 코드는 아래 링크에서 내려받을 수 있습니다.

demo_android_ExternalAPITest

1

앱 프로젝트 생성

넥사크로플랫폼 17 배포가이드에서 앱 개발 및 실행 (안드로이드)의 앱 프로젝트 개발 장을 참조하여 안드로이드 앱 프로젝트를 만들어줍니다.

프로젝트 생성시 패키지명은 com.nexacro.ExternalAPITest로 해줍니다. 패키지 이름은 넥사크로 앱과의 통신에서 ID로 사용되므로 중요합니다.

그림 8-3create_new_project

별도의 화면이 필요한 앱이 아니므로 액티비티는 추가하지 않으며 아이콘, 스플래시 이미지 등의 리소스 관련 설정도 하지 않습니다. 또한 넥사크로 앱이 아니므로 넥사크로플랫폼 라이브러리와 nexacro config도 설정하지 않습니다.

2

strings.xml 작성

앱에서 사용할 문자열을 선언해 놓는 strings.xml 파일을 작성합니다. strings.xml 파일은 보통 프로젝트 생성 시 자동으로 만들어지는데 만일 res > values 디렉터리에 없다면 툴바의 File 메뉴 혹은 프로젝트 탐색창의 콘텍스트 메뉴에서 [New > XML > Values XML File]를 수행하여 생성해 줄 수 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, ExternalAPITest Activity!</string>
    <string name="app_name">ExternalAPITest</string>
</resources>

3

main.xml 작성

앱 실행시 환영 메시지를 출력할 첫 화면에 사용할 레이아웃 파일을 작성합니다. [New > XML > Layout XML File] 메뉴를 통해 생성합니다. Layout File Name은 main으로 하고 Root Tag는 LinearLayout으로 합니다. 생성된 파일은 res > layout 디렉터리에서 확인할 수 있는데 아래 코드를 참고하여 수정해줍니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

</LinearLayout>

4

ExternalAPITestActivity.java 작성

앱 실행시 Hello 메시지를 출력할 첫 화면을 만듭니다. Activity 클래스를 상속받아 ExternalAPITestActivity 액티비티를 클래스를 선언합니다.

package com.nexacro.ExternalAPITest;

import android.app.Activity;
import android.os.Bundle;

public class ExternalAPITestActivity extends Activity {
    /* 액티비티가 처음 생성될 때 호출 */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

5

extAPIReceiver.java 파일 작성

브로드캐스트 리시버를 구현한 extAPIReceiver 클래스를 생성합니다.

브로드캐스트 리시버는 BroadcastReceiver 클래스를 상속받아서 구현할 수 있으며 클래스 내부에 onReceiver 메소드를 정의해야 합니다. 이 메소드는 원하는 브로드캐스트 메시지가 도착하면 자동으로 호출됩니다.

메시지는 인텐트 객체로 전달되므로 수신하고 싶은 메시지가 있다면 사전에 인텐트 필터를 등록해놔야 합니다. 즉, 어떤 인텐트를 받고 싶은지 인텐트 필터를 사용해 안드로이드 시스템에 미리 알려주어야 합니다. 인텐트 필터의 등록은 매니페스트 파일에서 할 수 있습니다.

package com.nexacro.ExternalAPITest;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class ExternalAPIReceiver extends BroadcastReceiver {
  
   @Override
   public void onReceive(Context context, Intent intent) {
      //브로드캐스트 메시지를 받으면 인텐트로부터 받은 내용을 로그로 출력
      Log.i("nexacro", ">> [com.nexacro.ExternalAPITest] message received.");
      Log.i("nexacro", "- sender:" + intent.getExtras().getString("sender"));
      Log.i("nexacro", "- recvID:" + intent.getExtras().getString("recvID"));
      Log.i("nexacro", "- apiname:" + intent.getExtras().getString("apiname"));
      Log.i("nexacro", "- params:" + intent.getExtras().getString("params"));
      
      //인텐트를 만들어 브로드캐스팅으로 전달
      Intent callExtAPI = new Intent(intent.getExtras().getString("sender"));
      callExtAPI.putExtra("recvID", intent.getExtras().getString("recvID"));
      callExtAPI.putExtra("recvdata", "This is a message from com.nexacro.ExternalAPITest");
      context.sendBroadcast(callExtAPI);
   }
}

extAPIReceiver 클래스는 브로드캐스트 메시지를 받으면 인텐트 객체로부터 전달받은 데이터를 추출한 후 새로운 인텐트 객체를 만들어 브로드캐스트로 넥사크로 앱에 전달합니다.

6

AndroidManifest.xml 작성

앱 관련 설정 정보를 담고 있는 AndroidManifest.xml 파일에 액티비티와 브로드캐스트 리시버, 인텐트 필터를 설정합니다.

우선 앱 수행시 첫 화면으로 사용할 ExternalAPITestActivity 액티비티를 등록해줍니다. 그 다음 모바일 장치 내의 다른 앱이 보낸 메시지를 전달 받기위해 브로드캐스트 리시버를 등록해주고 그 아래 인텐트 필터를 등록해줍니다. 브로드캐스트 리시버도 애플리케이션 구성 요소이므로 새로운 브로드캐스트 리시버를 만들면 반드시 매니페스트 파일에 등록해야 시스템이 알 수 있습니다.

브로드캐스트 리시버를 등록하는 방법으로는 매니페스트 파일에 등록해 사용하는 정적 리시버와 자바 코드에서 registerReceiver/unregisterReceiver 메소드를 사용해 등록/해제하는 동적 리시버의 두 가지가 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.nexacro.ExternalAPITest"
    android:versionCode="1"
    android:versionName="1.0" >

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <!-- 액티비티 설정 -->
        <activity
            android:label="@string/app_name"
            android:name=".ExternalAPITestActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!-- 브로드캐스트 리시버와 인텐트 필터 설정 -->
        <receiver android:name="com.nexacro.ExternalAPITest.ExternalAPIReceiver" android:enabled="true">
            <intent-filter>
                <action android:name="com.nexacro.ExternalAPITest.extAPI" />
            </intent-filter>
       </receiver>
    </application>

</manifest>

7

빌드 및 앱 설치

넥사크로플랫폼 17 배포가이드에서 앱 개발 및 실행 (안드로이드)의 빌드 장을 참조하여 안드로이드 스튜디오에서 앱을 빌드하고 모바일 장치에 설치합니다.

8

결과 확인

제작한 테스트 앱과 넥사크로 데모 앱이 모두 설치되어 있는지 확인한 후 넥사크로 데모 앱을 실행합니다. 메뉴에서 [ExternalAPI > 외부 API 호출하기]를 선택하고 Application ID가 테스트 앱의 패키지 이름과 동일하게 설정되었는지 확인 후 Go 버튼을 터치합니다.

그림 8-4Screenshot_20190412-180547

하단의 TextArea에 로그 메시지가 출력됩니다. 성공인 경우 onsuccess 이벤트와 onrecvdata 이벤트가 순차적으로 발생합니다. onsuccess 이벤트는 execExtAPI 메소드 호출이 성공하면 발생하고 onrecvdata 이벤트는 다른 앱으로부터 데이터가 수신되면 발생합니다. 메소드 호출이 실패한 경우에는 onerror 이벤트가 발생합니다.