Tài liệu Steamworks
Steam Cloud
Tóm tắt
Steam Cloud tự động lưu trữ file trò chơi trên máy chủ của Steam để người chơi có thể đăng nhập vào Steam và truy cập trò chơi đã lưu từ bất kỳ máy tính nào.
Mức độ tích hợp
Cần thiết lập đường dẫn file trên trang web Steamworks. Ngoài ra, các lệnh gọi API được yêu cầu từ trong code trò chơi đến Steamworks để trò chơi liệt kê, đọc, xóa, hoặc viết file vào Steam Cloud.

Tổng quan Steam Cloud

Steam Cloud cung cấp một hệ thống lưu trữ file từ xa dễ dàng và minh bạch cho trò chơi của bạn. File được xác định trong thiết lập Auto-Cloud hoặc ghi lên ổ đĩa (tạo ra, thay đổi, xóa v.v.) bằng cách dùng API Cloud sẽ tự động sao chép lên máy chủ Steam sau khi thoát trò chơi.

Nếu người dùng đổi máy tính, các file tự động được tải về máy mới trước khi khởi chạy trò chơi. Trò chơi sau đó các thể truy cập bằng cách đọc file thông qua API Cloud hoặc đọc trực tiếp từ ổ cứng như thông thường. Tránh các cấu hình dành riêng cho máy như thiết lập video.

Phần mềm Steam đảm bảo rằng các file được đồng bộ hóa trên tất cả máy tính mà người dùng có thể truy cập.

Người dùng có thể vô hiệu hóa chung việc đồng bộ Cloud trong thiết lập Steam dưới Cloud bằng cách bỏ chọn "Bật đồng bộ dữ liệu Steam Cloud cho các ứng dụng hỗ trợ."

Người dùng cũng có thể vô hiệu đồng bộ Cloud theo từng trò chơi trong thiết lập trò chơi.

Spacewar_Cloud_Properties.png

Lưu ý và phương pháp tối ưu


Điều quan trọng cần nhớ là Steam sẽ đồng bộ hóa file Steam Cloud của người dùng cho trò chơi trước và sau mỗi phiên chơi. Bất kỳ file tương ứng nào thay đổi trong phiên sẽ được tải lên lưu trữ Cloud liền sau đó. Nếu trò chơi ghi các file rất lớn hoặc nhiều file nhỏ lên Steam Cloud, thì có thể gây ra tác động đáng chú ý lên băng thông mạng của người dùng và cũng làm chậm việc tắt Steam hoặc khởi chạy lại trò chơi.

Theo nguyên tắc chung, các file nhỏ hơn sẽ hoạt động tốt hơn. Nếu trạng thái đã lưu cho một người dùng bất kỳ có thể được chia thành nhiều hạng mục khác nhau - những thứ có thể thay đổi thường xuyên, và những thứ có thể không thay đổi thường xuyên - thì chúng tôi khuyến nghị dùng các file riêng lẻ cho các hạng mục đó. Bằng cách đó, trạng thái chưa thay đổi sẽ không tải lên lại sau mỗi phiên.

Giới hạn kích thước file


Giới hạn tuyệt đối cho kích thước file trên Steam Cloud có thể thay đổi theo thời gian. Sau đây là vài giới hạn và hạn mức hiện tại:

Kích cỡGiới hạn
100MBKích thước tối đa cho lệnh gọi tới ISteamRemoteStorage::FileWrite hoặc ISteamRemoteStorage::FileWriteStreamWriteChunk
256MBCó thể dẫn đến lựa chọn endpoint lưu trữ không tối ưu cho vị trí của người dùng, ảnh hưởng xấu đến hiệu suất tải lên/tải xuống

Đường dẫn lưu file

Khi quyết định nơi ghi file lưu trữ, hãy chắc chắn rằng đường dẫn là độc nhất cho người dùng Steam hiện hành. Nếu cần, bạn có thể truy Steam ID độc nhất của người dùng qua ISteamUser::GetSteamID. Từ đó, bạn có thể truy cập accountID của họ bằng GetAccountID(), hàm này cho phép bạn có biến độc nhất khi tạo đường dẫn lưu trữ.

Lưu trên đa nền tảng


Nếu trò chơi được hỗ trợ đa nền tảng - hoặc dự định thế trong tương lai - bạn nên cân nhắc tính năng này khi thiết lập Steam Cloud cho trò chơi của mình.

Nếu định đọc/ghi file trực tiếp qua interface ISteamRemoteStorage, thì bạn có thể kiểm soát đồng bộ hóa nền tảng qua ISteamRemoteStorage::SetSyncPlatforms. Mặc định file mới sẽ đồng bộ hóa trên mọi nền tảng.

