Hinzufügen von Unterstützung für „Meine Kontakte“ zu einer Anwendung

Wichtig

Meine Kontakte wird in Windows 11 und Windows 10 Versionen mit KB5034203 nicht mehr unterstützt.

Hinweis

Ab dem Windows 10 May 2019 Update (Version 1903) werden neue Windows 10 Installationen nicht mehr standardmäßig „Personen in der Taskleiste“ anzeigen. Kunden können die Funktion aktivieren, indem sie mit der rechten Maustaste auf die Taskleiste klicken und „Personen in der Taskleiste anzeigen“ wählen. Entwicklern wird davon abgeraten, ihren Anwendungen Unterstützung für Meine Kontakte hinzuzufügen. Sie sollten den Windows Developer Blog aufrufen, um weitere Informationen zur Optimierung von Apps für Windows 10 zu erhalten.

Mit der Funktion „Meine Kontakte“ können Benutzer Kontakte aus einer Anwendung direkt an ihre Taskleiste anheften, wodurch ein neues Kontaktobjekt entsteht, mit dem sie auf verschiedene Weise interagieren können. Dieser Artikel zeigt, wie Sie diese Funktion unterstützen können, so dass Benutzer Kontakte direkt in Ihrer App anheften können. Wenn Kontakte angeheftet werden, stehen neue Arten der Benutzerinteraktion zur Verfügung, z. B. Meine Kontakte Sharing und Benachrichtigungen.

My people chat

Anforderungen

Überblick

Es gibt drei Dinge, die Sie tun müssen, damit Ihre Anwendung die Funktion „Meine Kontakte“ nutzen kann:

  1. Deklarieren Sie die Unterstützung für den shareTarget-Aktivierungsvertrag in Ihrem Anwendungsmanifest.
  2. Vermerken Sie die Kontakte, die die Nutzer über Ihre App mit anderen teilen können.
  3. Unterstützung mehrerer Instanzen Ihrer Anwendung, die gleichzeitig ausgeführt werden. Die Benutzer müssen in der Lage sein, mit einer Vollversion Ihrer Anwendung zu interagieren, während sie diese in einem Kontaktfeld verwenden. Sie können es sogar in mehreren Kontaktfeldern gleichzeitig verwenden. Um dies zu unterstützen, muss Ihre Anwendung in der Lage sein, mehrere Ansichten gleichzeitig auszuführen. Wie das geht, erfahren Sie in dem Artikel „Mehrere Ansichten für eine App anzeigen“.

Wenn Sie dies getan haben, erscheint Ihre Bewerbung im Kontaktfenster für kommentierte Kontakte.

Deklarierung der Unterstützung für den Vertrag

Um die Unterstützung für den Meine Kontakte-Vertrag zu deklarieren, öffnen Sie Ihre Anwendung in Visual Studio. Klicken Sie im Solution Explorer mit der rechten Maustaste auf Package.appxmanifest und wählen Sie Öffnen mit. Wählen Sie im Menü XML (Text) Editor) und klicken Sie auf OK. Nehmen Sie die folgenden Änderungen am Manifest vor:

Vorher

<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10">

	<Applications>
	    <Application Id="MyApp"
	      Executable="$targetnametoken$.exe"
	      EntryPoint="My.App">
	    </Application>
	</Applications>

After

<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
  xmlns:uap4="http://schemas.microsoft.com/appx/manifest/uap/windows10/4">

	<Applications>
	    <Application Id="MyApp"
	      Executable="$targetnametoken$.exe"
	      EntryPoint="My.App">
	      <Extensions>
	        <uap4:Extension Category="windows.contactPanel" />
	      </Extensions>
	    </Application>
	</Applications>

Mit dieser Ergänzung kann Ihre Anwendung nun über den Vertrag windows.ContactPanel gestartet werden, der Ihnen die Interaktion mit Kontaktfeldern ermöglicht.

Kontakte mit Anmerkungen versehen

Damit die Kontakte aus Ihrer Anwendung über den Bereich Meine Kontakte in der Taskleiste angezeigt werden können, müssen Sie sie in den Windows-Kontaktspeicher schreiben. Um zu lernen, wie man Kontakte schreibt, sehen Sie sich das Kontaktkartenbeispiel an.

Ihre Anwendung muss auch eine Anmerkung zu jedem Kontakt schreiben. Anmerkungen sind Datenteile aus Ihrer Anwendung, die mit einem Kontakt verbunden sind. Die Annotation muss die aktivierbare Klasse, die Ihrer gewünschten Ansicht entspricht, in ihrem ProviderProperties-Mitglied enthalten und die Unterstützung für die ContactProfile-Operation deklarieren.

