← 모든 확장

네이티브 확장

KlugDialog

com.klug.dialog.Dialog

APM이 필요 없습니다. 다운로드해서 바로 사용하세요. 이보다 더 간단할 수 없습니다.

Android, iOS, macOS의 AIR 앱을 위한 네이티브 대화상자: 알림, 키보드 위에 유지되는 텍스트 필드 대화상자, 코드에서 업데이트하고 닫을 수 있는 진행 상황 대화상자.

AndroidiOSmacOS 프로덕션 운영 중 연 €19부터 · 구매

개요

Mac에서 AIR의 기본 알림은 다른 시대의 것처럼 보입니다. KlugDialog는 진짜를 보여 줍니다: 앱 아이콘, 시스템 글꼴, 익숙한 버튼 스타일을 갖추고 앱 창에 연결되는 네이티브 macOS 알림 시트입니다.

단순한 알림을 넘어 데스크톱 앱이 매일 필요로 하는 기능을 제공합니다. 텍스트 필드가 있는 대화상자(예: 사용자 이름과 비밀번호, 보안 필드 포함), 고유한 스타일을 가진 여러 버튼, 그리고 코드에서 업데이트하고 작업이 끝나면 닫는 진행 상황 시트("연결 중…").

모든 것은 비동기입니다. show()는 즉시 반환되고, 콜백이 선택된 버튼을 받습니다. KlugDialog는 개념 증명인 저희 앱의 Mac 버전에서 실행됩니다.

Android 신규: 동일한 대화상자를 네이티브 Android 대화상자로 제공합니다. 텍스트 필드는 모든 화면에서 키보드 위에 유지되며, 버튼이 키보드 뒤로 사라지던 태블릿 가로 모드에서도 마찬가지입니다. 비밀번호, 사용자 이름, 이메일 주소는 자동으로 대문자화되지 않고, 이메일 필드에는 이메일 키보드가 표시됩니다. Android 버전은 긴 버튼 목록을 세로로 쌓아 보여 주고 단순한 스피너도 제공하며, 저희 앱의 Android 버전에서 실행됩니다.

iOS에서도: 버전 1.2부터 동일한 API로 네이티브 iOS 알림, 텍스트 필드 대화상자, 진행 상황 대화상자를 표시하므로 하나의 코드 경로로 Android, iOS, macOS를 지원합니다.

기능

  • 독립형: ANE 하나로 충분하며, 코어 라이브러리나 의존성 ANE를 추가할 필요가 없음
  • 최대 세 개의 버튼을 가진 네이티브 macOS 알림 시트
  • 정보, 경고, 치명적 스타일
  • 보안 필드를 포함해 버튼과 텍스트 필드를 원하는 만큼 가진 대화상자
  • 코드에서 업데이트하고 닫을 수 있는 진행 상황 시트
  • 코드에서 대화상자 닫기 가능
  • 선택된 버튼과 입력된 값을 받는 콜백
  • Android: 키보드 위의 필드, 자동 대문자화되지 않는 비밀번호, 이메일 / 숫자 키보드, 라이트 및 다크 테마

지원 플랫폼

Android 알림 · 텍스트 필드 · 진행 상황 · 긴 버튼 목록
iOS arm64 · 알림 · 텍스트 필드 · 진행 상황
macOS arm64 · x86_64

다른 플랫폼에서는 isSupported가 false를 반환하므로, 앱이 해당 플랫폼에서는 기존 대화상자로 대체할 수 있습니다.

시작하기

애플리케이션 디스크립터에 확장을 추가합니다:

app.xml
<extensions>
    <extensionID>com.klug.dialog.Dialog</extensionID>
</extensions>

코드 예제

다섯 가지 완전한 흐름입니다. 모든 호출은 즉시 반환되고 결과는 나중에 콜백으로 전달되므로, 대화상자가 열려 있는 동안 앱이 멈추지 않습니다. 전체 문서 →

1 · 지원 여부 확인과 간단한 알림 표시
Setup.as
import com.klug.dialog.Dialog;

var dialog:Dialog = Dialog.getInstance();

if ( dialog.isSupported )
{
    dialog.show( "Saved", "The recording is in your library." );   // one "OK" button
}
else
{
    showAppAlert( "Saved" );   // your app's own fallback dialog, e.g. on Windows
}
2 · 최대 세 개의 버튼으로 질문하기
Confirm.as
dialog.show( "Delete recording?", "This cannot be undone.",
    [ "Delete", "Keep" ],
    function( index:int ):void
    {
        // index = position in the buttons array;
        // -1 = closed without a button, e.g. the Android back key
        if ( index == 0 ) deleteRecording();   // your app
    },
    Dialog.STYLE_WARNING );   // alert style of the macOS sheet