Nếu bạn định dùng Steam Auto-Cloud, có vài thứ quan trọng cần biết. Trước tiên, file mới mặc định đồng bộ hóa với cài đặt chỉ hệ điều hành trên đường dẫn được liên kết Auto Cloud Root. Điều này có nghĩa là nếu bạn thiết lập các root biệt lập cho từng hệ điều hành, tất cả file sẽ được phân vùng theo nền tảng, và do đó sẽ không có chức năng lưu đa nền tảng.

Thay vào đó, để bật tính năng lưu đa nền tảng, bạn cần xác định một đường dẫn Root duy nhất (hầu hết là cho Windows), rồi tạo Ghi đè Root cho các nền tảng khác được hỗ trợ. File khớp với đường dẫn Root được cho mà cũng có lệnh 'Ghi đè Root' nền tảng sẽ đồng bộ hóa với tất cả nền tảng trong cả đường dẫn Root gốc lẫn tất cả đường dẫn được ghi đè. Xem tài liệu Steam Auto-Cloud để biết thêm chi tiết.

Thiết lập ban đầu

Để thiết lập Steam Cloud, bạn phải đặt tùy chọn Hạn mức byte mỗi người dùngSố lượng file cho mỗi người dùng trên trang Thiết lập Steam Cloud trong bảng quản trị ứng dụng Steamworks.

Hạn mức này buộc phải áp dụng cho mỗi trò chơi có hỗ trợ cloud, trên cơ sở mỗi người dùng cho mỗi trò chơi. Khuyến khích bạn đặt giá trị hợp lý cho từng tựa sản phẩm.

LƯU Ý: Đừng quên nhấp 'Lưu' tại cuối trang, và 'Đăng' các thiết lập vừa cập nhật. Sau khi đăng, biểu tượng đám mây sẽ hiển thị trong phần mềm Steam đến bất kỳ ai sở hữu trò chơi của bạn.

Nếu trò chơi đã được phát hành công khai, bạn có thể đánh dấu ô có nhãn Bật hỗ trợ đám mây chỉ cho nhà phát triển. Nếu chế độ chỉ dành cho nhà phát triển được bật, thì chỉ các tài khoản Steam có giấy phép "Developer Comp" cho sản phẩm mới thấy biểu tượng đám mây và được dùng Steam Cloud. Tính năng này rất hữu ích để kiểm tra việc tích hợp Steam Cloud một cách an toàn mà không phá vỡ trải nghiệm người dùng nói chung. Điều này không ảnh hưởng đến trò chơi chưa phát hành vì chưa ai sở hữu, họ sẽ không thể xem hay truy cập bất kỳ bộ nhớ đám mây nào cho app ID chỉ định.

Bạn có thể chia sẻ không gian lưu trữ đám mây giữa hai ID ứng dụng bằng cách điền vào trường ID ứng dụng chia sẻ chung Cloud. Đây là cách phổ biến nhất để chia sẻ bản lưu trò chơi giữa bản demo và bản đầy đủ. Giá trị 0 sẽ tắt tính năng này.

API Steam Cloud và Steam Auto-Cloud

Steam cung cấp hai phương pháp khác nhau để sử dụng Steam Cloud, đọc để biết sự khác biệt, và quyết định phương pháp tốt nhất cho ứng dụng.

Đầu tiên là API Steam Cloud.
API của Cloud cung cấp một loạt các chức năng cho phép trực tiếp tích hợp Steam Cloud vào trò chơi. API của Cloud cô lập các file người dùng Steam khỏi nhau và cung cấp mức độ kiểm soát Steam Cloud cao hơn.

API Steam Cloud hiển thị công khai qua interface API ISteamRemoteStorage, bạn có thể tìm thấy ví dụ về cách sử dụng trong dự án Steamworks API Example Application (SpaceWar).

Cách hai là Steam Auto-Cloud.
Steam Auto-Cloud được thiết kế cho trò chơi mà bạn chọn không tích hợp vào API Steam Cloud. Phương pháp này cung cấp cách nhanh và đơn giản để bắt đầu, nhưng thiếu tính linh hoạt mà API Steam Cloud có.

Nếu thích tích hợp sâu hơn với Steam Cloud (ví dụ, cho phép chọn file lưu trữ trên đám mây), bạn nên dùng API Cloud. Nếu không, có thể dùng Steam Auto-Cloud.

Steam Auto-Cloud

