다음을 통해 공유


데이터 받기

이 문서에서는 공유 계약을 사용하여 다른 앱에서 공유된 UWP(유니버설 Windows 플랫폼) 앱의 콘텐츠를 받는 방법을 설명합니다. 이 공유 계약을 사용하면 사용자가 공유를 호출할 때 앱이 옵션으로 표시될 수 있습니다.

앱을 공유 대상으로 선언

사용자가 공유를 호출할 때 시스템에서 가능한 대상 앱 목록을 표시합니다. 목록에 표시하려면 앱이 공유 계약을 지원한다고 선언해야 합니다. 이렇게 하면 시스템에서 콘텐츠를 받을 수 있는 앱을 알 수 있습니다.

  1. 매니페스트 파일을 엽니다. package.appxmanifest와 같이 호출해야 합니다.
  2. 선언 탭을 엽니다.
  3. 사용 가능한 선언 목록에서 공유 대상을 선택한 다음 추가를 선택합니다.

파일 형식 및 형식 선택

다음으로 지원되는 파일 형식 및 데이터 형식을 결정합니다. Share API는 텍스트, HTML 및 비트맵과 같은 여러 표준 형식을 지원합니다. 사용자 지정 파일 형식 및 데이터 형식을 지정할 수도 있습니다. 이렇게 하는 경우 원본 앱은 이러한 형식과 형식이 무엇인지 알고 있어야 합니다. 그렇지 않으면 해당 앱은 형식을 사용하여 데이터를 공유할 수 없습니다.

앱에서 처리할 수 있는 형식에 대해서만 등록합니다. 공유되는 데이터를 지원하는 대상 앱만 사용자가 공유를 호출할 때 표시됩니다.

파일 형식을 설정하려면 다음을 수행합니다.

  1. 매니페스트 파일을 엽니다. package.appxmanifest와 같이 호출해야 합니다.
  2. 선언 페이지의 지원되는 파일 형식 섹션에서 새로 추가를 선택합니다.
  3. 지원하려는 파일 이름 확장명을 입력합니다(예: ".docx"). 기간을 포함해야 합니다. 모든 파일 형식을 지원하려면 SupportsAnyFileType 검사 상자를 선택합니다.

데이터 형식을 설정하려면 다음을 수행합니다.

  1. 매니페스트 파일을 엽니다.
  2. 선언 페이지의 데이터 형식 섹션을 열고 새로 추가를 선택합니다.
  3. 지원하는 데이터 형식의 이름(예: "텍스트")을 입력합니다.

공유 활성화 처리

사용자가 앱을 선택할 때(일반적으로 공유 UI의 사용 가능한 대상 앱 목록에서 앱을 선택하면) OnShareTargetActivated 이벤트가 발생합니다. 사용자가 공유하려는 데이터를 처리하려면 앱에서 이 이벤트를 처리해야 합니다.

protected override async void OnShareTargetActivated(ShareTargetActivatedEventArgs args)
{
    // Code to handle activation goes here. 
} 

사용자가 공유하려는 데이터는 ShareOperation 개체에 포함됩니다. 이 개체를 사용하여 포함된 데이터의 형식을 검사할 수 있습니다.

ShareOperation shareOperation = args.ShareOperation;
if (shareOperation.Data.Contains(StandardDataFormats.Text))
{
    string text = await shareOperation.Data.GetTextAsync();

    // To output the text from this example, you need a TextBlock control
    // with a name of "sharedContent".
    sharedContent.Text = "Text: " + text;
} 

보고서 공유 상태

경우에 따라 앱이 공유하려는 데이터를 처리하는 데 시간이 걸릴 수 있습니다. 예를 들어 파일 또는 이미지 컬렉션을 공유하는 사용자가 있습니다. 이러한 항목은 단순 텍스트 문자열보다 크므로 처리하는 데 시간이 더 오래 걸립니다.

shareOperation.ReportStarted(); 

ReportStarted를 호출한 후에는 앱과 더 이상 사용자 상호 작용을 기대하지 마세요. 따라서 사용자가 앱을 해제할 수 있는 지점에 있지 않으면 앱을 호출해서는 안 됩니다.

확장된 공유를 사용하면 앱에 DataPackage 개체의 모든 데이터가 포함되기 전에 사용자가 원본 앱을 해제할 수 있습니다. 따라서 앱이 필요한 데이터를 획득했을 때 시스템에 알리는 것이 좋습니다. 이렇게 하면 시스템에서 필요에 따라 원본 앱을 일시 중단하거나 종료할 수 있습니다.

shareOperation.ReportSubmittedBackgroundTask(); 

문제가 발생하면 ReportError를 호출하여 오류 메시지를 시스템에 보냅니다. 사용자가 공유의 상태 검사 메시지가 표시됩니다. 이 시점에서 앱이 종료되고 공유가 종료됩니다. 사용자가 콘텐츠를 앱에 공유하려면 다시 시작해야 합니다. 시나리오에 따라 특정 오류가 공유 작업을 종료할 만큼 심각하지 않다고 결정할 수 있습니다. 이 경우 ReportError를 호출하지 않고 공유를 계속하도록 선택할 수 있습니다.

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

마지막으로 앱이 공유 콘텐츠를 성공적으로 처리한 경우 ReportCompleted를 호출하여 시스템에 알려야 합니다.

shareOperation.ReportCompleted();

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

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

QuickLink에는 제목, 아이콘 및 ID가 있어야 합니다. 사용자가 공유 참을 탭하면 제목(예: "엄마에게 전자 메일 보내기")과 아이콘이 표시됩니다. ID는 앱이 전자 메일 주소 또는 로그인 자격 증명과 같은 사용자 지정 정보에 액세스하는 데 사용하는 것입니다. 앱이 QuickLink를 만들 때 앱은 ReportCompleted를 호출하여 QuickLink를 시스템에 반환합니다.

QuickLink는 실제로 데이터를 저장하지 않습니다. 대신 선택 시 앱으로 전송되는 식별자가 포함됩니다. 앱은 QuickLink의 ID와 해당 사용자 데이터를 저장해야 합니다. 사용자가 QuickLink를 탭하면 QuickLinkId 속성을 통해 해당 ID를 가져올 수 있습니다.

async void ReportCompleted(ShareOperation shareOperation, string quickLinkId, string quickLinkTitle)
{
    QuickLink quickLinkInfo = new QuickLink
    {
        Id = quickLinkId,
        Title = quickLinkTitle,

        // For quicklinks, the supported FileTypes and DataFormats are set 
        // independently from the manifest
        SupportedFileTypes = { "*" },
        SupportedDataFormats = { StandardDataFormats.Text, StandardDataFormats.Uri, 
                StandardDataFormats.Bitmap, StandardDataFormats.StorageItems }
    };

    StorageFile iconFile = await Windows.ApplicationModel.Package.Current.InstalledLocation.CreateFileAsync(
            "assets\\user.png", CreationCollisionOption.OpenIfExists);
    quickLinkInfo.Thumbnail = RandomAccessStreamReference.CreateFromFile(iconFile);
    shareOperation.ReportCompleted(quickLinkInfo);
}

참고 항목