Ta emot delade data i din Windows-app

Med Windows Share-kontraktet kan din app visas i Windows Share Sheet som en målapp– så att användarna kan dela innehåll från andra appar direkt till din. Den här artikeln beskriver hur du hanterar delat innehåll när din app har aktiverats som delningsmål.

Innan du följer stegen nedan, registrera appen som ett delningsmål:

Note

Aktiveringsmodellen för WinUI 3-skrivbordsappar skiljer sig från UWP. I WinUI 3 hanteras delningsaktivering via AppInstance.GetActivatedEventArgs() i appens startkod, inte via Application.OnShareTargetActivated(). API:erna ShareOperation och DataPackageView som beskrivs i den här artikeln fungerar på samma sätt när du har skaffat ShareTargetActivatedEventArgs. Se Integrera paketerade appar med Windows Share för Windows App SDK aktiveringsmönstret.

Välj dataformat som ska stödjas

När du deklarerar appen som ett resursmål i paketmanifestet anger du vilka filtyper och dataformat som appen kan ta emot. Endast appar som stöder de format som delas visas i resursdokumentet.

Du kan konfigurera typer som stöds på två sätt:

Använda Visual Studio-manifestredigeraren:

  1. Öppna package.appxmanifest i Visual Studio.
  2. Välj fliken Deklarationer .
  3. Välj Dela mål i listan Tillgängliga deklarationer och välj sedan Lägg till.
  4. Under Filtyper som stöds lägger du till filnamnstilläggen som appen hanterar (till exempel .jpg, .png). Välj SupportsAnyFileType för att acceptera alla filtyper.
  5. Under Dataformat lägger du till formatnamnen som appen hanterar (till exempel Text, Uri, Bitmap).

Direkt i manifest-XML:

<Extensions>
  <uap:Extension Category="windows.shareTarget">
    <uap:ShareTarget>
      <uap:SupportedFileTypes>
        <uap:SupportsAnyFileType />
      </uap:SupportedFileTypes>
      <uap:DataFormat>Text</uap:DataFormat>
      <uap:DataFormat>Uri</uap:DataFormat>
      <uap:DataFormat>Bitmap</uap:DataFormat>
      <uap:DataFormat>StorageItems</uap:DataFormat>
    </uap:ShareTarget>
  </uap:Extension>
</Extensions>

Registrera dig endast för format som din app kan hantera. Om du deklarerar ett format men inte kan bearbeta det blir användarupplevelsen lidande.

Läs delade data

När din app aktiveras som ett delningsmål får du ett ShareOperation-objekt via ShareTargetActivatedEventArgs. Dess Data egenskap är en DataPackageView som exponerar det delade innehållet.

Använd Contains för att kontrollera vilka format som är tillgängliga och anropa sedan lämplig asynkron metod för att hämta data:

ShareOperation shareOperation = args.ShareOperation;

if (shareOperation.Data.Contains(StandardDataFormats.Text))
{
    string text = await shareOperation.Data.GetTextAsync();
    // Process the shared text.
}

if (shareOperation.Data.Contains(StandardDataFormats.WebLink))
{
    Uri webLink = await shareOperation.Data.GetWebLinkAsync();
    // Process the shared link.
}

if (shareOperation.Data.Contains(StandardDataFormats.StorageItems))
{
    IReadOnlyList<IStorageItem> items = await shareOperation.Data.GetStorageItemsAsync();
    // Process the shared files or folders.
}

Rapportdelningsstatus

Om bearbetningen av delade data tar tid– till exempel att ladda upp filer till en server – rapporterar du förloppet till systemet med hjälp av ShareOperation-statusmetoderna . På så sätt kan systemet hantera källappens livscykel på rätt sätt.

Anropa dessa metoder i följande ordning när delningsåtgärden fortskrider:

Method När du ska ringa
RapportStartad Så snart din app börjar bearbeta delningen. Efter denna punkt bör du inte förvänta dig ytterligare användarinteraktion med delningsgränssnittet.
RapportdataHämtad När appen har hämtat alla data som behövs från DataPackageView. Detta gör att systemet kan pausa eller avsluta källappen.
ReportSubmittedBackgroundTask Om din app fortsätter att bearbetas i bakgrunden efter att delningsgränssnittet har stängts.
RapportSlutförd När appen har slutfört bearbetningen av det delade innehållet.
RapporteraFel Om ett allvarligt fel inträffar. Användaren ser meddelandet och delningsåtgärden avslutas.
shareOperation.ReportStarted();

try
{
    string text = await shareOperation.Data.GetTextAsync();
    shareOperation.ReportDataRetrieved();

    // Perform any additional processing here...
    await ProcessSharedDataAsync(text);

    shareOperation.ReportCompleted();
}
catch (Exception)
{
    shareOperation.ReportError("Something went wrong. Please try again.");
}

Note

Anropa endast ReportError vid fel som är tillräckligt allvarliga för att avsluta delningsåtgärden. För återställningsbara fel kan du fortsätta bearbetningen utan att anropa ReportError.

Note

Det finns fall där en målapp kan anropa ReportDataRetrieved före ReportStarted– till exempel om din app hämtar data som en del av aktiveringshanteringen, men bara anropar ReportStarted senare när användaren uttryckligen väljer knappen Dela .

När en användare delar innehåll till din app kan du returnera en QuickLink för att göra framtida delning snabbare. En QuickLink visas som en genväg i resursbladet, till exempel en kontaktgenväg som gör att användaren snabbt kan dela med kontakten igen utan att navigera i appens användargränssnitt.

A QuickLink har en rubrik, en ikon och ett ID. ID:t är appens interna identifierare för genvägen, till exempel ett kontakt-ID eller kontonamn. När användaren senare väljer en QuickLinkaktiverar systemet appen och skickar QuickLink tillbaka ID:t via ShareOperation.QuickLinkId.

Returnera en QuickLink genom att skicka den till ReportCompleted:

private async Task ReportCompletedWithQuickLink(
    ShareOperation shareOperation, string quickLinkId, string quickLinkTitle)
{
    QuickLink quickLinkInfo = new QuickLink
    {
        Id = quickLinkId,
        Title = quickLinkTitle,

        // QuickLink supported types are configured independently from the manifest.
        SupportedFileTypes = { "*" },
        SupportedDataFormats =
        {
            StandardDataFormats.Text,
            StandardDataFormats.WebLink,
            StandardDataFormats.Bitmap,
            StandardDataFormats.StorageItems
        }
    };

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

    shareOperation.ReportCompleted(quickLinkInfo);
}

Note

En QuickLink lagrar endast ID:t – inte associerade data. Din app ansvarar för att spara användardata (till exempel kontaktuppgifter) och hämta dem när aktiveras QuickLink via ShareOperation.QuickLinkId.

Se även