Steam Auto-Cloud là giải pháp thay thế cho API Steam Cloud, cho phép ứng dụng dùng Steam Cloud mà không cần viết code hay chỉnh sửa trò chơi theo bất kỳ cách nào. Giải pháp này chỉ yêu cầu bạn chỉ định nhóm file bạn muốn lưu trữ trên đám mây. Steam sẽ tự động đồng bộ hóa các nhóm file khi ứng dụng khởi chạy và đóng. Tránh các cấu hình dành riêng cho máy như chất lượng video.
Lưu ý: File steam_autocloud.vdf sẽ được tạo tại mỗi vị trí chỉ định bởi đường dẫn đám mây Steamworks của bạn. File này được dùng bởi Steam, và trò chơi của bạn có thể phớt lờ.

Thiết lập

Sau khi hoàn tất Thiết lập ban đầu mục thiết lập Steam Auto-Cloud sẽ mở khóa trên trang thiết lập Steam Cloud.

Đường dẫn Root mô tả nhóm các file sẽ được lưu trên Steam Cloud. Mỗi đường dẫn Root có thể chỉ là một file đơn lẻ hoặc toàn bộ các file nằm trong một thư mục con được chỉ định. Dùng đường dẫn mới cho mỗi nhóm file để đồng bộ hóa.

Một đường dẫn Root gồm 5 phần:
  1. Root

    Sau đây là danh sách đường dẫn đã được chỉ định trước, nơi thường đặt các bản sao lưu trò chơi.
    RootHệ điều hành hỗ trợĐường dẫn tương ứng
    App Install DirectoryTất cả[Steam Install]\SteamApps\common\[Game Folder]\
    SteamCloudDocumentsTất cảĐường dẫn cụ thể cho nền tảng, ví dụ trên Linux: ~/.SteamCloud/[username]/[Game Folder]/
    WinMyDocumentsWindows%USERPROFILE%\My Documents\
    WinAppDataLocalWindows%USERPROFILE%\AppData\Local\
    WinAppDataLocalLowWindows%USERPROFILE%\AppData\LocalLow\
    WinAppDataRoamingWindows%USERPROFILE%\AppData\Roaming\
    WinSavedGamesWindows%USERPROFILE%\Saved Games\
    MacHomemacOS~/
    MacAppSupportmacOS~/Library/Application Support/
    MacDocumentsmacOS~/Documents/
    LinuxHomeLinux~/
    LinuxXdgDataHomeLinux$XDG\_DATA\_HOME/

    Lưu ý về đường dẫn Windows %USERPROFILE%: Đường dẫn tương ứng liệt kê ở trên là các vị trí mặc định. Giờ người dùng có thể thiết lập cài đặt Window để các thư mục này đặt ở các vị trí khác nhau (không nhất thiết phải ở dưới %USERPROFILE%). Steam dùng API Windows cần thiết để tìm vị trí hiện tại của các thư mục này, dù là mặc định hay tùy chỉnh.

  2. Thư mục con

    Đường dẫn thư mục con đến file lưu trữ đám mây có liên quan đến Root. Dùng `.` nếu không có thư mục con nào.

    Giá trị đặc biệt cho đường dẫn Auto-Cloud
    Auto-Cloud cho phép sử dụng mã định danh người dùng Steam độc nhất trong đường dẫn Subdirectory. Điều này giúp bạn trữ các file sao lưu riêng biệt cho từng người dùng Steam trên máy tính. Bạn có thể dùng ISteamUser::GetSteamID trong trò chơi của mình để lưu và đọc SteamID hay AccountID người dùng hiện tại.
    • {64BitSteamID} - Dùng biến này trong đường dẫn Steam để chèn Steam ID 64 bit của người dùng. Steam ID 64 bit sẽ như thế này: 76561198027391269
    • {Steam3AccountID} - Dùng biến này trong đường dẫn Steam để chèn ID tài khoản Steam3 của người dùng. ID tài khoản trông như thế này: 67125541
    Ví dụ: SavesDir/{64BitSteamID}
  3. Quy luật

    Quy luật ký tự tên file để tìm. Bạn có thể dùng dấu * làm ký tự đại diện. Nếu bạn muốn tất cả file trong thư mục, chỉ cần dùng *.

    Ví dụ: *.sav
  4. Hệ điều hành

    Đặt hệ điều hành mà các file này sẽ được đồng bộ tới/từ. Chỉ cần làm vậy nếu các file thuộc về riêng một hệ điều hành nhất định, mà mong là không có trường hợp đó!
  5. Đệ quy

    Bao gồm các thư mục con khi tìm kiếm file phù hợp. Hữu dụng cho các thư mục con với tên không xác định như tên hay ID người dùng không thuộc Steam. Nếu nó dùng ID Steam, thì khuyến nghị sử dụng giá trị đường dẫn đặc biệt trong trường thư mục con.

