This extension provides functions for interacting with Google Play Game Services. Supported on Android. The extension supports the following services:
To use this library in your Defold project, add the following URL to your game.project
dependencies:
https://github.com/defold/extension-gpgs/archive/master.zip
We recommend using a link to a zip file of a specific release.
In order to use Google Play Game Services your application needs to be added to the Google Play store. It doesn’t have to be published but it must be registered. Read more about how to sign up for and use the Google Play store in the official documentation.
Once the application is registered you also need to enable Google Play Game Services for the application. Follow the official documentation to enable Google Play Game Services.
Add the following section into your game.project
file (open and edit as a text file):
[gpgs]
app_id = 1234567890
use_saved_games = 1
request_server_auth_code = 0
request_id_token = 0
Where app_id
is the 12 or 13 digit Application ID from the Google Play Console, found under Development Tools > Services & APIs and Google Play game services.</p>
Where use_saved_games
indicates if the Game Saves service should be used (0 is disabled, 1 is enabled).</p>
The API uses a callback based system where events and data coming from Google Play Game Services are passed to the game client through a callback function. The kind of event coming from Google Play Game Services is identified by a pre-defined event id. Example:
local function gpgs_callback(self, message_id, message)
if message_id == gpgs.MSG_SIGN_IN then
print("Signed in")
end
end
gpgs.set_callback(gpgs_callback)
local function gpgs_callback(self, message_id, message)
if message_id == gpgs.MSG_SIGN_IN or message_id == gpgs.MSG_SILENT_SIGN_IN then
if message.status == gpgs.STATUS_SUCCESS then
print("Signed in")
print(gpgs.get_id())
print(gpgs.get_display_name())
else
print("Sign in error!")
end
elseif message_id == gpgs.MSG_SIGN_OUT then
print("Signed out")
end
end
gpgs.set_callback(gpgs_callback)
gpgs.silent_login()
gpgs.achievement_reveal("CgkIq5-gxcsVEAIQAQ")
gpgs.achievement_unlock("CgkIq5-gxcsVEAIQAQ")
gpgs.achievement_increment("CgkIq5-gxcsVEAIQAQ", 1)
gpgs.achievement_set("CgkIq5-gxcsVEAIQAQ", 10)
gpgs.achievement_show()
gpgs.achievement_get()
local function gpgs_callback(self, message_id, message)
if message_id == gpgs.MSG_LOAD_SNAPSHOT then
if message.status == gpgs.STATUS_CONFLICT then
print(message.conflictId)
end
end
end
gpgs.set_callback(gpgs_callback)
gpgs.snapshot_display_saves("My saves", true, true, 3)
gpgs.snapshot_open("my_save", true, gpgs.RESOLUTION_POLICY_MANUAL)
local success, error_message = gpgs.snapshot_set_data("MyCustomBytesForSnapshot")
local bytes, error_message = gpgs.snapshot_get_data()
local bytes, error_message = gpgs.snapshot_get_conflicting_data()
gpgs.snapshot_resolve_conflict(self.conflictId, gpgs.SNAPSHOT_CURRENT)
gpgs.snapshot_resolve_conflict(self.conflictId, gpgs.SNAPSHOT_CONFLICTING)
gpgs.snapshot_commit_and_close({
coverImage = screenshot.png(),
description = "LEVEL 31, CAVE",
playedTime = 1000,
progressValue = 1234
})
gpgs.snapshot_is_opened()
local function gpgs_callback(self, message_id, message)
if message_id == gpgs.MSG_GET_EVENTS then
for _,event in ipairs(message) do
event = json.decode(event)
print(event.name, event.id, event.value)
end
end
end
gpgs.set_callback(gpgs_callback)
gpgs.event_increment("CgkIq5-gxcsVEAIQAw", 1)
gpgs.event_get()
local function gpgs_callback(self, message_id, message)
if message_id == gpgs.MSG_GET_PLAYER_SCORE then
print(message.display_score, message.display_rank)
elseif message_id == gpgs.MSG_GET_PLAYER_CENTERED_SCORES or message_id == gpgs.MSG_GET_TOP_SCORES then
for _,score in ipairs(message) do
score = json.decode(score)
print(score.score_holder_name, score.display_score, score.display_rank)
end
end
end
gpgs.set_callback(gpgs_callback)
gpgs.leaderboard_submit_score("CgkIq5-gxcsVEAIQAg", 1337)
gpgs.leaderboard_get_top_scores("CgkIq5-gxcsVEAIQAg", gpgs.TIME_SPAN_ALL_TIME, gpgs.COLLECTION_PUBLIC, 10)
gpgs.leaderboard_get_player_centered_scores("CgkIq5-gxcsVEAIQAg", gpgs.TIME_SPAN_ALL_TIME, gpgs.COLLECTION_PUBLIC, 10)
gpgs.leaderboard_get_player_score("CgkIq5-gxcsVEAIQAg", gpgs.TIME_SPAN_ALL_TIME, gpgs.COLLECTION_PUBLIC)
gpgs.leaderboard_show("CgkIq5-gxcsVEAIQAg", gpgs.TIME_SPAN_ALL_TIME, gpgs.COLLECTION_PUBLIC)
The source code is available on GitHub
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB