데이터 받기
이 문서에서는 공유 계약을 사용하여 다른 앱에서 공유된 UWP(유니버설 Windows 플랫폼) 앱의 콘텐츠를 받는 방법을 설명합니다. 이 공유 계약을 사용하면 사용자가 공유를 호출할 때 앱이 옵션으로 표시될 수 있습니다.
앱을 공유 대상으로 선언
사용자가 공유를 호출할 때 시스템에서 가능한 대상 앱 목록을 표시합니다. 목록에 표시하려면 앱이 공유 계약을 지원한다고 선언해야 합니다. 이렇게 하면 시스템에서 콘텐츠를 받을 수 있는 앱을 알 수 있습니다.
- 매니페스트 파일을 엽니다. package.appxmanifest와 같이 호출해야 합니다.
- 선언 탭을 엽니다.
- 사용 가능한 선언 목록에서 공유 대상을 선택한 다음 추가를 선택합니다.
파일 형식 및 형식 선택
다음으로 지원되는 파일 형식 및 데이터 형식을 결정합니다. Share API는 텍스트, HTML 및 비트맵과 같은 여러 표준 형식을 지원합니다. 사용자 지정 파일 형식 및 데이터 형식을 지정할 수도 있습니다. 이렇게 하는 경우 원본 앱은 이러한 형식과 형식이 무엇인지 알고 있어야 합니다. 그렇지 않으면 해당 앱은 형식을 사용하여 데이터를 공유할 수 없습니다.
앱에서 처리할 수 있는 형식에 대해서만 등록합니다. 공유되는 데이터를 지원하는 대상 앱만 사용자가 공유를 호출할 때 표시됩니다.
파일 형식을 설정하려면 다음을 수행합니다.
- 매니페스트 파일을 엽니다. package.appxmanifest와 같이 호출해야 합니다.
- 선언 페이지의 지원되는 파일 형식 섹션에서 새로 추가를 선택합니다.
- 지원하려는 파일 이름 확장명을 입력합니다(예: ".docx"). 기간을 포함해야 합니다. 모든 파일 형식을 지원하려면 SupportsAnyFileType 검사 상자를 선택합니다.
데이터 형식을 설정하려면 다음을 수행합니다.
- 매니페스트 파일을 엽니다.
- 선언 페이지의 데이터 형식 섹션을 열고 새로 추가를 선택합니다.
- 지원하는 데이터 형식의 이름(예: "텍스트")을 입력합니다.
공유 활성화 처리
사용자가 앱을 선택할 때(일반적으로 공유 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를 만들 수 있습니다.
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);
}