빠른 시작: 공유 콘텐츠 받기(HTML)

[ 이 문서는 Windows 런타임 앱을 작성하는 Windows에서 8.x 및 Windows Phone 8.x 개발자를 대상으로 합니다. Windows 10용으로 개발하는 경우에는 최신 설명서를 참조하세요.]

이 빠른 시작에서는 다른 앱에서 공유 콘텐츠를 받는 데 필요한 단계를 안내합니다.

목표: 공유 콘텐츠를 받는 방법에 대해 알아봅니다.

사전 요구 사항

이 섹션에 설명된 코드를 사용하려면

  • Visual Studio 및 관련 템플릿을 잘 알고 있어야 합니다.
  • JavaScript에 대해 잘 알고 있어야 합니다.

지침

1. 공유 계약 지원

앱이 공유 콘텐츠를 받을 수 있으려면 먼저 공유 계약을 지원한다고 선언해야 합니다. 이 계약을 통해 시스템에서 앱이 콘텐츠를 받을 수 있음을 확인합니다. Visual Studio 템플릿을 사용하여 앱을 만드는 경우 공유 계약을 지원하는 방식은 다음과 같습니다.

  1. 매니페스트 파일을 엽니다. 이 파일의 이름은 package.appxmanifest입니다.
  2. 선언 탭을 엽니다.
  3. 사용 가능한 선언 목록에서 공유 대상을 선택합니다.

자세한 내용은 대상 공유 계약 항목 템플릿을 참조하세요.

2. 지원하는 파일 형식 및 데이터 서식 지정

대상 앱 개발자는 지원할 파일 형식과 데이터 서식을 결정해야 합니다. 지원하는 파일 형식을 지정하려면 다음을 수행합니다.

  1. 매니페스트 파일을 엽니다.
  2. Declarations(선언) 페이지의 Supported File Types(지원되는 파일 형식) 섹션에서 **Add New(새로 추가)**를 클릭합니다.
  3. 지원할 파일 이름 확장명을 입력합니다. 예를 들어 .docx와 같이 입력합니다. 마침표(.)를 포함해야 합니다.

모든 파일 형식을 지원하려면 SupportsAnyFileType 상자를 선택합니다.

지원하는 데이터 서식을 지정하려면 다음을 수행합니다.

  1. 매니페스트 파일을 엽니다.
  2. 데이터 서식 섹션에서 새로 추가를 클릭합니다.
  3. 지원하는 데이터 서식의 이름을 입력합니다. 예를 들면 "Text"입니다.

공유 API는 텍스트, HTML 및 비트맵 등의 여러 가지 표준 형식을 지원합니다. 사용자 지정 파일 형식 및 데이터 형식도 지정할 수 있습니다. 이 경우 원본 앱에서 해당 형식에 대해 알아야 합니다. 그렇지 않으면 앱에서 해당 형식의 데이터를 공유할 수 없습니다.

3. 공유 활성화 처리

사용자가 앱을 선택하면 응용 프로그램 activated 이벤트가 발생합니다. 앱은 이 이벤트를 처리하여 사용자가 공유하려는 데이터를 처리해야 합니다. activated 이벤트가 발생될 수 있는 다양한 이유가 있으므로 맨 먼저 이벤트의 이유가 데이터 공유에 있는지 여부를 확인해야 합니다.

if (eventObject.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.shareTarget) {
    // Code to handle activation goes here.
}

사용자가 공유하려는 데이터는 ShareOperation 개체에 포함되어 있습니다. 이 개체를 사용하여 포함된 데이터의 형식을 확인할 수 있습니다. 다음은 일반 텍스트 형식으로 된 공유 콘텐츠를 처리하는 이벤트 처리기 예입니다.

var shareOperation = eventObject.detail.shareOperation;
if (shareOperation.data.contains(Windows.ApplicationModel.DataTransfer.StandardDataFormats.text)) {
    shareOperation.data.getTextAsync().done(function (text) {
            // To output the text using this example, 
            // you need a div tag with an id of "output" in your HTML file.
            document.getElementById("output").innerText = text;
        }, function (e) {
            displayError("Error retrieving Text format: " + e);
        }
    });
}

4. 긴 작업에 대한 확장 공유 상태 보고

참고  

다음 단계는 Windows 스토어 앱에만 적용됩니다. Windows Phone 8.1에서도 아래의 보고 메서드를 호출할 수 있지만 데이터가 반환되지 않습니다.

경우에 따라 앱에서 사용자가 공유하려는 데이터를 처리하는 데 시간이 오래 걸릴 수 있습니다. 이러한 공유 인스턴스를 확장 공유라고 합니다. 확장 공유의 예로는 파일 또는 이미지의 사용자 공유 컬렉션이 있습니다. 이러한 항목은 간단한 텍스트 공유보다 크기 때문에 처리하는 데 더 오랜 시간이 걸립니다.

참고  앱에서 텍스트나 하이퍼링크 같은 간단한 항목만 받을 수 있는 경우 이 섹션을 건너뛰어도 됩니다.

 

데이터를 처리하는 데 많은 시간이 필요하다고 해서 대상 앱에서 사용자가 앱의 UI를 강제로 확인하도록 해서는 안 됩니다. 대신 ShareOperation 개체를 사용하여 앱이 작업 중임을 시스템에 알릴 수 있습니다. 그러면 사용자가 앱의 UI를 해제하고 수행 중이던 작업으로 돌아갈 수 있습니다. 이 경우에도 앱은 백그라운드에서 데이터를 계속 처리합니다.

shareOperation.reportStarted();

reportStarted를 호출한 후에는 앱과의 사용자 상호 작용이 더 이상 필요하지 않습니다. 따라서 사용자가 앱을 종료해도 되는 경우에만 이 메서드를 호출해야 합니다.

