본문 바로가기

Daum Developers

서비스

URL스키마 살펴보기

스마트 장비에서 URL스키마란 특정 앱을 가르키는 앱 고유의 지시어이며 특정 앱이 제공하는 기능에 따라 다른 앱에서 연동을 할 수가 있습니다. Daum에서 제공하고 있는 다양한 앱에는 이 URL Sheme를 제공하고 있으며 이 문서를 통하여 사용 방법을 알 수가 있습니다. 아이폰 또는 안드로이드에서 제작하고자 하는 앱이나 웹에서 Daum의 앱을 연동하는 URL스키마를 사용하여서 더 풍부한 기능으로 사용자들에게 폭 넓은 기능과 활용성을 높일 수 있습니다.

범위

OS별 지원 범위

  • iOS 2.0 이상
  • Android 1.6 이상 (SDK Level 4)

Daum이 만든 URL스키마를 지원하는 앱

URL스키마 활용 방법

구조

다음에서 제공하는 URL스키마의 구조는 앞에는 앱 고유의 키워드와 '://' 구분자와 앱에 대한 명령 및 매개변수로 이루어져 있습니다.

{앱 코드}://{명령}?{매개변수}

예를 들어 지도앱을 띄어 특정 위치를 바로 보여주고자 한다면 모바일에서 다음과 같이 URL스키마를 실행하면 됩니다.

daummaps://look?p=37.569801,126.988676

위 URL스키마를 안드로이는 다음과 같은 코드로 실행합니다.

//안드로이드에서 URL스키마 실행
CustomSchemeURL.look csurl = new CustomSchemeURL.SendMessage(context,
"37.569801,126.988676", null);

위 URL스키마를 iOS에서 다음과 같은 코드로 실행합니다.

//iOS에서 URL스키마 실행
...canOpenURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@://%@", "daummaps", "look"]]]

위 안드로이드와 iOS 실행 예제 코드는 라이브러리와 지도앱이 설치가 되어 있을때 위 코드가 실행이 되며 앱 설치 유무 등의 예외 처리가 필요합니다. 자세한 코드는 예제를 통해 확인 하시면 됩니다.

예외 처리

모바일에 등록되지 않은 Scheme인 경우

모바일에 등록되지 않은 Scheme인 경우 앱 설치를 유도합니다. 예를 들어 지도앱이 설치 되지 않았는데 daummaps:// Scheme를 실행 할 경우 지도앱 설치를 유도합니다.

아래 소스코드는 마이피플에 대한 예제입니다.

Android에서 앱 설치 유도 예제 코드

public abstract class CustomSchemeURL {
    public static final String MYPEOPLE_PACKAGE_NAME = "net.daum.android.air";
    public static final String MYPEOPLE_DOWNLOAD_PAGE = "http://durl.kr/ixug";
    
    ... 중략 ... 
    
    /**
     * myp scheme을 처리할 수 있는 어플리케이션이 존재하는지 검사
     * @return 사용가능할 경우 true
     */
    public boolean canOpenMypeopleURL() {
        PackageManager pm = mContext.getPackageManager();
        List infos = pm.queryIntentActivities(getIntent(), PackageManager.MATCH_DEFAULT_ONLY);
        
        return infos != null && infos.size() > 0;
    }
    
    /**
     * 마이피플 설치 여부 검사
     * @return 설치되어 있을 경우 true
     */
    public boolean existMypeopleApp() {
        PackageManager pm = mContext.getPackageManager();
        
        try {
            return (pm.getPackageInfo(MYPEOPLE_PACKAGE_NAME, PackageManager.GET_SIGNATURES) != null);
        } catch (NameNotFoundException e) {
            return false;
        }
    }
    
    /**
     * 마이피플 다운로드 페이지열기
     */
    public static void openMypeopleDownloadPage(Context context) {
        Intent intent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse(MYPEOPLE_DOWNLOAD_PAGE));
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    }
    ... 중략 ... 
}

iOS에서 앱 설치 유도 예제 코드

#define MYPEOPLE_URL_SCHEME             @"myp"
#define MYPEOPLE_TASK_SEND_MESSAGE      @"sendMessage"
#define MYPEOPLE_TASK_SEND_MEDIA_MESSAGE @"sendMediaMessage"
#define MYPEOPLE_TASK_SET_PROFILE       @"setProfile"
#define MYPEOPLE_TASK_SEND_MAP_MESSAGE  @"sendMap"
#define MYPEOPLE_DOWNLOAD_URL           @"http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=373539016&;amp;amp;amp;amp;mt=8"
#define MYPEOPLE_INTRODUCE_URL          @"http://m.mypeople.daum.net/mypeople/promotion.do"


- (BOOL) canOpenMypeopleURL {
    return [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@://%@", MYPEOPLE_URL_SCHEME, MYPEOPLE_TASK_SEND_MESSAGE]]];
}

- (BOOL) openMypeopleDownloadURL {
    return [[UIApplication sharedApplication] openURL:[NSURL URLWithString:MYPEOPLE_DOWNLOAD_URL]];
    
}

URL스키마 사용 가능 여부를 체크하여 사용 불가능시 마이피플 다운로드 페이지로 가게 합니다.

if (![self canOpenMypeopleURL]) {
    [self openMypeopleDownloadURL];
    return NO;
}

URL스키마 사용 가능 여부를 체크하여 사용 불가능시 마이피플 다운로드 페이지로 가게 합니다.

if (csurl.canOpenMypeopleURL()) {
    startActivity(csurl.getIntent());
} else {
    CustomSchemeURL.openMypeopleDownloadPage(this);
}

지원하지 않는 명령인 경우

모바일에 특정 Scheme는 등록은 되었지만 지원하지 않은 명령를 실행 할 경우 해당 앱이 실행이 되고 요청한 명령은 무시합니다. 예를 들어 지도앱이 설치 되어 있지만 daummaps://love 같이 등록 되지 않은 명령를 실행 할 경우 단순히 지도앱을 실행하는 동작을 합니다.