Sie können Kontakte zu jedem beliebigen Zeitpunkt während der Ausführung Ihrer Anwendung mit Anmerkungen versehen, aber im Allgemeinen sollten Sie Kontakte mit Anmerkungen versehen, sobald sie dem Windows-Kontaktspeicher hinzugefügt werden.

if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 5))
{
	// Create a new contact annotation
	ContactAnnotation annotation = new ContactAnnotation();
	annotation.ContactId = myContact.Id;

	// Add appId and contact panel support to the annotation
	String appId = "MyApp_vqvv5s4y3scbg!App";
	annotation.ProviderProperties.Add("ContactPanelAppID", appId);
	annotation.SupportedOperations = ContactAnnotationOperations.ContactProfile;

	// Save annotation to contact annotation list
	// Windows.ApplicationModel.Contacts.ContactAnnotationList 
	await contactAnnotationList.TrySaveAnnotationAsync(annotation));
}

Die „appId“ ist der Name der Paketfamilie, gefolgt von „!“ und der ID der aktivierbaren Klasse. Um den Paketfamiliennamen zu finden, öffnen Sie Package.appxmanifest mit dem Standardeditor und suchen Sie auf der Registerkarte „Packaging“. Hier ist „App“ die aktivierbare Klasse, die der Startansicht der Anwendung entspricht.

Erlauben Sie Kontakten, neue potenzielle Nutzer einzuladen

Standardmäßig wird Ihre Anwendung im Kontaktbereich nur für Kontakte angezeigt, die Sie speziell mit Anmerkungen versehen haben. Dies dient dazu, Verwechslungen mit Kontakten zu vermeiden, mit denen Sie nicht über Ihre App interagieren können. Wenn Sie möchten, dass Ihre Anwendung bei Kontakten erscheint, die Ihrer Anwendung nicht bekannt sind (z. B. um Benutzer einzuladen, diesen Kontakt zu ihrem Konto hinzuzufügen), können Sie Folgendes zu Ihrem Manifest hinzufügen:

Vorher

<Applications>
	<Application Id="MyApp"
	  Executable="$targetnametoken$.exe"
	  EntryPoint="My.App">
	  <Extensions>
    	<uap4:Extension Category="windows.contactPanel" />
	  </Extensions>
	</Application>
</Applications>

After

<Applications>
	<Application Id="MyApp"
	  Executable="$targetnametoken$.exe"
	  EntryPoint="My.App">
	  <Extensions>
		<uap4:Extension Category="windows.contactPanel">
	    	<uap4:ContactPanel SupportsUnknownContacts="true" />
		</uap4:Extension>
	  </Extensions>
	</Application>
</Applications>

Mit dieser Änderung wird Ihre Anwendung als verfügbare Option im Kontaktbereich für alle Kontakte angezeigt, die der Benutzer angeheftet hat. Wenn Ihre Anwendung über den Vertrag des Kontaktbereichs aktiviert wird, sollten Sie prüfen, ob der Kontakt Ihrer Anwendung bekannt ist. Wenn nicht, sollten Sie das neue Benutzererlebnis Ihrer App zeigen.

My People contact panel

Unterstützung für E-Mail-Anwendungen

Wenn Sie eine E-Mail-Anwendung schreiben, müssen Sie nicht jeden Kontakt manuell mit Anmerkungen versehen. Wenn Sie die Unterstützung für das Kontaktfenster und das mailto:-Protokoll erklären, wird Ihre Anwendung automatisch für Benutzer mit einer E-Mail-Adresse angezeigt.

Laufen im Kontaktfeld

Nun, da Ihre Anwendung im Kontaktpanel für einige oder alle Benutzer erscheint, müssen Sie die Aktivierung mit dem Kontaktpanel-Vertrag handhaben.

override protected void OnActivated(IActivatedEventArgs e)
{
    if (e.Kind == ActivationKind.ContactPanel)
    {
        // Create a Frame to act as the navigation context and navigate to the first page
        var rootFrame = new Frame();

        // Place the frame in the current Window
        Window.Current.Content = rootFrame;

        // Navigate to the page that shows the Contact UI.
        rootFrame.Navigate(typeof(ContactPage), e);

        // Ensure the current window is active
        Window.Current.Activate();
    }
}

Wenn Ihre Anwendung mit diesem Vertrag aktiviert wird, erhält sie ein ContactPanelActivatedEventArgs-Objekt. Dieses enthält die ID des Kontakts, mit dem Ihre Anwendung beim Start interagieren möchte, und ein ContactPanel-Objekt. Sie sollten einen Verweis auf dieses ContactPanel-Objekt behalten, um mit dem Panel interagieren zu können.

