朋友圈分享
重要
Windows 11 和已套用 KB5034203 的 Windows 10 版本不再支援朋友圈。
[朋友圈] 功能可讓使用者將連絡人釘選到其工作列,無論他們用來聯繫的應用程式為何,都能輕鬆地從 Windows 的任何位置保持聯繫。 現在,使用者可以將檔案從 [檔案總管] 拖曳到其 [朋友圈] 圖釘,與釘選的連絡人分享內容。 他們也可以透過標準分享常用鍵,分享給 Windows 連絡人存放區中的任何連絡人。 繼續閱讀以了解如何讓應用程式可成為 [朋友圈] 的分享目標。
需求
- Windows 10 和 Microsoft Visual Studio 2019。 如需安裝的詳細資料,請參閱開始設定 Visual Studio。
- C# 或類似物件導向程式設計語言的基本知識。 若要開始使用 C#,請參閱建立 "Hello, world" 應用程式。
概觀
您必須採取三個步驟,才能讓應用程式能成為朋友圈的分享目標:
- 在應用程式資訊清單中宣告對 shareTarget 啟動合約的支援。
- 標註使用者可以使用您的應用程式分享的連絡人。
- 支援同時執行多個應用程式的執行個體。 使用者必須能夠與應用程式的完整版本互動,同時也用它來分享給其他人。 他們可以同時在多個分享視窗使用它。 若要支援此功能,您的應用程式必須能夠同時執行多個檢視。 若要了解具體做法,請參閱「顯示應用程式的多重檢視」一文。
當您完成此步驟時,您的應用程式會出現在 [朋友圈] 分享視窗的共用目標,此視窗可透過兩種方式啟動:
- 透過分享常用鍵選擇某個連絡人。
- 將檔案拖放到釘選在工作列的連絡人。
宣告對共用合約的支援
若要宣告支援將您的應用程式當成共用目標,請先在 Visual Studio 中開啟您的應用程式。 在 [檔案總管] 中,以滑鼠右鍵按一下 Package.appxmanifest 並選取 [開啟方式]。 從功能表中,選取 [XML (文字) 編輯器],然後按一下 [確定]。 然後,對資訊清單進行下列變更:
之前
<Applications>
<Application Id="MyApp"
Executable="$targetnametoken$.exe"
EntryPoint="My.App">
</Application>
</Applications>
之後
<Applications>
<Application Id="MyApp"
Executable="$targetnametoken$.exe"
EntryPoint="My.App">
<Extensions>
<uap:Extension Category="windows.shareTarget">
<uap:ShareTarget Description="Share with MyApp">
<uap:SupportedFileTypes>
<uap:SupportsAnyFileType/>
</uap:SupportedFileTypes>
<uap:DataFormat>Text</uap:DataFormat>
<uap:DataFormat>Bitmap</uap:DataFormat>
<uap:DataFormat>Html</uap:DataFormat>
<uap:DataFormat>StorageItems</uap:DataFormat>
<uap:DataFormat>URI</uap:DataFormat>
</uap:ShareTarget>
</uap:Extension>
</Extensions>
</Application>
</Applications>
此程式碼會加入對所有檔案和資料格式的支援,但您可以選擇指定支援哪些檔案類型和資料格式 (如需詳細資料,請參閱 ShareTarget 類別文件)。
標註連絡人
若要允許 [朋友圈] 共用視窗將您的應用程式顯示在連絡人的共用目標中,您必須將他們寫入 Windows 連絡人存放區。 若要了解如何寫入連絡人,請參閱連絡人卡片整合範例。
若要讓應用程式在分享給連絡人時,顯示在 [朋友圈] 的分享目標中,它必須將標註寫入該連絡人。 標註是由應用程式所提供,與連絡人相關聯的的資料片段。 標註必須在其 ProviderProperties 成員中,包含對應至所需檢視的可啟動類別,並宣告對 Share 作業的支援。
您可以在應用程式執行時隨時標註連絡人,但通常應該在連絡人新增至 Windows 連絡人存放區時立即標註。
if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 5))
{
// Create a new contact annotation
ContactAnnotation annotation = new ContactAnnotation();
annotation.ContactId = myContact.Id;
// Add appId and Share support to the annotation
String appId = "MyApp_vqvv5s4y3scbg!App";
annotation.ProviderProperties.Add("ContactShareAppID", appId);
annotation.SupportedOperations = ContactAnnotationOperations::Share;
// Save annotation to contact annotation list
// Windows.ApplicationModel.Contacts.ContactAnnotationList
await contactAnnotationList.TrySaveAnnotationAsync(annotation);
}
“appId” 是套件系列名稱,後面接著 ‘!’ 以及可啟動類別識別碼。 若要尋找您的套件系列名稱,請使用預設編輯器開啟 Package.appxmanifest,然後查看 [封裝] 索引標籤。在這裡,「應用程式」是對應至共用目標檢視的可啟動類別。
以朋友圈共用目標方式來執行
最後,若要執行應用程式,請在您應用程式的主要類別中覆寫 OnShareTargetActivated 方法,以處理共用目標啟動。 ShareTargetActivatedEventArgs.ShareOperation.Contacts 屬性將包含要共用的連絡人,如果這是標準共用作業 (不是朋友圈共用) 則留為空白。
protected override void OnShareTargetActivated(ShareTargetActivatedEventArgs args)
{
bool isPeopleShare = false;
if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 5))
{
// Make sure the current OS version includes the My People feature before
// accessing the ShareOperation.Contacts property
isPeopleShare = (args.ShareOperation.Contacts.Count > 0);
}
if (isPeopleShare)
{
// Show share UI for MyPeople contact(s)
}
else
{
// Show standard share UI for unpinned contacts
}
}