Ghi đè Root

Nếu ứng dụng của bạn là đa nền tảng và cần thư mục khác nhau cho mỗi hệ điều hành, bạn có thể dùng tính năng 'Ghi đè Root' để chỉ định lệnh ghi đè với đường dẫn Root mà bạn đã đặt bên trên.

Các đường dẫn root chỉ định bên trên có thể được ghi đè cho tương ứng với đường dẫn khác trên hệ điều hành khác. Nếu dùng chức năng 'Ghi đè Root', bạn phải chỉ định [Tất cả HĐH] trong menu thả xuống HĐH Root bên trên.

Ghi đè Root gồm 5 phần.
  1. Root gốc

    Tương ứng với một trong các Root bạn đã đặt ở trên.
  2. HĐH

    Một hệ điều hành để ghi đè lên.
  3. Root mới

    Vị trí mới kết nối từ Root gốc trên hệ điều hành được chỉ định.
  4. Thêm/Thay thế đường dẫn

    Điều này cho phép bạn có tùy chọn thêm đường dẫn thư mục con mà được chèn giữa root mới và thư mục con nguyên thủy.
  5. Thay thế đường dẫn

    Nếu bật, đường dẫn được xác định trong Thêm/Thay thế đường dẫn sẽ thay thế hoàn toàn thư mục con gốc.

Ví dụ: Thiết lập Auto-Cloud cho các ứng dụng Unity

Sau đây là một ví dụ thiết lập Auto-Cloud để dùng với Unity và thuộc tính Application.persistentDataPath trong đó giá trị khác với từng hệ điều hành. Phiên bản Windows được thiết lập làm Root gốc với phần company trong Unity đặt là DefaultCompany và Project được gọi là AutocloudSample. Trên macOS và Linux/SteamOS, đường dẫn thay thế từ Application.persistentDataPath được đặt trong trường 'Thêm/Thay thế đường dẫn' và đã bật 'Thay thế đường dẫn'.

Với các thiết lập này, file Auto-Cloud sẽ được đồng bộ giữa ba thư mục như hiện trong các ví dụ 'Xem trước' (Preview).

Cloud_Unity_Auto-Cloud_Example.png

Thử nghiệm trước khi ra mắt

Nếu thêm Steam Auto-Cloud vào một trò chơi đã được phát hành và đã bật chế độ chỉ cho nhà phát triển trong Thiết lập ban đầu, thì bạn phải hoàn thành thêm một số bước để thử nghiệm tính năng này.
  1. Đăng nhập vào Steam bằng tài khoản sở hữu ứng dụng cần thử nghiệm.
  2. Mở console Steam bằng cách điều hướng đến steam://open/console trong trình duyệt.
  3. Nhập testappcloudpaths<AppId> vào console với ID ứng dụng bạn đang thử nghiệm. VD: testappcloudpaths 480
  4. Nhập set_spew_level 4 4 vào console.
  5. Chạy ứng dụng từ Steam.
  6. Kiểm tra hoạt động bằng console, nếu đã có file trong đường dẫn Auto-Cloud thì bạn sẽ thấy chúng đang được tải lên. Còn không, lưu một số file từ ứng dụng của bạn rồi đóng ứng dụng để kích hoạt việc đồng bộ hóa.
  7. Đến một PC khác và lặp lại các bước trên để kiểm nghiệm việc tải file về từ Steam Auto-Cloud.
  8. Nhớ kiểm nghiệm trên tất cả hệ điều hành được hỗ trợ.
  9. Đặt testappcloudpaths 0set_spew_level 0 0 để kết thúc thử nghiệm. Bạn có thể khởi động lại phần mềm Steam để loại bỏ thẻ console.

Đừng quên tắt chế độ chỉ dành cho nhà phát triển và đăng các thay đổi khi đã kiểm tra xong.

Đồng bộ Cloud linh động