Das ContactPanel-Objekt hat zwei Ereignisse, auf die Ihre Anwendung achten sollte:

  • Das LaunchFullAppRequested-Ereignis wird gesendet, wenn der Benutzer das UI-Element aufgerufen hat, das anfordert, dass Ihre vollständige Anwendung in einem eigenen Fenster gestartet wird. Ihre Anwendung ist dafür verantwortlich, sich selbst zu starten und den notwendigen Kontext zu übermitteln. Es steht Ihnen frei, dies nach Belieben zu tun (z. B. per Protokollstart).
  • Das Ereignis Closing wird gesendet, wenn Ihre Anwendung kurz vor dem Schließen steht, so dass Sie jeden Kontext speichern können.

Mit dem ContactPanel-Objekt können Sie auch die Hintergrundfarbe der Kopfzeile des Kontaktfeldes festlegen (wenn sie nicht festgelegt ist, wird das Systemthema verwendet) und das Kontaktfeld programmgesteuert schließen.

Unterstützung von Notification Badging (Benachrichtigungs-Badgeverleihung)

Wenn Sie möchten, dass an die Taskleiste angeheftete Kontakte gekennzeichnet werden, wenn neue Benachrichtigungen von Ihrer App eintreffen, die sich auf diese Person beziehen, dann müssen Sie den Parameter hint-people in Ihre Popup-Benachrichtigungen und expressiven Meine Kontakte-Benachrichtigungen aufnehmen.

People notification badging

Um einen Kontakt auszuzeichnen, muss der Popup-Knoten der obersten Ebene den Parameter hint-people enthalten, um den sendenden oder verwandten Kontakt anzugeben. Dieser Parameter kann einen der folgenden Werte annehmen:

Hier ist ein Beispiel dafür, wie eine Popup-Benachrichtigung einer bestimmten Person zugeordnet werden kann:

<toast hint-people="mailto:johndoe@mydomain.com">
    <visual lang="en-US">
        <binding template="ToastText01">
            <text>John Doe posted a comment.</text>
        </binding>
    </visual>
</toast>

Hinweis

Wenn Ihre Anwendung die ContactStore-APIs verwendet und die Eigenschaft StoredContact.RemoteId nutzt, um auf dem PC gespeicherte Kontakte mit entfernt gespeicherten Kontakten zu verknüpfen, ist es wichtig, dass der Wert für die RemoteId-Eigenschaft sowohl stabil als auch eindeutig ist. Das bedeutet, dass die Remote-ID durchgängig ein einzelnes Benutzerkonto identifizieren muss und ein eindeutiges Tag enthalten sollte, um sicherzustellen, dass sie nicht mit den Remote-IDs anderer Kontakte auf dem PC kollidiert, einschließlich Kontakten, die anderen Anwendungen gehören. Wenn die von Ihrer Anwendung verwendeten Remote-IDs nicht garantiert stabil und eindeutig sind, können Sie die später in diesem Thema vorgestellte Klasse RemoteIdHelper verwenden, um allen Ihren Remote-IDs ein eindeutiges Tag hinzuzufügen, bevor Sie sie dem System hinzufügen. Sie können auch auf die Verwendung der RemoteId-Eigenschaft verzichten und stattdessen eine benutzerdefinierte erweiterte Eigenschaft erstellen, in der Sie Remote-IDs für Ihre Kontakte speichern.

Die Klasse PinnedContactManager

Der PinnedContactManager wird verwendet, um zu verwalten, welche Kontakte an die Taskleiste angeheftet werden. Mit dieser Klasse können Sie Kontakte anheften und lösen, feststellen, ob ein Kontakt angeheftet ist, und ermitteln, ob das Anheften auf einer bestimmten Oberfläche von dem System, auf dem Ihre Anwendung gerade läuft, unterstützt wird.

Sie können das PinnedContactManager-Objekt mit der Methode GetDefault abrufen:

PinnedContactManager pinnedContactManager = PinnedContactManager.GetDefault();

Kontakte anheften und lösen

Mit dem soeben erstellten PinnedContactManager können Sie nun Kontakte anheften und lösen. Die Methoden RequestPinContactAsync und RequestUnpinContactAsync stellen dem Benutzer Bestätigungsdialoge zur Verfügung und müssen daher von Ihrem Application Single-Threaded Apartment (ASTA, oder UI) Thread aufgerufen werden.

async void PinContact (Contact contact)
{
    await pinnedContactManager.RequestPinContactAsync(contact,
                                                      PinnedContactSurface.Taskbar);
}

async void UnpinContact (Contact contact)
{
    await pinnedContactManager.RequestUnpinContactAsync(contact,
                                                        PinnedContactSurface.Taskbar);
}

Sie können auch mehrere Kontakte gleichzeitig anheften:

async Task PinMultipleContacts(Contact[] contacts)
{
    await pinnedContactManager.RequestPinContactsAsync(
        contacts, PinnedContactSurface.Taskbar);
}

Hinweis

Derzeit gibt es keine Batch-Operation zum Lösen von Kontakten.

Hinweis:

Siehe auch