Game Studio
Liên kế mạng xã hội

Game Studio


Hướng dẫn: Sử dụng Key-Value Storage của iCloud

Như chúng ta đã biết Daily Build 2015.2795 mang đến một iCloud plugin khá hữu dụng. Mặc dù Plugin đang trong phiên bản "beta", nhưng một số tính năng cốt lõi đã hoạt động rất tốt, và corona sẽ phát triển nó nhiều hơn trong thời gian tới.

Trong hướng dẫn này, chúng ta sẽ khám phá về Key-Value Storage hay còn gọi là KVS, một trong các tính năng cốt lõi của iCloud plugin.

Tổng quan

KVS cho phép bạn lưu trữ cặp "key-value" trong iCloud của Apple bằng cách sử dụng một số API. Với KVS bạn có thể lưu trữ chuỗi, số, và các bảng dữ liệu bằng cách sử dụng iCloud.set().

  • Tuy nhiên, có một số giới hạn về KVS bạn cần phải biết:
  • Bạn có thể sử dụng tối đa là 1 megabyte dung lượng lưu trữ.
  • Bạn có thể lưu trữ lên đến 1024 key.

Key có thể dài đến 64 byte và bao gồm các ký tự unicode. Tuy nhiên, ký tự Unicode chiếm nhiều không gian hơn các ký tự chữ-số. Bạn có thể sử dụng lên đến 63 ký tự chữ-số.

Tùy thuộc vào nhu cầu của bạn, bạn có thể sử dụng một key với rất nhiều bảng dữ liệu, hoặc bạn có thể sử dụng nhiều key với các bit dữ liệu riêng biệt. Hãy nhớ rằng khi bạn đồng bộ một key với rất nhiều dữ liệu, bạn đang thay đổi rất nhiều dữ liệu cùng một lúc. Cũng nên nhớ rằng dữ liệu thường được đồng bộ trên cả WiFi và Cellular, do đó đồng bộ key với một dữ liệu lớn sẽ có thể tốn nhiều thời gian hơn, ngay cả khi bạn thay đổi có một phần nhỏ của dữ liệu.

Cấp phép cho ứng dụng của bạn

Trước khi bạn có thể đưa ứng dụng có khả năng iCloud lên store, provisioning profile của bạn cần phải kích hoạt iCloud. Điều này được thực hiện tại Member Center của Apple Developer portal trong  Certificates, Identifiers & Profiles. Một khi bạn ở đó, nhấp Identifiers → App IDs. Nhấp chuột vào ứng dụng và di chuyển xuống đến hàng iCloud. Ở đây, check vào để bật iCloud. Tiếp theo, nhấp vào nút tròn để cho phép CloudKit, sau đó nhấn vào nút Edit.

Nhấp vào Continue và sau đó Done. Tại thời điểm này, bạn sẽ cần phải tạo provisioning profile của bạn.

Cập nhật build.settings

Để sử dụng iCloud plugin, bạn phải thêm nó vào tập tin build.settings của bạn:

settings = {

plugins =
{
["plugin.iCloud"] =
{
publisherId = "com.coronalabs",
supportedPlatforms = { iphone=true, appletvos=true, ["iphone-sim"]=true },
},
},
}

Ngoài ra, bạn phải chỉnh sửa block code cho iphone và/hoặc tvos:

settings = {

iphone = {
iCloud = true,
plist = {

}
},

-- Optional (only for use with Apple TV and tvOS)
tvos =
{
iCloud = true,
},
}

Corona Enterprise

Đối với Enterprise builds, bạn phải bao gồm Corona_plugin_iCloud.framework được đặt ở trong Enterprise plugins download tab trong trang Daily Builds.

 Ngoài ra, có một số cài đặt Xcode yêu cầu kích hoạt iCloud, nằm ở trên Capabilities screen của project. Ở đây, đảm bảo rằng iCloud đã được kích hoạt và Key-value storage đã được check.

Save giá trị vào iCloud

