---
metadata:
  - name: generator
    content: Diplodoc Platform v5.52.0
alternate:
  - https://yandex.com/dev/games/doc/en/sdk/defold/player-data.md
  - https://yandex.com/dev/games/doc/hi/sdk/defold/player-data.md
  - https://yandex.com/dev/games/doc/ko/sdk/defold/player-data.md
  - https://yandex.com/dev/games/doc/ru/sdk/defold/player-data.md
  - https://yandex.com/dev/games/doc/tr/sdk/defold/player-data.md
  - https://yandex.com/dev/games/doc/vi/sdk/defold/player-data.md
  - https://yandex.com/dev/games/doc/zh/sdk/defold/player-data.md
  - href: vi/sdk/defold/player-data.md
    type: text/markdown
    title: Markdown version
  - href: ../../llms.txt
    type: text/markdown
    title: llms.txt
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.com/dev/games/doc/vi/llms.txt

# Dữ liệu người chơi

Bạn có thể lưu dữ liệu trạng thái trò chơi của người chơi (chẳng hạn như cấp độ đã hoàn thành, kinh nghiệm hoặc mua hàng trong trò chơi) trên máy chủ Yandex hoặc gửi dữ liệu này đến máy chủ của bạn. Bạn cũng có thể tạo ra trải nghiệm tùy chỉnh theo cá nhân hơn thông qua dữ liệu từ hồ sơ Yandex của người dùng, ví dụ: tên của người dùng.

## Thông tin về người chơi

```lua
ysdk.player.get_info(
    callback: function,
    options: {
        scopes: boolean|nil,
        signed: boolean|nil
    }
)
```

`callback: function` — callback của phương thức được gọi. Có dạng:

```lua
function(self, player: table|nil, signature: string|nil): nil
```

- `player: table` — thông tin về người chơi. Chứa các thuộc tính:

```lua
player = {
    logged_in: boolean,
    unique_id: string,
    name: string,
    photo: {
        small: string,
        medium: string,
        large: string
    }
}
```

**Ví dụ**

```lua
function init_player()
  ysdk.player.get_info(function(self, player)
      if player then
        display_player(self, player)
      else
        ysdk.player.open_auth_dialog(function(self, authorized)
          ysdk.player.get_info(display_player, {})
        end)
      end
    end,
    {})
end

function display_player(player)
  if player then
    print(player.name, signature)
  end
end
```

## Đăng nhập người dùng {#auth}

Nếu người chơi chưa đăng nhập, bạn có thể sử dụng phương thức `ysdk.player.open_auth_dialog()` để hiển thị cửa sổ đăng nhập.

```lua
ysdk.player.open_auth_dialog(callback: function)
```

`callback: function` — callback của phương thức được gọi. Có dạng:

```lua
function(self, authorized: boolean): nil
```

- `authorized: boolean` — người chơi đã đăng nhập hay chưa.

## Dữ liệu trong trò chơi

Để làm việc với dữ liệu trong trò chơi của người dùng, hãy sử dụng các phương thức của đối tượng `Player`:

- `ysdk.player.set_data(data, flush)` — lưu dữ liệu người dùng. Kích thước dữ liệu tối đa không được vượt quá 200&nbsp;KB. {#setdata}

    - `data: table` — chứa các cặp khóa-giá trị.
    - `flush: boolean` — xác định thứ tự gửi dữ liệu. Nếu giá trị là `true`, dữ liệu sẽ được gửi lên máy chủ ngay lập tức; `false` (giá trị mặc định) — yêu cầu gửi dữ liệu sẽ được xếp vào hàng đợi.

Phương thức trả về một `Promise` cho biết dữ liệu đã được lưu thành công hay chưa.

Nếu tham số `flush` có giá trị là `false`, kết quả trả về chỉ kiểm tra tính hợp lệ của dữ liệu (việc gửi thực tế sẽ được xếp hàng đợi và thực hiện sau). Trong trường hợp này, phương thức `ysdk.player.get_data()` sẽ trả về dữ liệu vừa mới được thiết lập bởi lần gọi gần nhất của `ysdk.player.set_data()`, ngay cả khi chúng chưa được gửi đến máy chủ.

- `ysdk.player.get_data(callback, keys)` — yêu cầu lấy dữ liệu trong game của người dùng đã được lưu trong cơ sở dữ liệu Yandex.

    - `callback: fun(self, data: table<string, any>)` — hàm callback để xử lý dữ liệu trong game nhận được của người dùng.
    - `keys: table<number, string>` — danh sách các khóa cần trả về. Nếu không truyền tham số `keys`, phương thức sẽ trả về tất cả dữ liệu trong game của người dùng.

- `ysdk.player.set_stats(stats)` — lưu dữ liệu số của người dùng. Kích thước dữ liệu tối đa không được vượt quá 10 KB.

    - `stats: table<string, number>` — chứa các cặp khóa-giá trị, trong đó mỗi giá trị là một số.

{% note info "Ghi chú" %}

Sử dụng phương thức này cho các giá trị số thường xuyên thay đổi (điểm số, điểm kinh nghiệm, tiền tệ trong game) thay vì [ysdk.player.set_data()](#setdata).

{% endnote %}

- `ysdk.player.increment_stats(increments)` — thay đổi dữ liệu trong game của người dùng. Kích thước tối đa của dữ liệu không được vượt quá 10 KB.
    - `increments: table<string, number>` — đối tượng chứa các cặp key-value, trong đó mỗi giá trị phải là số.
- `ysdk.player.get_stats(callback, keys)` — lấy dữ liệu dạng số của người dùng được lưu trong cơ sở dữ liệu của Yandex.
- `callback: fun(self, data: table<string, number>|nil)` — hàm xử lý dùng để làm việc với dữ liệu dạng số nhận được của người dùng.
- `keys: string[]` — danh sách các key cần trả về. Nếu tham số keys không có, phương thức sẽ trả về tất cả dữ liệu trong game của người dùng.

## Định danh người dùng

```lua
ysdk.player.get_ids_per_game(callback: function)
```

`callback: function` — callback của phương thức đã được gọi. Có dạng:

```lua
function(self, ids: {appID: number, userID: string}[]): nil
```

- `ids` — danh sách các mã định danh của người dùng trong tất cả các trò chơi của nhà phát triển, trong đó người dùng đã đồng ý rõ ràng về việc truyền dữ liệu cá nhân. Bao gồm các thuộc tính:
    - `app_id: string` — mã định danh của ứng dụng.
    - `user_id: string` — mã định danh của người dùng.

**Ví dụ**

```lua
function log_ids()
  ysdk.player.get_ids_per_game(function(self, ids)
    for _, value in ipairs(ids) do
      print(value.app_id, value.user_id)
    end
  end)
end
```

---


<!-- source: vi/_includes/button-git-defold.md -->
<a href="https://github.com/yandex-games-plugins/defold">
  <span class="button">Kho lưu trữ</span>
</a>
<!-- endsource: vi/_includes/button-git-defold.md -->