3 · 텍스트 필드가 있는 로그인 대화상자
SignIn.as
var buttons:Array = [
    { label:"Cancel",  style:4, tag:0 },   // style 4 = cancel, 3 = destructive
    { label:"Sign in", style:0, tag:1 }
];
var fields:Array = [
    { placeholder:"E-mail", text:lastEmail, keyboardType:7 },   // 7 = e-mail keyboard
    { placeholder:"Password", secure:true }                 // never auto-capitalised
];

dialog.present( "Sign in", "Please enter your account.", true, buttons, fields,
    function( tag:int, values:Array, cancelled:Boolean = false ):void
    {
        if ( cancelled ) return;   // closed without a button (tag -1)
        if ( tag == 1 ) signIn( values[0], values[1] );   // values in field order
    },
    null, "dark" );   // theme on Android and iOS; macOS follows the system
4 · 코드가 작업하는 동안 진행 상황 대화상자
Connect.as
// your own id: the same dialog is updated and closed with it
dialog.progressShow( "connect", "Connecting", "Contacting the server…", false,
    function():void { trace( "progress dialog closed" ); } );   // fires once

dialog.progressUpdate( "connect", "Signing in…" );

// when the work is done, or has failed
dialog.progressDismiss( "connect" );
5 · 코드에서 대화상자 닫기
Waiting.as
// pass your own id as the 7th parameter to close the dialog later
dialog.present( "Waiting for the camera", "Tap Cancel to stop waiting.", false,
    [ { label:"Cancel", style:4, tag:0 } ], null,
    function( tag:int, values:Array ):void { stopWaiting(); },   // your app
    "waitCamera" );

// the camera has answered: close the dialog, no callback fires
dialog.presentDismiss( "waitCamera" );

API 개요

Dialog.getInstance()단일 인스턴스를 반환합니다.
isSupportedAndroid, iOS, macOS에서는 true이고, 예를 들어 Windows 같은 그 외 플랫폼에서는 false입니다.
show(title, message, buttons, callback, style)최대 세 개의 버튼을 가진 알림(기본값 "OK")이며, callback(index)는 버튼 없이 닫히면 -1입니다. 지원되지 않으면 false를 반환합니다.
present(title, message, cancelable, buttons, fields, callback, id, theme)버튼과 텍스트 필드를 원하는 만큼 가진 대화상자이며, callback(tag, values, cancelled)입니다. 나중에 닫을 수 있도록 자체 id를 전달하세요. Android와 iOS에서는 theme "light" 또는 "dark"를 사용할 수 있습니다.
presentDismiss(id)코드에서 present() 대화상자를 닫으며, 콜백은 호출되지 않습니다.
progressShow(id, title, message, cancelable, closeCallback, theme)스피너가 있는 진행 상황 대화상자이며, closeCallback은 대화상자가 사라질 때 한 번 호출됩니다.
progressUpdate(id, message) / progressDismiss(id)진행 상황 대화상자의 텍스트를 변경합니다 / 닫습니다.
STYLE_INFO, STYLE_WARNING, STYLE_CRITICALshow()의 알림 스타일이며 macOS 알림 시트에서 사용됩니다.
Button {label, style, tag}style: 0 기본, 1 긍정, 2 부정, 3 파괴적, 4 취소, 5 중립. Android는 모두 사용하고, iOS는 3과 4를 사용하며, macOS는 모든 버튼을 동일하게 표시합니다.
Field {placeholder, secure, text, keyboardType, autocorrect, autocap}keyboardType: 0 기본, 3 URL, 4 숫자, 5 전화번호, 7 이메일, 8 소수. autocap: 0 없음(기본값), 1 문장, 2 단어, 3 전체. 마지막 세 가지는 Android와 iOS에 적용됩니다.

KlugDialog 구매

AIR 애플리케이션 1개에 대한 연간 라이선스이며 12개월간 모든 업데이트를 제공합니다. 결제 후 확장, ActionScript 라이브러리, 문서를 이메일로 보내 드리며, 보통 영업일 기준 1일 이내입니다. 라이선스 및 약관

심플
€19 / 년
  • AIR 애플리케이션 1개에 대한 라이선스
  • 12개월간 모든 업데이트
  • 지원 없음
심플 구매
스탠더드
€149 / 년
  • AIR 애플리케이션 1개에 대한 라이선스
  • 12개월간 모든 업데이트
  • 7일 이내 이메일 답변
스탠더드 구매
프라이어리티
€299 / 년
  • AIR 애플리케이션 1개에 대한 라이선스
  • 12개월간 모든 업데이트
  • 48시간 이내 이메일 답변
프라이어리티 구매
세금은 Link(Stripe)가 결제 시 계산합니다. 결제 중에 AIR 앱의 애플리케이션 ID를 입력합니다.

요구 사항

AIR SDK51.x (HARMAN)
AndroidAndroid 6 이상
iOSiOS 13 이상
macOSmacOS 11 이상