Trong bất kỳ scene hay bất kỳ tập tin Lua nào bạn cần truy cập vào dịch vụ iCloud, bạn phải require iCloud plugin:

Sau đó, khi bạn đã sẵn sàng để save một số dữ liệu, chỉ cần gọi iCloud.set() với một key và giá trị, ví dụ:

local iCloud = require( "plugin.iCloud" )

Điều này sẽ thiết lập một key có tên playMusic với giá trị là "on".

Các giá trị được chấp nhận

KVS cho phép bạn lưu trữ các kiểu dữ liệu sau đây:

  • numbers
  • strings
  • tables

Mặc dù bạn không thể lưu trữ các booleans trong đây, nhưng chúng có thể là một phần của bảng dữ liệu. Ngoài ra, bạn có thể chỉ cần sử dụng các con số như 1 hoặc 0 để cho biết true hay false, hay chỉ lưu trữ các chuỗi "true" hoặc "false", nhưng bạn sẽ cần phải chuyển đổi chúng trở lại với các giá trị boolean trước khi bạn sử dụng chúng như là Lua booleans.

Lưu ý rằng nếu bạn chọn để lưu trữ một bảng, nó chỉ chứa cặp key-value. Bảng với các phím số (mảng) sẽ không thể được lưu trữ trực tiếp như các bảng. Nói cách khác, các mảng sau đây sẽ phát sinh lỗi nếu bạn cố gắng lưu trữ nó trên KVS:  

local array = { true, 0, 10 } -- Điều này tương tự {1 = true, 2 = 0, 3 = 10}

iCloud.set( "myArray", array ) -- Giá trị này sẽ không được lưu trữ

Nếu bạn có một mảng cần lưu trữ, một lựa chọn là sử dụng json.encod () trên bàn và save nó như là dữ liệu chuỗi, sau đó sử dụng json.decode() để chuyển đổi nó trở thành một bảng khi bạn lấy nó về từ iCloud.

Lấy dữ liệu

Để nhận được dữ liệu trả về từ KVS, chỉ cần gọi phương thức iCloud.get():

local musicOn = iCloud.get( "playMusic" )

Nếu không tìm thấy giá trị, nó sẽ trả về nil. Đơn giản!

Xóa dữ liệu

Nếu bạn không  cần một số dữ liệu, bạn có thể khôi phục lại dung lượng lưu trữ bằng cách xóa các key trên iCloud, sử dụng iCloud.delete():

iCloud.delete( "playMusic" )

Đồng bộ dữ liệu

Một mục đích quan trọng của iCloud là cho phép người dùng có thể chia sẻ dữ liệu trên nhiều thiết bị. Nói cách khác, nếu bạn hoàn thành một level trong một trò chơi trên iPad, bạn cũng sẽ hoàn thành level đó trên iPhone và có thể chơi các level tiếp theo. Nếu bạn load các thiết lập (dữ liệu) từ KVS khi ứng dụng bắt đầu, ứng dụng cần phải nhận được các dữ liệu mới nhất - nhưng sẽ ra sao nếu ứng dụng được mở cùng một lúc trên cả hai thiết bị và dữ liệu được thay đổi?

Một giải pháp là cho phép một hàm listener thông qua iCloud.setKVSListener() thực thi khi giá trị thay đổi. Hãy xem xét block code này:

local function on_iCloudUpdate( event )
if ( event.type == "initialSync" or event.type == "serverChange" ) then
musicOn = iCloud.get( "playMusic" )
end
end

iCloud.setKVSListener( on_iCloudUpdate )

Xem tài liệu iCloudKVSEvent cho các giá trị được trả về như là một phần của bảng sự kiện.

Lời kết

Hướng dẫn này chỉ là phần đầu tiên đối với việc lưu trữ và chia sẻ dữ liệu trong iCloud của Apple. Để tìm hiểu thêm, xin vui lòng tham khảo tài liệu iCloud.

Xem thêm:

Corona SDK

iCloud


Đăng sự kiện cho developer