Roblox weist jedem Benutzer eine eindeutige domänenspezifische Benutzer-ID pro Spiel oder App zu, mit denen sie interagieren. Diese Seite erklärt, wie die domänenspezifische Identifizierung funktioniert und wie Sie den User-Typ in Ihrem Spielcode verwenden.
Die folgenden Konzepte sind zentral für die Benutzeridentifizierung:
| Konzept | Beschreibung |
|---|---|
| Benutzer | Ein dauerhaftes Konto auf Roblox. |
| Spieler | Die Darstellung eines Benutzers im Datenmodell eines laufenden Spiels (siehe Spieler). |
| User Datentyp | Ein Datentyp, der die Identität eines Benutzers innerhalb einer bestimmten Domäne darstellt. Dies ist der Standardbezeichner zur Referenzierung von Benutzern im Spielcode. |
| Domänenspezifische Benutzer-ID | Ein numerischer Bezeichner, der einen Benutzer innerhalb einer bestimmten Domäne eindeutig identifiziert. Diese ID ist in jedem Spiel und jeder App unterschiedlich. |
Domänenspezifische Benutzer-IDs
Eine domänenspezifische Benutzer-ID ist ein eindeutiger Bezeichner, der einem Benutzer innerhalb eines bestimmten Spiels oder Apps zugewiesen wird. Im Gegensatz zu einer globalen Benutzer-ID ist eine domänenspezifische Benutzer-ID nur innerhalb der Domäne bedeutungsvoll, die sie ausgegeben hat. Daher hat derselbe Benutzer in jedem Spiel oder jeder App, mit der er interagiert, eine andere domänenspezifische Benutzer-ID. Spieler, die Ihrem Spiel vor dem Rollout der spezifischen ID beigetreten sind, behalten ihre ursprüngliche globale Benutzer-ID in diesem Spiel (siehe Rückkehrende Spieler).
Domänentypen werden durch Enum.DomainType dargestellt:
| Domänentyp | Geltend für | Beispiel |
|---|---|---|
| Enum.DomainType.EXPERIENCE | Ein spezifisches Spiel (Universum) | Die ID eines Spielers in Ihrem Spiel |
| Enum.DomainType.OAUTH | Eine spezifische OAuth-Anwendung | Die ID eines Benutzers in Ihrem externen Tool |
Funktionsweise der domänenspezifischen IDs
Wenn ein Spieler Ihr Spiel betritt, erhält er eine domänenspezifische Benutzer-ID, die einzigartig für dieses Spiel ist. Derselbe Spieler, der ein anderes Spiel betritt, erhält eine andere domänenspezifische Benutzer-ID. Das bedeutet:
- Domänenspezifische Benutzer-IDs sind Ganzzahlen, ähnlich wie bestehende globale Benutzer-IDs.
- Eine domänenspezifische Benutzer-ID kollidiert nicht mit einer bestehenden globalen Benutzer-ID.
- Der gleiche numerische Wert kann in verschiedenen Domänen für verschiedene Benutzer erscheinen. Der eindeutige Schlüssel ist die Kombination aus Domänentyp, Domänen-ID und domänenspezifischer Benutzer-ID.
Beispielszenario
Das folgende Beispiel zeigt, wie verschiedene Spiele dasselbe Benutzerkonto referenzieren:
| Szenario | Benutzerkontext | Benutzer-ID, die vom Spiel gesehen wird |
|---|---|---|
| Benutzer verbindet sich mit Spiel A | Rückkehrender Spieler (vor dem Rollout der spezifischen IDs besucht) | 123 (globale ID, unverändert) |
| Benutzer verbindet sich mit Spiel B | Erster Besuch nach dem Rollout der spezifischen ID | 500789 (domänenspezifische Benutzer-ID für Spiel B) |
| Benutzer verbindet sich mit Spiel C | Erster Besuch nach dem Rollout der spezifischen ID | 302441 (domänenspezifische Benutzer-ID für Spiel C) |
Rückkehrende Spieler
Wenn ein Spieler Ihrem Spiel bereits vor dem Rollout der spezifischen Benutzer-ID beigetreten ist, behält er seine ursprüngliche globale Benutzer-ID in diesem Spiel. Dies stellt sicher, dass bestehende Datenspeicher-Schlüssel, Bestenlisten und Inventare weiterhin ohne Änderungen funktionieren.
Arbeiten mit dem Benutzertyp
User ist der Standardweg, um Benutzer im Spielcode zu identifizieren. Ein User-Wert trägt die domänenspezifische Benutzer-ID zusammen mit dem Domänentyp und der Domänen-ID, sodass der Identitätskontext immer mit dem Bezeichner verknüpft ist. Weitere Einzelheiten zur API finden Sie im User-Referenz.
Einen Benutzer von einem Spieler erhalten
Der Hauptweg, um einen User zu erhalten, ist von einem verbundenen Player über Player.User:
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
local user = player.User
print("Domänenbenutzer-ID:", user.Id)
print("Domänentyp:", user.DomainType)
print("Domänen-ID:", user.DomainId)
end)
Einen Benutzer aus einer ID erstellen
Um einen User aus einer bekannten Benutzer-ID im aktuellen Spiel zu erstellen, verwenden Sie User.fromId():
local user = User.fromId(knownUserId)
Verwendung von User mit Engine-APIs
Engine-APIs, die einen Benutzer-ID-Parameter akzeptieren, akzeptieren auch User-Werte direkt. Es wird empfohlen, User zu verwenden:
-- Beide Formen funktionieren:BadgeService:AwardBadge(player.User, badgeId) -- EmpfohlenBadgeService:AwardBadge(player.UserId, badgeId)
-- Beide Formen funktionieren:local target = Players:GetPlayerByUserId(player.User) -- Empfohlenlocal target = Players:GetPlayerByUserId(someUserId)
Wenn eine numerische Benutzer-ID an eine Engine-API übergeben wird, die Benutzer-IDs akzeptiert, wird sie intern automatisch in User umgewandelt.
Engine-APIs, die Benutzer-IDs zurückgeben
Engine-APIs, die numerische Benutzer-IDs zurückgeben, verwenden weiterhin dieselben Feldnamen und -typen. Jede zurückgegebene ID ist entweder eine globale ID oder eine domänenspezifische Benutzer-ID, je nachdem, ob der Benutzer dem Spiel vor oder nach dem Rollout der spezifischen ID beigetreten ist:
- Rückkehrende Spieler (zuerst beigetreten vor dem Rollout der spezifischen ID) — die API gibt die globale Benutzer-ID des Benutzers zurück.
- Neue Spieler (zuerst beigetreten nach dem Rollout der spezifischen ID) — die API gibt die domänenspezifische Benutzer-ID des Benutzers zurück.
Sowohl globale als auch domänenspezifische Benutzer-IDs sind Standardganzzahlen, die nicht kollidieren, sodass bestehender Code, der diese numerischen Felder liest, weiterhin funktioniert.
Speicherung der Benutzeridentität
Für Datenspeicher-Schlüssel innerhalb eines einzelnen Spiels verwenden Sie user.Id direkt:
local key = ("player_%d"):format(player.User.Id)PlayerDataStore:SetAsync(key, data)
Für Werte, die möglicherweise von anderen Systemen gelesen werden oder den vollständigen Domänenkontext erfordern, serialisieren Sie den User mit ToString():
local encoded = player.User:ToString()SomeDataStore:SetAsync("support_ticket_user", encoded)-- Später, von der Zeichenfolge wiederherstellenlocal user = User.fromString(encoded)
Weitere Einzelheiten zu den Garantien der Serialisierung finden Sie in der User-Referenz.
Best Practices
- Verwenden Sie Player.User als Standardbezeichner in neuem Code.
- Verwenden Sie keine numerische Benutzer-ID aus einer Domäne, um einen Benutzer in einer anderen Domäne zu identifizieren.