Roblox przypisuje każdemu użytkownikowi unikalny identyfikator użytkownika przypisany do domeny dla każdej gry lub aplikacji, z którą wchodzi w interakcję. Ta strona wyjaśnia, jak działa identyfikacja przypisana do domeny oraz jak używać typu User w swoim kodzie gry.
Poniższe pojęcia są kluczowe dla identyfikacji użytkowników:
| Pojęcie | Opis |
|---|---|
| Użytkownik | Trwałe konto na Robloxie. |
| Gracz | Reprezentacja użytkownika w modelu danych działającej gry (patrz Gracze). |
| Typ danych User | Typ danych reprezentujący tożsamość użytkownika w konkretnej domenie. To standardowy identyfikator do odniesienia się do użytkowników w kodzie gry. |
| Identyfikator użytkownika przypisany do domeny | Numeryczny identyfikator, który unikalnie identyfikuje użytkownika w konkretnej domenie. Ten identyfikator różni się w każdej grze i aplikacji. |
Identyfikatory użytkowników przypisanych do domeny
Identyfikator użytkownika przypisany do domeny to unikalny identyfikator przypisany do użytkownika w konkretnej grze lub aplikacji. W przeciwieństwie do globalnego identyfikatora użytkownika, identyfikator przypisany do domeny ma sens tylko w obrębie domeny, która go wydała, więc ten sam użytkownik ma inny identyfikator użytkownika przypisany do domeny w każdej grze lub aplikacji, w której wchodzi w interakcję. Gracze, którzy dołączyli do Twojej gry przed wprowadzeniem identyfikatorów przypisanych do domeny, zachowują swój pierwotny globalny identyfikator użytkownika w tej grze (patrz Powracający gracze).
Typy domen są reprezentowane przez Enum.DomainType:
| Typ domeny | Przypisane do | Przykład |
|---|---|---|
| Enum.DomainType.EXPERIENCE | Konkretna gra (wszechświat) | ID gracza w Twojej grze |
| Enum.DomainType.OAUTH | Konkretna aplikacja OAuth | ID użytkownika w Twoim narzędziu zewnętrznym |
Jak działają identyfikatory przypisane do domeny
Kiedy gracz dołącza do Twojej gry, otrzymuje identyfikator użytkownika przypisany do domeny, który jest unikalny dla tej gry. Ten sam gracz dołączający do innej gry otrzymuje inny identyfikator użytkownika przypisany do domeny. Oznacza to:
- Identyfikatory użytkowników przypisane do domeny są liczbami całkowitymi, podobnie jak istniejące globalne identyfikatory użytkowników.
- Identyfikator użytkownika przypisany do domeny nie koliduje z żadnym istniejącym globalnym identyfikatorem użytkownika.
- Ta sama wartość numeryczna może występować w różnych domenach dla różnych użytkowników. Unikalnym kluczem jest kombinacja typu domeny, identyfikatora domeny i identyfikatora użytkownika przypisanego do domeny.
Przykład scenariusza
Poniższy przykład pokazuje, jak różne gry odwołują się do tego samego użytkownika:
| Scenariusz | Kontekst użytkownika | ID użytkownika widziane przez grę |
|---|---|---|
| Użytkownik łączy się z Grą A | Powracający gracz (odwiedzał wcześniej przed wprowadzeniem identyfikatorów przypisanych) | 123 (globalny ID, niezmieniony) |
| Użytkownik łączy się z Grą B | Pierwsza wizyta po wprowadzeniu identyfikatorów przypisanych | 500789 (identyfikator użytkownika przypisany do Grzy B) |
| Użytkownik łączy się z Grą C | Pierwsza wizyta po wprowadzeniu identyfikatorów przypisanych | 302441 (identyfikator użytkownika przypisany do Grzy C) |
Powracający gracze
Jeśli gracz dołączył do Twojej gry przed wprowadzeniem identyfikatorów użytkowników przypisanych, zachowuje swój oryginalny globalny identyfikator użytkownika w tej grze. Gwarantuje to, że istniejące klucze w magazynie danych, tablice liderów i inwentarze nadal będą działać bez żadnych zmian.
Praca z Typem Użytkownika
User to standardowy sposób identyfikacji użytkowników w kodzie gry. Wartość User przenosi identyfikator użytkownika przypisany do domeny wraz z typem domeny i identyfikatorem domeny, więc kontekst tożsamości zawsze podróżuje z identyfikatorem. Aby uzyskać pełne szczegóły API, zobacz dokumentację User.
Uzyskiwanie Użytkownika z Gracza
Podstawowym sposobem na uzyskanie User jest połączenie z Player przez Player.User:
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
local user = player.User
print("Identyfikator użytkownika domeny:", user.Id)
print("Typ domeny:", user.DomainType)
print("ID domeny:", user.DomainId)
end)Tworzenie Użytkownika z ID
Aby utworzyć User z znanego identyfikatora użytkownika w bieżącej grze, użyj User.fromId():
local user = User.fromId(knownUserId)Używanie Użytkownika z API silnika
API silnika, które akceptują parametr identyfikatora użytkownika, akceptują również wartości User bezpośrednio. Zaleca się użycie User:
-- Obie formy działają:
BadgeService:AwardBadge(player.User, badgeId) -- Zalecane
BadgeService:AwardBadge(player.UserId, badgeId)-- Obie formy działają:
local target = Players:GetPlayerByUserId(player.User) -- Zalecane
local target = Players:GetPlayerByUserId(someUserId)Kiedy numeryczny identyfikator użytkownika jest przekazywany do API silnika, które akceptuje identyfikatory użytkowników, jest automatycznie opakowywany wewnętrznie w User.
API silnika, które zwracają identyfikatory użytkowników
API silnika, które zwracają numeryczne identyfikatory użytkowników, nadal używają tych samych nazw pól i typów. Każdy zwrócony identyfikator to albo globalny identyfikator, albo identyfikator użytkownika przypisany do domeny, w zależności od tego, czy użytkownik dołączył do gry przed czy po wprowadzeniu identyfikatorów przypisanych:
- Powracający gracze (pierwsze połączenie przed wprowadzeniem identyfikatorów przypisanych) — API zwraca globalny identyfikator użytkownika.
- Nowi gracze (pierwsze połączenie po wprowadzeniu identyfikatorów przypisanych) — API zwraca identyfikator użytkownika przypisany do domeny.
Zarówno globalne, jak i identyfikatory użytkowników przypisane do domen są standardowymi liczbami całkowitymi, które nie kolidują, więc istniejący kod, który odczytuje te numeryczne pola, nadal będzie działać.
Przechowywanie tożsamości użytkownika
Dla kluczy magazynu danych w jednej grze, użyj user.Id bezpośrednio:
local key = ("player_%d"):format(player.User.Id)
PlayerDataStore:SetAsync(key, data)Dla wartości, które mogą być odczytywane przez inne systemy lub potrzebują pełnego kontekstu domeny, serializuj User za pomocą ToString():
local encoded = player.User:ToString()
SomeDataStore:SetAsync("support_ticket_user", encoded)
-- Później, przywróć z ciągu
local user = User.fromString(encoded)Aby uzyskać więcej informacji na temat gwarancji serializacji, zobacz dokumentację User.
Najlepsze praktyki
- Używaj Player.User jako standardowego identyfikatora w nowym kodzie.
- Nie używaj numerycznego identyfikatora użytkownika z jednej domeny do identyfikacji użytkownika w innej domenie.