Windows에 연락처 추가

패키지 ID가 있는 앱은 Windows에 연락처를 저장할 수 있습니다. 이러한 연락처는 People Widget, Windows 검색 및 공유 시트에 제안으로 표시될 수 있습니다. 이 문서에서는 사용자 데이터 계정을 만들고, 연락처를 저장하고, Windows 환경에 대한 액세스를 구성하는 방법을 보여 줍니다.

People 계약에 대한 UserDataAccount 만들기

먼저 사용자 데이터 계정을 만듭니다. 다음과 같이 UserDataAccountUserDisplayName만들려면 타사 앱이 "com.microsoft.peoplecontract" 필요합니다.

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

다음으로, 계정의 "com.microsoft.windows.system" 목록에 을 추가합니다. 이렇게 하면 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);
}

Note

DisplayName은 와FirstName를 사용하여 LastName에 대해 구성됩니다. 성이 제공되지 않으면, DisplayName은 이름에 제공된 문자열과 동일하게 됩니다.

명시적 연락처만 기여

앱은 사용자가 명시적으로 추가하거나 권한을 부여한 연락처만 기여해야 합니다. 안 하세요.

  • 전체 주소록 업로드
  • 사용자 동의 없이 연락처 자동 동기화
  • 명시적 권한 없이 회사 디렉터리에서 연락처 공유

Windows People에 연락처를 저장하기 전에 권한을 요청하세요.

private async Task<bool> RequestContactStoreAccessAsync()
{
    // Requesting a writable ContactStore prompts the user for consent.
    // Your app must declare the contacts capability in its manifest.
    ContactStore store = await ContactManager.RequestStoreAsync(
        ContactStoreAccessType.AppContactsReadWrite);
    return store != null;
}

사용자 개인 정보 설정 준수

사용자에게 다음 작업 허용:

  • Windows 공유할 연락처 선택
  • Windows People 통합 옵트아웃
  • 언제든지 Windows 연락처 삭제
// Provide a setting to disable sync
if (this.ShouldSyncContactsWithWindows)
{
    await SyncContactsAsync();
}
else
{
    // Clear contacts if the user disables sync
    await ClearWindowsContactsAsync();
}