Hinzufügen von Echtzeit-Chat zu Ihrem Unity-Spiel
Published: 2024-05-16 21:24:52

Echtzeit-Chat oder In-Game-Chat erhöht das Engagement der Spieler und fördert die Benutzerbindung. Der Echtzeit-Chat ermöglicht es den Spielern, miteinander zu kommunizieren, fördert das Gemeinschaftsgefühl und bietet eine Plattform für soziale Interaktion, die das Spielerlebnis noch angenehmer macht.

Die Einführung eines Echtzeit-Chats ist leichter gesagt als getan. Wenn man bei Null anfängt, braucht man eine Menge Ressourcen, um es aufzubauen, zu warten und zu skalieren, wenn die Spielerzahl steigt. Zum Glück ist es mit PubNub einfacher denn je, Echtzeitfunktionen in Unity-Spiele einzubauen - mit unserer Echtzeit-API-Plattform mit niedriger Latenz. Ganz gleich, ob Sie für Windows, Mac, iOS, Android, Virtual Reality-Systeme wie Oculus und Meta Quest oder plattformübergreifend entwickeln, unser [Unity-SDK](https://www.pubnub.com/docs/sdks/unity?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) bietet Ihnen alles.

Lesen Sie weiter, um zu erfahren, wie Sie mit PubNub einen Echtzeit-Chat zu Ihrem Unity-Videospiel hinzufügen können. Sie erfahren, wie Sie verschiedene Kanalmuster einrichten, wie Sie Nachrichten senden und empfangen und wie Sie Ihren Chat im Spiel mit anderen Funktionen wie Moderation, Emojis, Reaktionen und GIFs verbessern und absichern.

Erste Schritte mit PubNub
-------------------------

Bevor du mit der Einrichtung deines Ingame-Chats beginnst, musst du die PubNub-Plattform verstehen und wissen, wie du deine Anwendung konfigurierst, um die Funktionen der Plattform zu nutzen.

### Überblick

PubNub basiert auf dem Pub/Sub (Publish/Subscribe) Modell. Ein Benutzer [veröffentlicht](https://www.pubnub.com/docs/general/messages/publish?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) eine Nachricht, die im Wesentlichen eine Nutzlast ist, die alle relevanten Informationen enthält, im PubNub-Netzwerk. Benutzer, die die Nachricht empfangen oder anhören wollen, [abonnieren](https://www.pubnub.com/docs/general/messages/receive?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) das PubNub-Netzwerk und analysieren die Nachricht. Die Nachricht kann alles Mögliche enthalten, solange sie weniger als 32 KB groß ist (und vorzugsweise in JSON).

Um sicherzustellen, dass die Nachricht an die richtigen Empfänger gelangt, werden [Kanäle](https://www.pubnub.com/docs/general/channels/overview?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) als Mechanismus verwendet, über den die Daten von einem Gerät zum anderen übertragen werden. Kanäle werden jedes Mal benötigt, wenn ein Gerät im PubNub-Netzwerk veröffentlichen und abonnieren möchte. Während ein Benutzer immer nur eine Nachricht veröffentlichen kann, kann ein Benutzer viele verschiedene Kanäle gleichzeitig abonnieren und so auf eine Reihe von Nachrichten warten.

Während Sie den genauen Kanalnamen angeben müssen, wenn Sie eine Nachricht veröffentlichen, können Sie mehrere Kanäle gleichzeitig über [Multiplexing](https://www.pubnub.com/docs/general/channels/subscribe#channel-multiplexing?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) abonnieren, d. h. Sie abonnieren einen oder mehrere Kanäle, indem Sie die Kanalnamen als Array von Strings angeben.

Warum ist diese Information notwendig? Dein gesamtes Nachrichtensystem im Spiel wird auf dem Konzept der Channels basieren: _Wie du deinen Channel-Musternamen formatierst und sicherst, bestimmt, welche Art von Chat du willst_.

### Installieren und konfigurieren Sie das PubNub Unity SDK

Zu Beginn müssen Sie das PubNub Unity SDK konfigurieren, um Ihre Anwendung mit dem PubNub-Netzwerk zu verbinden. Bitte lesen Sie die [Unity SDK-Dokumentation](https://www.pubnub.com/docs/sdks/unity?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) für alle Details, aber als Überblick müssen Sie Folgendes tun:

1.  Fügen Sie das Unity-Paket über den [Paketmanager](https://www.pubnub.com/docs/sdks/unity#install-via-package-manager?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) hinzu.
2.  Erstellen Sie ein [kostenloses PubNub-Konto](https://admin.pubnub.com/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) und erhalten Sie Ihre PubNub-Keys. Es ist wichtig, dass Sie die Funktionen in Ihrem Keyset aktivieren, die Ihre Anwendung benötigt - für die wesentliche Pub/Sub-Funktionalität müssen Sie lediglich den Stream Controller aktivieren. Alle anderen Einstellungen, die Sie für erweiterte Funktionen konfigurieren müssen, werden wir natürlich auch behandeln.
3.  Geben Sie Unity die Publish- und Subscribe-Keys, die Sie im vorherigen Schritt erhalten haben, um das PubNub GameObject [zu konfigurieren](https://www.pubnub.com/docs/sdks/unity#configure-pubnub?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de). Du solltest auch eine UserId angeben, da jedes PubNub-Objekt einen eindeutigen Identifikator benötigt, um eine Verbindung zu PubNub herzustellen. Danach initialisieren Sie das PubNub-Objekt:

```js
using PubnubApi;
using PubnubApi.Unity;
…
PubNub pubnub = new Pubnub(pnConfiguration);
```

4.  Fügen Sie [Ereignis-Listener](https://www.pubnub.com/docs/sdks/unity#add-event-listeners?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) für Ihr Spiel hinzu, um auf Ereignisse und Nachrichten zu reagieren. Es gibt verschiedene Ereignis-Listener, um eine eigene Logik zu implementieren, die auf jede Art von Nachricht oder Ereignis reagiert, aber für die Kernfunktionalität des Austauschs von Chat-Nachrichten benötigen Sie lediglich den Nachrichten-Ereignis-Listener (Sie werden später in diesem Leitfaden lernen, wie Sie Ihrem Echtzeit-Chat zusätzliche Funktionen hinzufügen können, um ihn interessanter zu gestalten):

```js
var listener = new SubscribeCallbackListener();
pubnub.AddListener(listener);
listener.onMessage += OnPnMessage;
…
private void OnPnMessage(Pubnub pn, PNMessageResult<object> result) {
    Debug.Log($"Message received: {result.Message}");
}
```

Bevor Sie mit dem Veröffentlichen beginnen können, um Nachrichten an andere Geräte zu senden, und mit dem Abonnieren, um Nachrichten von den Veröffentlichern zu erhalten, müssen Sie den Namen Ihres Kanals festlegen. Denken Sie daran: Wie Sie Ihr Kanalmuster formatieren, bestimmt, welche Art von Chat Sie implementieren möchten.

Definieren verschiedener Chat-Muster
------------------------------------

Sie müssen sich überlegen, welche Arten von Chat Sie für Ihr Spiel implementieren wollen. In diesem Abschnitt geht es um das Muster, dem der Kanal folgen sollte, und nicht um die gesamte Einrichtung, um die erforderlichen Informationen von Ihrem Spiel oder Ihren Benutzern zu erhalten. Wenn Sie die verschiedenen Chat-Muster in einem Unity-Projekt sehen möchten, das PubNub verwendet, schauen Sie sich unser [Unity Showcase Game](https://github.com/PubNubDevelopers/unity-multiplayer-shooter) an.

### All/Global Chat

Der All- oder Global-Chat ermöglicht die Kommunikation zwischen allen Spielern in einem Spiel. Du kannst einen allgemeinen Chat einrichten, indem du Nachrichten in einem gemeinsamen Kanal veröffentlichst und abonnierst, den alle Spieler abonniert haben. Sie können die Channel-Struktur für globale Spieler einrichten:

```js
string allChat = “global”;
```

Jeder Client abonniert dann den Kanal und stellt sicher, dass alle Spieler dieselben Nachrichten in Echtzeit erhalten, wodurch ein gemeinsames Chaterlebnis entsteht, an dem alle Spieler teilnehmen können.

### Privater/Flüster-Chat

Der Privat- oder Flüster-Chat ermöglicht es den Spielern, persönliche Unterhaltungen zu führen, bei denen nur die beiden beteiligten Spieler miteinander chatten können und niemand sonst. Bei einem Privat- oder Flüster-Chat-Channel-Muster würde jeder Benutzer eine Channel-Struktur abonnieren, die für private Unterhaltungen vorgesehen ist:

```js
string privateChatBase= “chat.private.*”;
```

Dabei wird das Konzept des [Wildcard-Abonnements](https://www.pubnub.com/docs/general/channels/subscribe#wildcard-subscribe?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) verwendet. Diese Funktion kann verwendet werden, um eine hierarchische Liste von Channels zu abonnieren, wobei Sie mit einer einzigen Namensangabe viele Channels abonnieren können.

Wenn ein Benutzer beispielsweise eine private Nachricht an einen anderen Benutzer senden möchte, würde man die aktuelle PubNub-Benutzer-ID (oder UUID/uuid), die den eindeutigen Identifikator des Benutzers im PubNub-Netzwerk darstellt, mit der Benutzer-ID des beabsichtigten Empfängers der Nachricht verknüpfen. Während Sie die Benutzer-ID des aktuellen Benutzers immer abrufen können (über pubnub.GetCurrentUserId()), müssen Sie die Benutzer-ID des Empfängers abfragen. Sobald Sie die Benutzer-ID des Empfängers haben, können Sie den Kanal wie folgt verketten:

```js
string privateChatMessage = “chat.private.user-a-uuid&user-b-uuid”;
```

Da Sie ein Platzhalter-Kanalmuster wie chat.private.\* angeben, wird Ihre Anwendung alle Kanalnamen abonnieren, die diesem Muster entsprechen. Dadurch wird sichergestellt, dass Sie den Kanalnamen zur Laufzeit nicht immer kennen müssen. Schließlich wird durch die Verwendung der Benutzer-IDs sichergestellt, dass der Kanalname eindeutig ist und die Unterhaltung zwischen den beiden Benutzern bleibt.

### Freund/Buddy-Chat

Mit einem Freundschafts- oder Buddy-Chat können Spieler privat mit bestimmten Spielern kommunizieren, mit denen sie eine engere Beziehung aufbauen möchten, egal ob es sich um neu kennengelernte Spieler oder um Freunde außerhalb des Spiels handelt.

In einem Freundes-/Buddy-Chat müssen Sie ein Kanalmuster erstellen, das für jedes Gerät oder jeden Spieler eindeutig ist, ähnlich wie Sie das Kanalmuster für den privaten Chat erstellen würden, indem Sie Ihre Benutzer-ID anhängen:

```js
string chanFriendChat = "chat.friends.” + pubnub.GetCurrentUserId();”
```

Dies wiederholst du dann für jeden Benutzer, mit dem du befreundet sein möchtest - du ersetzt ihre Benutzer-IDs in der chanFriendChat-Zeichenfolge durch die von pubnub.GetCurrentUserId(). Obwohl das Channel-Muster nun vorhanden ist, kann man sich nicht einfach mit einem Wildcard-Muster wie chat.friends.\* anmelden; stattdessen braucht man einen Mechanismus, um festzustellen, welche Spieler Freunde sind.

Eine Lösung für dieses Problem sind die [Channel Groups](https://www.pubnub.com/docs/general/channels/subscribe#channel-groups?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) von PubNub, mit denen man eine große Anzahl von Channels auf einmal verwalten kann. Channel Groups sind im Wesentlichen ein Zeiger auf eine Liste von Channels; in diesem Fall ist die Channel Group eindeutig für den Spieler und enthält einen Verweis auf alle Freunde des Spielers:

```js
string chanGroupFriendChat = "chanGroupFriendChat_" + pubnub.GetCurrentUserId();
```

Hinweis: Die Namen der Kanalgruppen folgen den gleichen Konventionen wie die Namen der Kanäle, sie [können](https://www.pubnub.com/docs/general/channels/subscribe#channel-group-names?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) jedoch [keine Punkte](https://www.pubnub.com/docs/general/channels/subscribe#channel-group-names?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) in ihrem Namen [enthalten](https://www.pubnub.com/docs/general/channels/subscribe#channel-group-names?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de), daher der Unterschied in der Musterstruktur.

Ähnlich wie beim Abonnieren von Kanälen mit dem pubnub-Objekt (wird im nächsten Abschnitt erläutert) können Sie auch gleichzeitig Kanalgruppen abonnieren. Da der Spieler die Channel-Gruppe seines Freundes abonniert hat, wird jedes Mal, wenn ein neuer Freund hinzugefügt wird, der chanFriendChat dieses Freundes zur Friend-Channel-Gruppe des Spielers hinzugefügt und erhält Nachrichten im Message-Ereignis-Listener, sobald einer dieser Channels eine Nachricht veröffentlicht. Sie können zwar nicht in einer Kanalgruppe veröffentlichen, aber Sie können einfach eine Nachricht in einem der angeschlossenen Kanäle innerhalb der Kanalgruppe veröffentlichen, und jeder Abonnent (Freund) würde diese Nachricht erhalten.

Mit der [Channel Groups API für das PubNub Unity SDK](https://www.pubnub.com/docs/sdks/unity/api-reference/channel-groups?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) können Sie Freunde/Kanäle zu Channel Groups hinzufügen, auflisten und entfernen, wenn Sie die Berechtigung dazu haben. Die Channel-Gruppen-Funktion wird auch verwendet, um zu bestimmen, wann Freunde online/offline sind, was als Präsenz bezeichnet wird. Dies wird in unserer detaillierten Anleitung [zum Hinzufügen einer Freundesliste in Unity](https://www.pubnub.com/how-to/add-friend-list-to-your-unity-game/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) ausführlich behandelt.

### Gilden-/Allianz-/Clan-Chat

In Spielen, die Gilden, Allianzen oder Clans beinhalten, kann eine spezielle Chat-Umgebung die Teamkoordination und Kameradschaft stark fördern. Diese Art des Gruppenchats ermöglicht die Kommunikation zwischen mehreren Benutzern und fördert die Zusammenarbeit und das Teamwork unter einer größeren Anzahl von Spielern als nur Ihren Freunden. Ein Gilden-/Bündnis-/Clan-Chat ermöglicht es den Mitgliedern einer Gruppe, Strategien zu planen, Errungenschaften auszutauschen oder sich einfach zusammenzuschließen, um eine persönlichere Gemeinschaft innerhalb des Spiels zu bilden.

Die Einrichtung eines solchen Chats mit PubNub erfolgt nach demselben Konzept wie die Einrichtung eines Freundes-/Buddy-Chats. Du erstellst Channel-Gruppen für jeden Typ, abonnierst diese Channel-Gruppen und fügst Freunde zu diesen Channel-Gruppen hinzu, wenn sie dazu berechtigt sind. Alle Nachrichten, die in einem mit diesen Channel-Gruppen verbundenen Channel veröffentlicht werden, lösen den Event-Listener aus und Sie können den Chat entsprechend anzeigen.

Kanalgruppen sind eine großartige Möglichkeit, große Gruppen zu verwalten, da die Kanalgruppe eines Spielers [2000 Kanäle](https://www.pubnub.com/docs/general/channels/subscribe#channel-groups?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) (in diesem Fall Spieler) [verwalten](https://www.pubnub.com/docs/general/channels/subscribe#channel-groups?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) kann, was selbst für die größten Gilden in Massive Online Games mehr als ausreichend ist. Noch besser ist, dass jeder einzelne Client, der mit dem PubNub-Netzwerk verbunden ist, 10 Channel Groups haben kann, was bedeutet, dass du bei Bedarf Zugang zu 20.000 Channels hast.

### Party-/Lobby-Chat

Party- oder Lobby-Chats sind für kleine, zeitlich begrenzte Gruppen gedacht, die für eine bestimmte Spielsitzung oder Mission gebildet werden. Obwohl diese Chatarten für unterschiedliche Zwecke gedacht sind, ähnelt ihre Implementierung dem Muster für die Erstellung eines privaten/geflüsterten Chatkanals.

Erstellen Sie zunächst eine Basiszeichenkette für jede Art von Gruppenchat. Wenn Sie Ihr Array von Kanälen abonnieren (im nächsten Schritt besprochen), verwenden Sie einen Platzhalter, um auf alle Anfragen zu hören:

```js
string chanChatParty = “chat.party.” + “*”;
string chanChatLobby= “chat.lobby.” + “*”;
```

Wenn die Lobby oder Gruppe gebildet wird, wird ein Spieler als Anführer oder Besitzer der Gruppe bestimmt, unabhängig davon, ob er die Gruppe initiiert hat oder ob er aufgrund seiner Internetverbindung und Region bestimmt wurde. Diese Art von Spielern werden Gruppenleiter oder Gastgeber genannt. Sie würden dann die Benutzer-ID des Host-Spielers mit einer Basiszeichenkette verketten und so ein eindeutiges Kanalmuster erstellen. Jeder neue Spieler, der eingeladen wird, der Gruppe oder der Lobby beizutreten, abonniert diese Channels dynamisch, so dass er effektiv der Gruppe beitritt. Der Channel kann dann gelöscht werden, wenn die Party oder Lobby beendet oder aufgelöst wurde.

Alles zusammenfügen
-------------------

Sobald Sie festgelegt haben, welche Chat-Typen Sie auf der Grundlage des Kanalmusters in Ihr Spiel implementieren möchten, ist es an der Zeit, Nachrichten in Echtzeit zu senden und zu empfangen, indem Sie diese Kanäle veröffentlichen und abonnieren.

### Nachrichten veröffentlichen

Der Prozess beginnt mit der Erstellung des Nachrichteninhalts. Dies kann ein einfacher Text-Chat oder eine komplexere Datenstruktur sein, je nach den Anforderungen Ihres Unity-Spiels. Sobald die Nutzlast fertig ist, ist es an der Zeit, die Nachricht zu veröffentlichen.

Die [Publish-API](https://www.pubnub.com/docs/sdks/unity/api-reference/publish-and-subscribe#publish?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) wird verwendet, um eine Nachricht an alle Abonnenten des angegebenen Chat-Kanals zu senden. Obwohl Sie nur einen Kanal gleichzeitig veröffentlichen können, wird die Veröffentlichung asynchron durchgeführt, so dass der Rest Ihres Codes nicht blockiert wird (obwohl Sie auch synchron veröffentlichen können, wenn Sie möchten).

Wenn Sie zum Beispiel eine Chat-Nachricht an den Teilnehmer senden möchten, würden Sie den folgenden Aufruf machen, um nicht nur zu veröffentlichen, sondern auch festzustellen, ob der PubNub-Aufruf erfolgreich war (und zu behandeln, wenn der Aufruf fehlgeschlagen ist):

```js
PNResult<PNPublishResult> publishResponse = await pubnub.Publish()
  .Message(“Ready to go!”)
  .Channel(chanChatParty )
  .ExecuteAsync();
PNPublishResult publishResult = publishResponse.Result;
PNStatus status = publishResponse.Status;
Debug.Log("pub timetoken: " + publishResult.Timetoken.ToString());
Debug.Log("pub status code : " + status.StatusCode.ToString());
```

### Abonnieren von Nachrichten

Wenn Nachrichten veröffentlicht werden, müssen wir die entsprechenden Kanäle [abonnieren](https://www.pubnub.com/docs/sdks/unity/api-reference/publish-and-subscribe#receive-messages?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de), um alle eingehenden Nachrichten und Ereignisse zu empfangen. Sie können mehrere Chat-Kanäle und Kanalgruppen mit einem einzigen Aufruf abonnieren:

```js
pubnub.Subscribe<string>()
  .Channels(new List<string>() {
    chanChatAll,
    chanPrivateChat,
    chanChatParty + "*",
    chanChatLobby + "*"               
})
  .ChannelGroups(new List<string>() {
    chanFriendGroupChat + userId,
    chanGuildGroupChat + userId,
    chanAllianceGroupChat + userId
})
.Execute();
```

Der Player ist nun mit dem PubNub-Netzwerk verbunden, und die [Ereignis-Listener](https://www.pubnub.com/docs/sdks/unity#add-event-listeners?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) warten auf das Eintreten eines Ereignisses - in diesem Fall das Eintreffen einer neuen Nachricht - und führen dann den mit diesem Ereignis verbundenen Code aus.

Wenn eine Nachricht eintrifft, löst der Listener einen Callback aus und führt den Code aus, den Sie für die Behandlung eingehender Nachrichten geschrieben haben. Das kann so einfach sein wie die Anzeige der Nachricht in einem Chatraum oder etwas Komplexeres wie das Auslösen von Ereignissen im Spiel auf der Grundlage von Chatnachrichten.

Erweiterte Funktionen, um den Chat im Spiel fesselnd zu gestalten
-----------------------------------------------------------------

Gute Arbeit - Sie haben erfolgreich einen In-Game-Chat in Ihr Unity-Spiel implementiert, über den die Spieler Nachrichten in Echtzeit senden und empfangen können! Die implementierte Funktionalität ist jedoch nur die Spitze des Eisbergs - es gibt noch viele weitere Funktionen, die Sie implementieren sollten, um den Chat im Spiel für Ihre Spieler noch interessanter zu machen.

### Nachrichtenverlauf laden: Persistenz von Nachrichten

In einem Spiel kann es vorkommen, dass Spieler frühere Unterhaltungen nachlesen oder verpasste Chats nachholen müssen. Hier kommt die [Message Persistence](https://www.pubnub.com/docs/general/storage?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) ins Spiel, die es ermöglicht, den Verlauf von Chat-Nachrichten zu speichern und abzurufen. Durch die Implementierung der Message Persistence-API in Ihrem Unity-Spiel können Sie Chat-Nachrichten, Nachrichtenaktionen und Dateien bei Bedarf speichern und abrufen:

```js
PNResult<PNFetchHistoryResult> fetchHistoryResponse = await pubnub.FetchHistory()
  .Channels(new string[] { chanPrivateChat })
  .IncludeMeta(true)
  .MaximumPerChannel(25)
  .ExecuteAsync();
```

Wir bieten auch die Flexibilität zu kontrollieren, wie lange Nachrichten gespeichert werden, so dass Sie die Speicherung basierend auf den spezifischen Bedürfnissen und Ressourcen Ihres Spiels verwalten können. Um die Nachrichtenpersistenz nutzen zu können, müssen Sie die Funktion im [Admin-Portal](https://admin.pubnub.com/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) für Ihre Schlüssel aktivieren. Weitere Informationen zu dieser Funktion und wie Sie sie aktivieren können, finden Sie in unserer [Anleitung zur Nachrichtenaufbewahrung](https://www.pubnub.com/how-to/admin-portal-persistence/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de).

### Spieler über verpasste Nachrichten benachrichtigen: Mobile Push-Benachrichtigungen

Bei mobilen Spielen kann es vorkommen, dass Spieler die App immer wieder verlassen und wichtige Nachrichten von ihrem Team oder Aktualisierungen des Spiels verpassen. Hier kommen die [mobilen Push-Benachrichtigungen](https://www.pubnub.com/docs/general/push/send?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) ins Spiel. Sie bieten eine Möglichkeit, Spieler über verpasste Chat-Nachrichten, Spiel-Updates oder andere wichtige Benachrichtigungen zu informieren, auch wenn sie nicht aktiv im Spiel sind.

Mit der [API für mobile Push-Benachrichtigungen](https://www.pubnub.com/docs/sdks/unity/api-reference/mobile-push?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) bieten wir eine einheitliche API, um Push-Benachrichtigungen sowohl an iOS- als auch an Android-Geräte zu senden. Dies vereinfacht den Prozess und ermöglicht es Ihnen, einen einzigen API-Aufruf zu senden, um alle Geräte zu benachrichtigen, unabhängig von der Plattform. Sie können Ihre Push-Benachrichtigungen auch individuell anpassen, z. B. personalisierte Benachrichtigungen an einzelne Spieler senden oder eine Nachricht an alle Spieler senden. Dank dieser Flexibilität können Sie effektiv mit Ihren Spielern kommunizieren und sie auf dem Laufenden halten.

Um Mobile Push-Benachrichtigungen mit PubNub nutzen zu können, müssen Sie Mobile Push-Benachrichtigungen aktivieren, indem Sie unserer [Anleitung](https://www.pubnub.com/how-to/push-notifications/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) im [Admin-Portal](https://admin.pubnub.com/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) folgen. Wir haben auch spezifischere, detaillierte Anleitungen für [FCM](https://www.pubnub.com/how-to/admin-portal-push-notifications-android/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) und [APNs](https://www.pubnub.com/how-to/admin-portal-push-notifications-apns/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) Mobile Push-Benachrichtigungen.

### Mehr als nur Worte: Emojis

Emojis dienen als universelle Sprache der Gefühle in der digitalen Kommunikation. Sie ermöglichen es den Spielern, ihre Gefühle und Reaktionen auf eine lustige und farbenfrohe Weise auszudrücken und machen den Chat interaktiver und ansprechender.

Mit PubNub können Sie Emoji-Unterstützung ganz einfach in Ihr Unity-Spiel implementieren, indem Sie die Spieler [Signale](https://www.pubnub.com/docs/general/messages/publish#send-signals?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) statt Nachrichten veröffentlichen lassen. Signale sind für das Senden von kleinen Datenmengen gedacht, da sie viel schneller und billiger zu senden sind als Nachrichten. Da Emojis in der Regel sehr kleine Datenmengen enthalten, ist dies der perfekte Weg, um die Daten schnell zu senden.

Sie können die [Signals API von PubNub](https://www.pubnub.com/docs/sdks/unity/api-reference/publish-and-subscribe#signal?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) verwenden, um Emojis in einem bestimmten Chat zu veröffentlichen. Wenn ein Spieler zum Beispiel ein winkendes Emoji an den globalen Chat senden möchte, wird der folgende Code ausgeführt, wenn er auf Senden drückt:

```js
Dictionary<string, string> myMessage = new Dictionary<string, string>();
myMessage.Add("emoji", ":wave:");
pubnub.Signal()
  .Message(myMessage)
  .Channel("global")
  .Execute((result, status) => {
    if (status.Error) {
      Debug.Log(status.ErrorData.Information);
    } else {
      Debug.Log(result.Timetoken);
    }
  });
```

Die Spieler, die als Empfänger vorgesehen sind, erhalten das Signal, wenn sie den angegebenen Kanal abonniert haben. Da es sich in diesem Fall um den globalen Kanal handelt, würde jeder das Emoji erhalten. Um auf Signale warten zu können, müssen Sie das Ereignis "Listener" abonnieren:

```js
listener.onSignal += OnPnSignal;
private void OnPnSignal(Pubnub pn, PNSignalResult<object> result) {
    // Handle the emoji by looking up the value and displaying the result.
}
```

Sie müssen sicherstellen, dass der Wert des Emojis ein tatsächliches Emoji darstellt, das in Unity definiert ist. Diese Emojis können im PubNub-Netzwerk über [App Context](https://www.pubnub.com/docs/sdks/unity/api-reference/objects?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) (früher als Objects bezeichnet) gespeichert und abgerufen werden, sodass alle Emojis, auf die der Player Zugriff hat, aus dem serverlosen Speicher abgerufen werden können. Weitere Informationen zur Implementierung von App Context in Ihrem Unity-Spiel finden Sie in unserem Leitfaden.

### Reagieren Sie auf Nachrichten: Nachrichten-Reaktionen

[Nachrichtenreaktionen](https://www.pubnub.com/docs/sdks/unity/api-reference/message-actions?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) wie Likes, Herzen, Daumen hoch, Sticker oder benutzerdefinierte spielspezifische Reaktionen bieten Spielern eine schnelle und einfache Möglichkeit, auf Chat-Nachrichten zu reagieren. Sie bringen nicht nur Interaktivität in den Chat, sondern fördern auch das Gemeinschaftsgefühl, indem sie den Spielern die Möglichkeit geben, die Nachrichten der anderen zu bestätigen und sich mit ihnen auseinanderzusetzen.

Mit der [Message Actions API](https://www.pubnub.com/docs/sdks/unity/api-reference/message-actions?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) von PubNub können Sie Funktionen wie Reaktionen und Lesebestätigungen erstellen oder Nachrichten mit benutzerdefinierten Metadaten verknüpfen. Ähnlich wie Chat-Anwendungen wie Discord unterschiedliche Reaktionen und Emojis für verschiedene Server haben, könnten auch Ihre verschiedenen Chat-Typen. Sie können die verfügbaren Nachrichtenreaktionen für den angegebenen Chat-Kanal mit dem folgenden Aufruf abrufen, wenn der Chat geladen wird:

```js
pubnub.GetMessageActions()
  .Channel(chanChatLobby)
  .Execute(new PNGetMessageActionsResult((result, status) => 
  {
    //result is of type PNGetMessageActionsResult.
  }));
```

Wenn ein Spieler im Begriff ist, auf eine Nachricht mit einer Reaktion zu antworten, können Sie dies tun, indem Sie eine Nachrichtenreaktion zu einer veröffentlichten Nachricht hinzufügen:

```js
pubnub.AddMessageAction()
  .Channel(chanChatLobby)
  .MessageTimetoken(5610547826969050)
  .Action(new PNMessageAction { Type = "reaction", Value = "smiley_face" })
  .Execute(new PNAddMessageActionResult((result, status) =>
  {
    //result is of type PNAddMessageActionResult.
  }));
```

PubNub verwendet Zeit-Token, um genau zu verfolgen, wann eine Nachricht im Netzwerk veröffentlicht wurde. Wenn Sie Nachrichten empfangen, ist die Zeit auch in der Nutzlast enthalten. Sie können dann den entsprechenden Zeit-Token-Wert im MessageTimetoken()-Argument angeben, um auf die Nachricht reagieren zu können.

Um auf die Reaktion zu warten und den Player zu benachrichtigen, der die ursprüngliche Nachricht gesendet hat, müssen Sie einen Listener hinzufügen und die Reaktion in der Methode OnPNMessageAction verarbeiten:

```js
listener.onMessageAction += OnPnMessageAction;
…
private void OnPnMessageAction(Pubnub pn, PNMessageActionEventResult result) {
   //Handle Message Reaction
}
```

Ähnlich wie bei Emojis können Sie [App Context](https://www.pubnub.com/docs/sdks/unity/api-reference/objects?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) verwenden, um abzurufen und zu speichern, wie diese Reaktionen in Ihrem Spiel visuell dargestellt werden. Um Message Reactions nutzen zu können, müssen Sie sicherstellen, dass [Message Persistence](https://www.pubnub.com/how-to/admin-portal-persistence/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) für Ihre Schlüssel im [Admin Portal](https://admin.pubnub.com/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) aktiviert ist.

### GIFs und andere Multimedia

Eine weitere wichtige Funktion, die das Chat-Erlebnis verbessert, ist der Austausch von Multimedia-Dateien. Ob GIFs, Screenshots von lustigen Momenten oder sogar die gemeinsame Nutzung von Spielressourcen - die gemeinsame Nutzung von Dateien bringt eine weitere Interaktionsebene in Ihr Spiel.

Die Implementierung dieser Arten von Multimedia-Dateien erfolgt über die [PubNub File Sharing API](https://www.pubnub.com/docs/sdks/unity/api-reference/files?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de). Mit dieser Funktion können Spieler Dateien, auf die sie Zugriff haben, hochladen, herunterladen und löschen. Um eine Datei zu senden, müssen Sie den folgenden Aufruf tätigen:

```js
PNResult<PNFileUploadResult> fileUploadResponse = await pubnub.SendFile()
  .Channel(string chanFriendChatSamantha)
  .File("cat_picture.jpg") //checks the bin folder if no path is provided
  .Message("Look at this photo!")
  .ExecuteAsync();
PNFileUploadResult fileUploadResult = fileUploadResponse.Result;
PNStatus fileUploadStatus = fileUploadResponse.Status;
if (!fileUploadStatus.Error && fileUploadResult != null)
{
  Debug.Log(pubnub.JsonPluggableLibrary.SerializeToJsonString(fileUploadResult));
}
else
{
  // Handle File Upload Error.
}
```

Damit die Abonnenten auf die Datei warten können, müssen Sie den Ereignis-Listener hinzufügen und in der OnPNFile-Methode festlegen, wie die Datei angezeigt werden soll:

```js
listener.onFile += OnPnFile;
…
private void OnPnFile(Pubnub pn, PNFileEventResult result) {
    //Handle how to display the file received
}
```

Sie können auch Informationen abrufen, auflisten und alle Dateien löschen, die mit verschiedenen Chat-Kanälen verbunden sind. Sie müssen sicherstellen, dass Sie die Dateifreigabefunktion im Verwaltungsportal sowie die Nachrichtenpersistenz aktivieren. Mehr dazu erfahren Sie in unserer Anleitung zum [Aktivieren von Dateien](https://www.pubnub.com/how-to/admin-portal-enabling-files/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de).

### Sichern Sie Ihre Chat-Kanäle: Zugriffsmanager

In jeder Spielumgebung ist die Gewährleistung der Sicherheit von Chat-Kanälen von größter Bedeutung. Ob es darum geht, Spieler vor unerwünschten Nachrichten zu schützen oder sensible strategische Diskussionen zu sichern, das Chatsystem Ihres Unity-Spiels muss mit Blick auf die Sicherheit entwickelt werden.

Hier kommt der [Access Manager](https://www.pubnub.com/docs/sdks/unity/api-reference/access-manager?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) von PubNub ins Spiel. Er bietet einen robusten und flexiblen Rahmen für die Sicherung Ihrer Chat-Kanäle. Mit dem Access Manager können Sie kontrollieren, wer jeden Ihrer Channels veröffentlichen oder abonnieren kann, und so dem Chatsystem Ihres Unity-Spiels eine zusätzliche Sicherheitsebene hinzufügen.

Mit Access Manager können Sie Berechtigungen auf Benutzerebene, Channelebene oder sogar auf der Ebene einzelner Schlüssel erteilen. Sie können festlegen, ob ein Benutzer einen Kanal lesen, schreiben oder verwalten darf, und diese Berechtigungen können dynamisch aktualisiert werden, wenn sich die Anforderungen Ihres Spiels ändern. In einem privaten Chat zwischen zwei Spielern können Sie beispielsweise nur diesen beiden Spielern die Lese- und Schreibberechtigung für ihren privaten Kanal erteilen. Ebenso können Sie in einem Gilden-Chat allen Gildenmitgliedern Lese- und Schreibrechte erteilen, während Sie nur dem Gildenleiter Verwaltungsrechte erteilen.

Access Manager unterstützt auch die Token-basierte Authentifizierung, die es Ihnen ermöglicht, Benutzer sicher zu authentifizieren und ihnen die entsprechenden Berechtigungen zu erteilen. Auf diese Weise wird sichergestellt, dass nur autorisierte Spieler auf die Chat-Kanäle Ihres Spiels zugreifen können, um Ihre Spielgemeinschaft vor potenziellen Bedrohungen zu schützen.

Um diese Funktion nutzen zu können, müssen Sie sicherstellen, dass Sie Access Manager im [Admin-Portal](https://admin.pubnub.com/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) aktivieren. Weitere Informationen dazu finden Sie auf dieser [Support-Seite](https://support.pubnub.com/hc/en-us/articles/360051974791-How-do-I-enable-add-on-features-for-my-keys-?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) zur Aktivierung dieser Zusatzfunktion.

Wie geht's weiter?
------------------

In dieser Anleitung haben Sie gelernt, wie Sie ein robustes Echtzeit-Chat-System zu Ihrem Unity-Spiel hinzufügen können. Wir haben alles besprochen, von der Initialisierung eines PubNub-Objekts in Ihrer Umgebung über das Einrichten eines Chat-Musters, das verschiedene Chat-Typen repräsentiert, bis hin zum Senden und Empfangen von Nachrichten. Sie haben sogar gelernt, wie man fortgeschrittene Funktionen wie Emojis, Nachrichtenreaktionen und Dateifreigabe implementiert, sowie die wichtigen Aspekte eines guten Chatsystems mit Nachrichtenpersistenz, mobilen Push-Benachrichtigungen und Kanalsicherheit.

Ganz gleich, ob Sie ein Indie-Entwickler sind, der an seinem ersten Spiel arbeitet, oder ein erfahrener Entwickler, der sein Multiplayer-Spiel verbessern möchte - die Echtzeit-Funktionalität von PubNub kann als Infrastruktur zur Unterstützung Ihres In-Game-Chats dienen, so dass Sie sich auf das Wesentliche konzentrieren können.

Erfahren Sie mehr mit den folgenden Ressourcen:

-   Lesen Sie unsere [Unity-Dokumentation](https://www.pubnub.com/docs/sdks/unity?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de), um alles zu erfahren, was Sie über das Hinzufügen von Echtzeit-Chat zu Ihrem Spiel wissen müssen.
-   Verstehen Sie, wie man eine [Freundesliste](https://www.pubnub.com/how-to/add-friend-list-to-your-unity-game/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=de) hinzufügt, mit unserem Unity-Leitfaden.
-   Erfahren Sie, wie unser [Unity Showcase Game](https://github.com/PubNubDevelopers/unity-multiplayer-shooter) Chat-Muster verwendet, um Chat-Räume und mehr zu verwalten.
-   Tauchen Sie ein in den [Quellcode des Unity SDK](https://github.com/pubnub/unity).

Bei Fragen oder Problemen können Sie sich jederzeit an das Developer Relations Team unter [devrel@pubnub.com](mailto:devrel@pubnub.com) wenden.