Game On! – Play Games Half-Birthday Party


TODD: Hello, YouTube
audience and welcome to yet another
episode of “Game On!” I know it’s been a while
since our last one, and I’ve missed you. So I’m glad we have this time
together to chat about games. I’m Todd Kerpelman. I’m on the developer relations
team on Google Play Games. And, in real life, my
forehead is not this shiny. I swear it’s the
lighting in the studio. Anyway, we’re going to move
on and talk about this week’s episode, which is the Play
Games half-birthday party. If you weren’t aware,
Play Games Services launched at Google
I/O 2013, which means it’s just about six
months old as of today. So we’re celebrating
with a party, except that I’m
the only one here. Wolff is out, and Dan’s
gone, and Bruno’s gone. So it’s me here alone, sort
of like all my other birthday parties. Oh, yeah. Dan, my producer is
here, so that’s good. So it’s double the size of
most of my previous birthday parties, so that’s kind of nice. Anyway, what better way to
kick off a birthday party than with some stats, huh? May explain why no one showed
up to my other birthday parties. Anyway, we’re at
2,000 plus games that have integrated
Play Game Services. That’s not bad for six
months, and that number is continuing to grow. We are very excited about that. So, yay, there’s our
stat for the week. And this birthday, we’re going
to be giving gifts to you. Eh? A little twist there. In terms of updates, so
there is a newest version of the games’ SDK if
you are using Android. I believe it’s SDK number 13,
but not quite sure about that. I’m the iOS guy. You Android folks
are on your own. But you can download this, and
the version of Play Services has already been pushed
out to devices everywhere. So feel free to start using it. If you are an iOS developer,
you can download SDK version 1.2 from the downloads page. And what is in these latest
and greatest SDKs, you ask. I’m glad you asked. It includes things
like score tag. This is basically a 64, or up
to 64, character URI safe string that you can submit
along with any score that you send down
to our service. In case you’re
wondering what URI safe is, I went and
looked up the RFC. And, basically, it’s
alpha characters, digits, and four different
punctuation marks. And you can basically create
any kind of string you want and send that down with your
score data to our servers. And why would you
want to do that? Well, there’s a
number of reasons. Partly, you might want
to use it for metrics. Maybe you’re just
kind of curious as to how people are
achieving these high scores. And so you might find out
what level they were playing or what power-ups
they were using, or what boosts they had
enabled when they managed to receive this
really high score. And so you can submit
that along with the score and analyze that later. If you as a developer
just do a score.list on your public
leader boards, you’ll be able to get the score
tag information along with the scores
that get sent down. You could use it
to create a hash. Think about if you take
that score, maybe add on some other kind
of string that’s semi-secret– it’ll
be on the clients, so it won’t be completely
secret, but hard to dig up. Create a hash on that. You can then use that
as sort of a nice way to verify that the score that
is being sent is legitimate. You could also link
to a database entry. Say you’ve got a game that
is primarily server-based. Your server is sort of the
primary keeper of truth, but you still want to submit
scores to our service. You can basically add a link to
a unique ID within your server database that you
can then use later to cross check and verify that
these scores are legitimate. And, finally, you could use
it to display custom user messages. Maybe if you’ve got your own
way of displaying leader boards within the game, you
might want to have users pick their
own icon or taunt message or something like this. I have a comment here just to
say be very careful with this. You don’t want to just take
any user-submitted data, that might be out of your control–
Lord knows what kind of stuff your users are saying. In general, again, data created
by the client you should always view it with suspicion
and do some verification. So I recommend rather than
letting users type in anything they want, have a list
of preselected messages that a user could pick. You can view that
later and show that in your scoreboard of
the taunt or the thing that your user wants to say. Anyway, this could also
be used in conjunction with some of those management
REST calls that we talked about last episode to write
your own anti-cheating script. So think about it this way. Let’s say you use that
hash implementation that we talked about
in the previous slide. You create a hash
of the user score before it get sent
down to our service. Then what you can
do on your side is you can call it
scores.list, which we’ll get an entire list of the
users’ scores along with all the score tags. Iterate through those,
and check out those tags. Generate your hash on your side. See if that equals the hash
that you see in the score tag. And if it doesn’t match, if
something looks suspicious, you can call players.hide
to hide that player from the public leader board. Combine all this,
make it a script that your customer service
person runs once or twice a day, and you’ve got a
very cheap and easy way to keep your leader
boards clean. So definitely consider this
option, experiment around, see what you can do. I think this can
be really useful. Next, we are giving
you the ability to set absolute
achievement progress. This is something
that’s available right now on Android
and web only. We will be making progress
on other platforms soon. And what this means
is, basically, if you call right
now, we have a way that you can submit
progress towards incremental achievements by essentially
submitting a delta. So you would say,
hey, this achievement where I have to
shoot 100 spaceships. The user just shot four of them. And so on our
service we would say, OK, their total’s now four. And you’d say, OK,
now they shot eight. And we’d say, OK,
the total’s now 12. You’d say the user
blew up three more, we would record that as
15, and so on and so forth. All of the work to
keep track of this data is being done on our servers. However, some
developers would rather keep track of that
information on the client. And so we’ve added this call. It’s the set achievement
steps call that basically lets you submit the absolute
amount of achievement progress you want to make
towards unlocking an incremental achievement. So you’d say, OK,
the user has blasted a total of two
spaceships, and then they have blasted a total
of seven, 15, and so on. You’ll notice in
that last row there in the table we submit
18, and the service keeps the last entry of 20. Basically, if you
submit a number that is less than the progress
that we’ve already recorded that will not go down. You can never lose progress by
calling a set achievement steps call. So this is useful
one if you do want to have your client be
the main source of truth for incremental achievements. It’s also very useful for
seeking achievement progress. If a user is signed
into services, but they’ve been playing on
your game for a while already, and you’re not quite
sure how to sync up their progress between anything
you’ve recorded locally and what’s already
on service, this is a cheap and
easy way to do it. You just say, OK, you know what? I trust my client. I know that the user has blasted
43 spaceships on the client. I’ll just send that
down to the server. And that will make sure
that the server is now in sync with your client. We have added the ability
to call some of these V1 management calls from the client
on iOS, and of course web. So what does this mean? This means that
within your game, you can now create your own
little QA view controller. And, within there, you can make
some calls to, for instance, here we set the scores
for that particular player on a particular leader board. You’ve got your QA
person who has managed to get some amazing
high score, possibly by finding a bug in your game. And you want to make sure
they can reset and try again. See if they can
reproduce the bug. They can call this reset
call to reset that score. We also have a similar call
to reset an achievement. This is especially
helpful for testing. You’ve got your
QA person that is trying to earn an achievement. They do it once. If they want to try
and do it again, the easiest way would–
again, from within your app– set up something to
make this call directly. And we also have another method
to reset all achievements. Again, very useful for testing. Remember again that
these calls only work if you’re tester account
is listed in this testing access part of the Development Console. So do make sure that your
QA people are listed here, because they will be
the only ones that are allowed to make these
V1 management calls. Finally, there’s a few
other fixes here and there on the iOS side. We have made some
fixes to the widgets so that they work
properly in iOs 7. There were some
crashing issues before. Sorry about that. Everything should be
good now in iOS 7. We’ve also added some fixes
so that the library behaves better, if you’re using that
as well as Google Analytics. On the Android side, there’s
been a number of fixes around multiplayer. Even if you’re not
going to make use of any of these other features
that we’ve talked about, if you do have a
multiplayer game, I strongly encourage you
to recompile your app with the latest SDK. Because there are a number
of multiplayer fixes that have been made that I think
will make your game better. And, finally, for those of
you who can’t get enough of me and are wondering, OK,
what happened to those iOS screencasts that you were doing. Don’t worry. There’s more on
their way eventually. I’m still around. I just got pulled off onto a
top-secret project for a couple weeks. And hopefully now
that that’s over, and I have a little more time
to think about games again, I’ll be getting back into
the screencasts, which will be good. Except that my
hard drive’s full. Video files, it turns out that
they take up a lot of space. So I guess as soon as I delete
some of those Steam games that are taking up all
my hard drive space, I’ll go and make some
more screencasts. So thanks very much, developers. I’m going to go off
and, I guess, sit in the corner and drink
like all my other birthdays. And we’ll see you
a couple weeks. Bye.

About the author

Comments

  1. @Todd Kerpelman returns for another episode of Game On! We celebrate the half-birthday of Play Games with gifts in the form of updated SDKs. 

    YouTube:
    Game On! – Play Games Half-Birthday Party

Leave a Reply

Your email address will not be published. Required fields are marked *