확장 공유에서는 앱이 DataPackage 개체로부터 모든 데이터를 가져오기 전에 사용자가 원본 앱을 해제할 수 있습니다. 따라서 앱에서 필요한 데이터 가져오기를 완료한 경우 이를 시스템에서 알 수 있도록 하는 것이 좋습니다. 그러면 시스템에서 필요에 따라 원본 앱을 일시 중단하거나 종료할 수 있습니다.

shareOperation.reportDataRetreived();

오류가 발생한 경우 reportError를 호출하여 시스템에 오류 메시지를 보낼 수도 있습니다. 사용자가 공유 상태를 확인할 때 메시지가 표시됩니다. reportError를 호출하는 즉시 앱이 종료되고 공유가 끝나므로 사용자가 다시 시작하여 동일한 콘텐츠를 앱에 공유해야 합니다.— 시나리오에 따라 특정 오류는 공유 작업을 종료할 만큼 심각하지 않다고 결정할 수 있습니다. 이 경우 reportError를 호출하지 않고 공유를 계속할 수 있습니다.

shareOperation.reportError("Could not reach the server! Try again later.");

이러한 메서드를 사용할 때는 일반적으로 방금 설명한 순서대로 메서드를 호출하고 두 번 이상 호출하지 않습니다. 그러나 대상 앱이 reportStarted 전에 reportDataRetrieved를 호출할 수 있는 경우가 있습니다. 예를 들어 앱은 활성화 처리기의 작업의 일부로 데이터를 검색할 수 있지만 사용자가 공유 단추를 클릭할 때까지 reportStarted를 호출하지 않습니다.

이러한 유형의 공유가 작동하는 방식을 보려면 콘텐츠 공유 대상 앱 샘플(영문)을 참조하세요.

5. 공유 완료 보고

앱에서 공유 콘텐츠를 성공적으로 처리하면 reportCompleted를 호출해야 합니다.

shareOperation.reportCompleted();

앱은 공유가 완료되었음을 보고한 후 종료됩니다.

참고  

Windows Phone 8.1에서는 빠른 링크가 지원되지 않습니다. Windows Phone 스토어 앱은 공유 작업의 일부로 빠른 링크를 받을 수 있지만 자동으로 무시됩니다.

사용자가 공유 콘텐츠를 받기 위해 앱을 선택한 경우 QuickLink를 만드는 것이 좋습니다. QuickLink는 사용자가 앱과 정보를 쉽게 공유할 수 있도록 해주는 바로 가기와 비슷합니다. 예를 들어 앱에서 친구의 메일 주소로 미리 구성된 새 메일 메시지를 여는 QuickLink를 만들 수 있습니다.

사용자가 공유 콘텐츠를 받기 위해 앱을 선택한 경우 QuickLink를 만드는 것이 좋습니다. QuickLink는 사용자가 앱과 정보를 쉽게 공유할 수 있도록 해주는 바로 가기입니다. 예를 들어 앱에서 친구의 메일 주소로 미리 구성된 새 메일 메시지를 여는 QuickLink를 만들 수 있습니다.

QuickLink에는 제목, 아이콘 및 ID가 있어야 합니다. 사용자가 공유 참 메뉴를 탭하면 제목(예: "엄마의 메일")과 아이콘이 나타납니다. ID는 앱에서 선택된 QuickLink를 식별하는 데 사용하는 것입니다. 앱에서는 QuickLink를 만들 때 ShareOperation 개체의 reportCompleted 메서드를 호출하여 QuickLink를 시스템에 반환합니다. 예를 들면 다음과 같습니다.

function reportCompleted() {
    var quickLink = new Windows.ApplicationModel.DataTransfer.ShareTarget.QuickLink();
    quickLink.id = "123456789";
    quickLink.title = id("quickLinkTitle").value;

    // For quicklinks, the supported FileTypes and DataFormats are set independently from the manifest.
    var dataFormats = Windows.ApplicationModel.DataTransfer.StandardDataFormats;
    quickLink.supportedFileTypes.replaceAll(["*"]);
    quickLink.supportedDataFormats.replaceAll([dataFormats.text, dataFormats.uri, dataFormats.bitmap, 
        dataFormats.storageItems, dataFormats.html, customFormatName]);

    Windows.ApplicationModel.Package.current.installedLocation.getFileAsync("images\\user.png").then(function (iconFile) {
        quickLink.thumbnail = Windows.Storage.Streams.RandomAccessStreamReference.createFromFile(iconFile);
        shareOperation.reportCompleted(quickLink);
    });
}

앱은 QuickLink의 ID와 해당 사용자 데이터를 저장할 수 있습니다. 사용자가 QuickLink를 탭할 때 ShareOperation.quickLinkId 속성을 통해 해당 ID를 가져올 수 있습니다. QuickLink에 대한 공유에 성공하면 reportCompleted를 호출할 때 동일한 QuickLink를 반환해야 합니다.

요약 및 다음 단계

지금까지 공유 콘텐츠를 받는 방법과 사용자가 앱과 콘텐츠를 공유하는 데 유용한 QuickLink를 만드는 방법에 대해 알아보았습니다.

자세히 알아보거나 앱에 공유를 추가하는 방법의 구체적인 예제를 보려면 다음을 확인하는 것이 좋습니다.

참고  공유 대상 앱을 디버그하는 것은 다른 종류의 앱을 디버그하는 것과 다릅니다. 자세한 내용은 대상 앱 디버깅에 대한 지침을 참조하세요.

 

관련 항목

공유할 데이터 형식 선택

콘텐츠 공유에 대한 지침 및 검사 목록

빠른 시작: 콘텐츠 공유