共用方式為


跨裝置人員 API

Windows 是適合第三方應用程式整合其頂級人員聯繫人的理想平臺。 這項整合可讓用戶與不同角色的體驗進行互動。 Windows 現在透過 API 為第三方 WinUI 3、UWP 和其他應用程式提供套件身分,以儲存他們所有的聯絡人。

一旦您的應用程式將聯繫人儲存在 Windows 中,使用者就能夠在 Windows 中的 [共用 ] 面板上看到這些聯繫人建議,以順暢地與其最上層聯繫人共用。 如需共用面板的詳細資訊,請參閱如何在 Windows 上 檔案總管 共用檔案。

建立用於 People 合約的使用者資料帳戶

從建立用戶帳戶開始。 需要第三方應用程式來建立 UserDataAccount 並用 UserDisplayName 作為 "com.microsoft.peoplecontract"

UserDataAccountStore udas =
    await UserDataAccountManager.RequestStoreAsync(UserDataAccountStoreAccessType.AppAccountsReadWrite);
UserDataAccount uda = await udas.CreateAccountAsync("com.microsoft.peoplecontract");

接下來,將 新增 "com.microsoft.windows.system" 至帳戶的 ExplictReadAccessPackageFamilyNames 清單。 這可提供第三方聯繫人對 Windows 體驗的限制存取。

uda.ExplictReadAccessPackageFamilyNames.Add("com.microsoft.windows.system");
await uda.SaveAsync();

儲存連絡人

儲存連絡人的第一個步驟是建立聯繫人清單。 若要這樣做,第三方應用程式必須在 Windows UserDataAccount 中建立 的新聯繫人清單。 應用程式可以選擇保留聯繫人清單的預設 OtherAppReadAccess 存取類型,同時將它設定為 None 可防止其他應用程式存取這些聯繫人。 請參閱 ContactListOtherAppReadAccess 列舉以獲得可用存取類型的完整清單。

ContactStore store = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AppContactsReadWrite);
this.contactList = await store.CreateContactListAsync(contactListsName, uda.Id);
contactList.OtherAppReadAccess = ContactListOtherAppReadAccess.None;
await contactList.SaveAsync();

儲存聯繫人時,第三方應用程式必須包含所有 Windows 體驗所需的相關資訊,以支持聯繫人功能。

儲存聯絡人時需要下列欄位:

  • FirstName
  • RemoteId
  • DisplayPicture

下列欄位為選用:

  • LastName
  • Phones
  • Emails

此代碼段示範如何儲存聯絡人:

foreach (var appContact in AppContacts)
{
  var cont = new Contact
  {
    FirstName = appContact.FirstName,
    LastName = appContact.LastName,
    RemoteId = appContact.Id,
    SourceDisplayPicture = RandomAccessStreamReference.CreateFromUri(new Uri(appContact.ProfilePicPath)),
    Phones = { new ContactPhone { Number = appContact.Phone } }
  };

  await this.contactList.SaveContactAsync(cont);
}

注意

聯絡人DisplayName 是使用 FirstNameLastName建構的 。 如果未提供姓氏, DisplayName 則會與名字所提供的字串相同。

儲存聯絡人的排名

您可以為 UserDataAccount 建立 批注清單,以儲存聯繫人的排名。 應用程式可以將批註新增至聯繫人,以儲存其最上層聯繫人的排名。 這些批注會儲存為聯繫人存放區中批注清單的一部分。

ContactAnnotationStore annotationStore = await
    ContactManager.RequestAnnotationStoreAsync(ContactAnnotationStoreAccessType.AppAnnotationsReadWrite);
this.contactAnnotationList = await annotationStore.CreateAnnotationListAsync(uda.Id);

您可以使用連絡人上的批注來儲存最上層聯絡人的排名。 排名會儲存在聯繫人批注的 ProviderProperties 中。 除了排名之外,應用程式必須將 SupportedOperations 設定在聯絡人標註上為 Share

foreach (var appContact in topAppContacts)
{
  Contact contact = await list.GetContactFromRemoteIdAsync(topAppContact.RemoteID);
  var annotation = new ContactAnnotation
  {
    ContactId = contact.Id,
    SupportedOperations = ContactAnnotationOperations.Share
  };
  annotation.ProviderProperties.Add("Rank", rank);
  await annotationsLst.TrySaveAnnotationAsync(annotation);
}

更新連絡人排名

在更新儲存在 Windows 中的連絡人排名時,應用程式會自行決定。 Windows 建議定期更新排名清單,以提供最佳的用戶體驗。 每當您需要更新排名清單時,都必須遵循數個步驟。

  1. 刪除 ContactAnnotationList

    一旦應用程式有已更新的頂端聯繫人清單,就可以刪除批注清單,並建立具有其頂端聯繫人更新批注的新批注清單。

    await this.contactAnnotationList.DeleteAsync();
    
  2. 建立新的 ContactAnnotationList。 請遵循 [儲存聯繫人的排名] 區段中的步驟,為您的最上層聯繫人建立新的批注清單和儲存排名。