Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Windows, üçüncü taraf uygulamaların en iyi insanlarla olan kişilerini entegre etmesi için ideal bir platformdur. Bu tümleştirme, kullanıcıların çeşitli kişi deneyimleri için kişiliklerle etkileşim kurmasını sağlar. Windows artık üçüncü taraf WinUI ve diğer uygulamalara, tüm kişilerini depolaması için API'lerle paket kimliği sunar.
Uygulamalarınız kişilerini Windows'ta depoladıktan sonra, kullanıcılar bu kişi önerilerini Windows'taki Paylaş panelinde görebilir ve en iyi kişileriyle sorunsuz bir şekilde paylaşabilir. Paylaşım paneli hakkında daha fazla bilgi için bkz. Windows'da Dosya Gezgini'nde dosyaları paylaşma.
Kişiler İçin Kullanıcı Verisi Hesabı Oluşturma Sözleşmesi
Başlangıç olarak bir kullanıcı veri hesabı oluşturun.
UserDisplayName olarak bir "com.microsoft.peoplecontract" oluşturmak için üçüncü taraf uygulamalar gereklidir.
UserDataAccountStore udas =
await UserDataAccountManager.RequestStoreAsync(UserDataAccountStoreAccessType.AppAccountsReadWrite);
UserDataAccount uda = await udas.CreateAccountAsync("com.microsoft.peoplecontract");
Ardından, "com.microsoft.windows.system" hesabın ExplicitReadAccessPackageFamilyNames listesine ekleyin. Bu, üçüncü taraf kişilerin Windows deneyimlerine kısıtlanmış erişimini sağlar.
uda.ExplictReadAccessPackageFamilyNames.Add("com.microsoft.windows.system");
await uda.SaveAsync();
Kişileri depolama
Kişileri depolamanın ilk adımı bir kişi listesi oluşturmaktır. Bunu yapmak için, üçüncü taraf uygulamaların Windows ContactStore'nda için UserDataAccount yeni kişi listesini oluşturması gerekir. Uygulamalar kişi listesi için varsayılan OtherAppReadAccess erişim türünü korumayı seçebilirken, bunu olarak ayarlamak None diğer uygulamaların bu kişilere erişmesini engeller. Tam erişim türleri listesini görmek için ContactListOtherAppReadAccess enum türüne bakın.
ContactStore store = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AppContactsReadWrite);
this.contactList = await store.CreateContactListAsync(contactListsName, uda.Id);
contactList.OtherAppReadAccess = ContactListOtherAppReadAccess.None;
await contactList.SaveAsync();
Bir kişiyi depolarken üçüncü taraf uygulamalar, Windows deneyimlerinin bir Kişiyi desteklemek için gerekli tüm ilgili bilgileri içermesi gerekir.
Bir kişiyi kaydederken gerekli olan alanlar şunlardır:
FirstNameRemoteIdDisplayPicture
Aşağıdaki alanlar isteğe bağlıdır:
LastNamePhonesEmails
Bu kod parçacığı, bir iletişim bilgisinin veya kaydının nasıl depolandığını gösterir.
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);
}
Uyarı
DisplayName
İletişim için FirstName ve LastName kullanılarak oluşturulur. Soyadı belirtilmezse, DisplayName ad için belirtilen dizeyle aynı olacaktır.
Kişiler için dereceleri depolama
Kişilerinizin derecelendirmelerini depolamak için bir UserDataAccount ek açıklama listesi oluşturabilirsiniz. Uygulamalar, kişilere ek açıklamalar ekleyerek en önemli bağlantılarının sıralamalarını depolayabilir. Bu ek açıklamalar, iletişim deposundaki bir ek açıklama listesinin parçası olarak depolanır.
ContactAnnotationStore annotationStore = await
ContactManager.RequestAnnotationStoreAsync(ContactAnnotationStoreAccessType.AppAnnotationsReadWrite);
this.contactAnnotationList = await annotationStore.CreateAnnotationListAsync(uda.Id);
Kişilerdeki ek açıklamaları kullanarak en iyi kişilerinizin derecelerini depolayabilirsiniz. Dereceler, bir kişi ek açıklamasında ProviderProperties'in bir parçası olarak depolanır. Derecelendirmenin yanı sıra, uygulamaların kişi ek açıklamasında SupportedOperations değerini olarak Shareayarlaması gerekir.
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);
}
Kişi derecelerini güncelleştirme
Windows'ta depolanan kişilerin derecelerinin güncelleştirilirken uygulamaların takdirine bağlıdır. Windows, en iyi kullanıcı deneyimini sağlamak için dereceli listelerin düzenli olarak güncelleştirilmiş olmasını önerir. Dereceli listeyi güncelleştirmeniz gerektiğinde birkaç adımı izlemeniz gerekir.
ContactAnnotationList öğesini silin.
Uygulama güncellenmiş en iyi kişiler listesine sahip olduktan sonra, ek açıklama listesi silinebilir ve en iyi kişiler için güncellenmiş ek açıklamalar bulunduran yeni bir ek açıklama listesi oluşturulabilir.
await this.contactAnnotationList.DeleteAsync();Yeni bir
ContactAnnotationListoluşturun. Yeni bir açıklama listesi oluşturmak ve en iyi kişilerinize ait sıralamaları depolamak için Kişiler için Derecelendirmeleri Depolama bölümündeki adımları izleyin.
Derecelendirme için en iyi yöntemler
Paylaşım Sayfası'nın öneri satırındaki uygulamanızın kişilerinin alaka düzeyini en üst düzeye çıkarmak için şu sıralama ilkelerini izleyin:
Güncellik ve sıklığa göre sırala
Sıralamayı şunların birleşimi olarak hesaplayın:
- Güncellik: Kullanıcının her bir kişiyle en son ne zaman etkileşim kurduğu
- Sıklık: Kullanıcının her bir kişiyle etkileşim kurma sıklığı
Örneğin, kullanıcının dün mesaj olarak iletmiş olduğu bir kişi 95. sırada, 2 hafta önce iletilmiş bir kişi ise 60. dereceye sahip olabilir.
// lastInteraction and interactionCount come from your app's own interaction
// telemetry. The Windows Contact class does not expose interaction history.
private int CalculateRank(DateTime lastInteraction, int interactionCount)
{
TimeSpan daysSinceLastInteraction = DateTime.Now - lastInteraction;
int frequencyScore = interactionCount * 10; // Max ~100
int recencyScore = Math.Max(0, 100 - (daysSinceLastInteraction.Days * 3));
return (recencyScore + frequencyScore) / 2;
}
Eski kişileri kaldırma
Kullanıcının 30 günden fazla süredir etkileşim kurmadığı kişiler kaldırılmalıdır veya önemli ölçüde düşük dereceye alınmalıdır. Bu, önerileri güncel ve ilgili tutar:
private async Task PruneStaleContactsAsync()
{
var now = DateTime.Now;
var staleCutoff = now.AddDays(-30);
foreach (var contact in this.AllTrackedContacts)
{
if (contact.LastInteractionDate < staleCutoff)
{
// Remove the annotation or set rank to 0
var annotation = await GetAnnotationForContactAsync(contact);
if (annotation != null)
{
annotation.ProviderProperties["Rank"] = 0;
await this.contactAnnotationList.TrySaveAnnotationAsync(annotation);
}
}
}
}
Düzenli olarak derecelendirmeleri güncelleştirme
Güncelleştirmeleri uygulamanız için anlamlı bir tempoda (mesajlaşma uygulamaları için günlük, e-posta için haftalık veya takvim uygulamaları için aylık) zamanlayın. Gerekirse arka plan görevlerini kullanın:
// Example: Update ranks when the app comes to foreground or on a timer
private async void UpdateRanksOnAppActivated()
{
var topContacts = GetTopContactsByRecentActivity(50);
await UpdateAnnotationRanksAsync(topContacts);
}
Gizlilik ve onay
Yalnızca açıkça belirtilen kişileri ekleyin
Uygulamanız yalnızca kullanıcının açıkça eklediği veya yetkilendirdiği kişilere katkıda bulunmalıdır. Hiçbir zaman:
- Adres defterinin tamamını karşıya yükleyin
- Kullanıcı onayı olmadan kişileri otomatik eşitleme
- Kurumsal dizinlerdeki kişileri açık izin olmadan paylaşma
Kişileri Kişiler sisteminde depolamadan önce izin isteyin:
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;
}
Kullanıcı gizlilik ayarlarına saygı gösterin
Kullanıcıların şunları yapmasına izin ver:
- Windows ile paylaşacak kişileri seçme
- Kişiler entegrasyonunu devre dışı bırakın
- Kişilerini Windows’tan istediğiniz zaman silin
// Provide a setting to disable sync
if (this.ShouldSyncContactsWithWindows)
{
await SyncContactsAsync();
}
else
{
// Clear contacts if the user disables sync
await ClearWindowsContactsAsync();
}
Paylaşım Sayfası ile tümleştirme
Yukarıdaki yönergelerle kişilerinizi derecelerine göre sıraladığınızda ve koruduğunuzda, kullanıcılar uygulamanızın en önemli kişilerini Windows Paylaşım Sayfası'nın öneriler satırında görür. Bu yol şu anda People kişilerini destekliyor.
Kişilerinizin görünmesini sağlamak için:
-
DisplayName = "com.microsoft.peoplecontract"ile birUserDataAccountoluşturun - Zorunlu alanları bulunan kişileri kaydedin (
FirstName,RemoteId,DisplayPicture) -
ContactAnnotationListsıralamalarla oluşturun - Her ek açıklama için
SupportedOperations = Shareayarlayın - Sıralamaları güncellik ve sıklığa göre düzenli olarak güncelleyin
- 30 günden fazla süre sonra eski kişileri ayıklama
Sayfa Paylaşma tümleştirme kılavuzunun tamamı için bkz. Uygulamanızdan içerik paylaşma ve Uygulamanızda içerik alma .
İlgili içerik
Windows developer