Steam Cloud giờ hỗ trợ đồng bộ hóa linh động - thay đổi xuất hiện trên Cloud có thể được tải xuống máy trong một phiên sử dụng ứng dụng. Ví dụ hiện tại là phiên trò chơi trong trạng thái hoãn trên Steam Deck. Với các ứng dụng được đánh dấu là có hỗ trợ đồng bộ hóa Cloud linh động, Steam sẽ đồng bộ hóa file tải lên Steam Cloud tại thời điểm hoãn. Sau đó, người dùng có thể chạy trò chơi trên thiết bị khác, thiết bị này sẽ nhận được bản cập nhật từ phiên Steam Deck khi khởi động. Khi thoát trò chơi, các thay đổi sẽ được tải lên Steam Cloud. Cuối cùng, khi thiết bị Steam Deck được đánh thức, Steam sẽ đồng bộ hóa các thay đổi xuống thiết bị đó, và đăng thông báo tới ứng dụng rằng file tại máy đã được thay đổi. Sau đấy, ứng dụng có thể lặp lại các thay đổi đó và thực thi các hành động phù hợp. Ví dụ, trò chơi có thể chỉ cần nạp tiến độ được cập nhật từ ổ đĩa và cho phép người dùng chơi tiếp từ chỗ họ đã dừng trên thiết bị khác.

Xem thông báo của chúng tôi để biết thêm chi tiết về sự ra đời của tính năng này và cách dùng.

Lưu ý rằng tính năng này hỗ trợ ứng dụng dù chúng dùng API ISteamRemoteStorage hay Auto-Cloud để quản lý file.

Để biết thêm chi tiết, hãy xem tài liệu ISteamRemoteStorage, cụ thể là ISteamRemoteStorage::RemoteStorageLocalFileChange_t, ISteamRemoteStorage::GetLocalFileChangeCount, và ISteamRemoteStorage::GetLocalFileChange.

Xem thêm ISteamRemoteStorage::BeginFileWriteBatchISteamRemoteStorage::EndFileWriteBatch - các wrapper này nên được dùng để đưa gợi ý cho Steam, giúp đồng bộ hóa với Steam Cloud an toàn tại thời điểm người dùng bắt đầu tạm hoãn hệ thống.

Thử nghiệm trước khi ra mắt


Bạn có thể bật 'Đồng bộ Cloud linh động' cục bộ cho ứng dụng của mình để thử nghiệm bản build - đây là điều nên làm với trò chơi đã được phát hành, vì bật 'Đồng bộ Cloud linh động' cho toàn bộ người dùng có thể dẫn đến mất dữ liệu khi chạy bản build không xử lý được các phương thức API và callback mới.

Để kiểm tra cục bộ từ máy tính:

  1. Đăng nhập vào Steam bằng tài khoản sở hữu ứng dụng cần thử nghiệm.
  2. Mở console Steam bằng cách điều hướng đến steam://open/console trong trình duyệt. (Bạn cũng có thể chạy Steam bằng dòng lệnh steam -console rồi điều hướng trực tiếp đến mục console).
  3. Nhập @cloud_testdynamicsyncapp <AppId> vào console với ID ứng dụng bạn đang thử nghiệm. VD: @cloud_testdynamicsyncapp 480
  4. Chạy ứng dụng từ Steam.
  5. Chơi trò chơi theo tiến độ mong muốn
  6. Trên console Steam, nhập prepare_for_suspend. Steam sẽ hoãn tiến trình trò chơi của bạn và tải lên Steam Cloud các file đã thay đổi.
  7. Không bắt buộc: chơi trò chơi trên thiết bị khác, tiến độ xa hơn, thoát trò chơi và để phần mềm Steam tải tiến độ đó lên Steam Cloud.
  8. Quay lại thiết bị ban đầu, trong console Steam, nhập resume_suspended_games. Thao tác này sẽ đồng bộ hóa bất kỳ file cần thiết nào xuống từ Steam Cloud, đăng lệnh gọi API liên quan tới trò chơi, rồi ngừng hoãn tiến trình chơi của bạn.

Để kiểm tra cục bộ từ Steam Deck:

  1. Kết nối Steam Deck với Devkit
  2. Để sử dụng console CEF, xem tại đây
  3. Trên console JS, nhập SteamClient.Console.ExecCommand(“@cloud_testdynamicsyncapp <AppId>”) để bật thử nghiệm. Sau đó bạn có thể nhập SteamClient.Console.ExecCommand(“@cloud_testdynamicsyncapp 0”) để tắt thử nghiệm

Gỡ lỗi

Trước tiên, hãy luôn đảm bảo bạn đã công bố các thay đổi trên trang đối tác Steam, và đã đợi tối đa 10 phút hoặc đã khởi động lại phần mềm Steam để nhận các thay đổi được đăng tải.

Nếu gặp sự cố với Steam Cloud, bạn nên kiểm tra file nhật ký nằm tại %Steam Install%\logs\cloud_log.txt.

Xem Debugging the Steamworks API để biết thêm chi tiết.