Roblox przypisuje każdemu użytkownikowi unikalny identyfikator użytkownika w domenie w zależności od doświadczenia lub aplikacji, z którą wchodzi w interakcję. Ta strona wyjaśnia, jak działa identyfikacja w domenie oraz jak używać typu User w kodzie twojego doświadczenia.
Poniższe pojęcia są kluczowe dla identyfikacji użytkowników:
| Pojęcie | Opis |
|---|---|
| Użytkownik | Permanentne konto na Robloxie. |
| Gracz | Reprezentacja użytkownika w modelu danych działającego doświadczenia (zobacz Gracze). |
| typ danych User | Typ danych reprezentujący tożsamość użytkownika w konkretnej domenie. Jest to standardowy identyfikator do odnoszenia się do użytkowników w kodzie doświadczenia. |
| Identyfikator użytkownika w domenie | Numeryczny identyfikator, który unikalnie identyfikuje użytkownika w konkretnej domenie. Ten identyfikator jest inny w każdym doświadczeniu i aplikacji. |
Identyfikatory użytkowników w domenie
Identyfikator użytkownika w domenie to unikalny identyfikator przypisywany użytkownikowi w konkretnej doświadczeniu lub aplikacji. W odróżnieniu od globalnego identyfikatora użytkownika, identyfikator użytkownika w domenie ma znaczenie tylko w obrębie domeny, która go wydała, dlatego ten sam użytkownik ma inny identyfikator użytkownika w domenie w każdym doświadczeniu lub aplikacji, z którą wchodzi w interakcję. Gracze, którzy dołączyli do twojego doświadczenia przed wdrożeniem identyfikatora w domenie, zachowują swój pierwotny globalny identyfikator użytkownika w tym doświadczeniu (patrz Powracający gracze).
Typy domen są reprezentowane przez Enum.DomainType:
| Typ domeny | Ograniczone do | Przykład |
|---|---|---|
| Enum.DomainType.EXPERIENCE | Konkretne doświadczenie (uniwersum) | ID gracza w twoim doświadczeniu |
| Enum.DomainType.OAUTH | Konkretna aplikacja OAuth | ID użytkownika w twoim narzędziu zewnętrznym |
Jak działają identyfikatory w domenie
Gdy gracz dołącza do twojego doświadczenia, otrzymuje identyfikator użytkownika w domenie, który jest unikalny dla tego doświadczenia. Ten sam gracz, dołączając do innego doświadczenia, otrzymuje różny identyfikator użytkownika w domenie. Oznacza to:
- Identyfikatory użytkowników w domenie są liczbami całkowitymi, podobnie jak istniejące globalne identyfikatory użytkowników.
- Identyfikator użytkownika w domenie 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 oraz identyfikatora użytkownika w domenie.
Przykładowy scenariusz
Poniższy przykład ilustruje, jak różne doświadczenia odnoszą się do tego samego użytkownika:
| Scenariusz | Kontekst użytkownika | ID użytkownika widziane przez doświadczenie |
|---|---|---|
| Użytkownik łączy się z Doświadczeniem A | Powracający gracz (odwiedził wcześniej przed wprowadzeniem identyfikatorów w domenach) | 123 (globalny ID, bez zmian) |
| Użytkownik łączy się z Doświadczeniem B | Pierwsza wizyta po wprowadzeniu identyfikatora w domenie | 500789 (identyfikator użytkownika w domenie dla Doświadczenia B) |
| Użytkownik łączy się z Doświadczeniem C | Pierwsza wizyta po wprowadzeniu identyfikatora w domenie | 302441 (identyfikator użytkownika w domenie dla Doświadczenia C) |
Powracający gracze
Jeśli gracz dołączył już do twojego doświadczenia przed wdrożeniem identyfikatora użytkownika w domenie, zachowuje swój pierwotny globalny identyfikator użytkownika w tym doświadczeniu. Zapewnia to, że istniejące klucze w pamięci danych, tablice wyników i inwentarze działają bez jakichkolwiek zmian.
Praca z typem Użytkownika
User jest standardowym sposobem identyfikacji użytkowników w kodzie doświadczenia. Wartość User zawiera identyfikator użytkownika w domenie razem z typem domeny i identyfikatorem domeny, więc kontekst tożsamości zawsze podróżuje wraz z identyfikatorem. Aby uzyskać pełne szczegóły API, zobacz dokumentację User.
Pobierz Użytkownika z Gracza
Podstawowym sposobem uzyskania User jest połączenie z Player za pomocą Player.User:
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
local user = player.User
print("Identyfikator użytkownika w domenie:", user.Id)
print("Typ domeny:", user.DomainType)
print("Identyfikator domeny:", user.DomainId)
end)
Skonstruuj Użytkownika z ID
Aby utworzyć User z znanego identyfikatora użytkownika w aktualnym doświadczeniu, 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, również akceptują wartości User bezpośrednio. Zaleca się użycie User:
-- Obie formy działają:BadgeService:AwardBadge(player.User, badgeId) -- ZalecaneBadgeService:AwardBadge(player.UserId, badgeId)
-- Obie formy działają:local target = Players:GetPlayerByUserId(player.User) -- Zalecanelocal target = Players:GetPlayerByUserId(someUserId)
Gdy numeryczny identyfikator użytkownika jest przekazywany do API silnika, które akceptuje identyfikatory użytkowników, jest automatycznie opakowywany w User wewnętrznie.
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 jest identyfikatorem globalnym lub identyfikatorem użytkownika w domenie, w zależności od tego, czy użytkownik dołączył do doświadczenia przed czy po wdrożeniu identyfikatora w domenie:
- Powracający gracze (po raz pierwszy dołączyli przed uruchomieniem identyfikatora w domenie) — API zwraca globalny identyfikator użytkownika.
- Nowi gracze (po raz pierwszy dołączyli po uruchomieniu identyfikatora w domenie) — API zwraca identyfikator użytkownika w domenie.
Zarówno globalne, jak i identyfikatory użytkowników w domenie to standardowe liczby całkowite, które nie kolidują, więc istniejący kod, który odczytuje te pola numeryczne, nadal działa.
Przechowywanie tożsamości użytkownika
Dla kluczy w pamięci danych w jednym doświadczeniu 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 wymagają pełnego kontekstu domeny, serialized User za pomocą ToString():
local encoded = player.User:ToString()SomeDataStore:SetAsync("support_ticket_user", encoded)-- Później, przywróć ze stringalocal user = User.fromString(encoded)
Aby uzyskać więcej szczegółów 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.