Your SlideShare is downloading. ×
0
MBL309
Speeding Mobile Development with Cross-Platform APIs:
High-Level Amazon Services for Data Sync, Player Engagement, ...
What Can We Do for You?

Whispersync for Games
Leaderboards
Achievements

A/B/n Testing
Engagement Reports
Analytics
Launc...
Glu and Amazon: Whispersync for Games

© 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied,...
Whispersync: Downloading from Cloud
•

•

•

How:
– 1.x:
• multi-file synchronize API call and setup conflict strategy
– 2...
Whispersync: Uploading to Cloud

•
•

What:
– developer string and raw game data byte[] (using SyncableString).
When:
– ga...
Whispersync: Uploading to Cloud
Code Sample
public static void sync( String developerStringLocal, byte[] rawGameData )
{
d...
Whispersync: Developer String
• Pick data which is core to the game
– Should make sense to the user.

• Data that changes ...
Whispersync: Developer String
Starting at Level 2
Whispersync: Developer String
Conflict Detected
Whispersync: Developer String
User Chooses Cloud Data
Whispersync: Developer String
Game Restored Using Cloud Data
Whispersync: Developer String
• Ideal for games that haven't modeled the save
data according to GameCircle 2.x’s Syncable
...
Whispersync & Unity:
Tips and Tricks
Whispersync & Unity - Tips & Tricks
• Avoiding game restart on first launch
– Loading cloud data is asynchronous:
• Halt t...
1.x  2.x - Tips & Tricks
• In the Whispersync onNewCloudData callback:
– Retrieve developer string from gameDataMap. If t...
Player Engagement with GameCircle
Leaderboards & Achievements

© 2013 Amazon.com, Inc. and its affiliates. All rights rese...
Engagement is Important

56%

62%

35%

of purchases are
repeat purchases

of revenue occurs
after the first 7 days

of re...
Display Prominently
Encourage Friendly Competition
Reward Completion
Engagement Service?
Get a Head Start:
• Leaderboards
• Achievements
• Game Center
integration on iOS
• Android, Fire OS
GameCircle: Auth(oriz|entic)ation
Security Profiles + API Keys
Enable Access on Server

Create a
security profile

Associate it with
GameCircle data

Associate each
permitted app
Enable Access on Client

Compute MD5
of certificate store

Generate an
API key

Add key
to app
Compute MD5 Signature
heinrich@DevMachine7 ~
$ cd ~/.android
heinrich@DevMachine7 ~/.android
$ keytool -list -v -alias and...
GameCircle: Leaderboards
Submit a Score
AmazonGamesClient agsClient;
public void submitScore(long score) {
LeaderboardsClient lbClient = agsClient....
Other APIs
•
•
•
•

Retrieve player’s current score or rank
Retrieve filtered list of top scores
Get a list of leaderboard...
GameCircle: Achievements
Updating Progress
AmazonGamesClient agsClient;
public void unlockAchievement(View view) {
AchievementsClient acClient = ag...
Other APIs
• Retrieve info for a single achievement
• Get a list of all achievements
• Show the Achievement overlay
Using A/B Testing to Modify Live Apps
without Republishing

© 2013 Amazon.com, Inc. and its affiliates. All rights reserve...
Air Patriots
Used A/B Testing to decide:
• Include in-game advertising?
• Provide purchasing short-cuts?
• Notification fr...
Air Patriots
Air Patriots
Launch Service

Precisely control
who is affected

Safely test
back-end load

Change in the wild;
No new APK needed
Initialize A/B Testing in Your App
private static final String APP_KEY = "876c809ba7084b9fbe2c08a22e5acda1";
private stati...
Multiple Projects Are Allowed

private static final String AB_MAXACC = "Acceleration";
private static final String AB_MAXA...
Load Variation Variables
private static final int DEF_MAXACC = 5;
private static final int DEF_MAXVEL = 50;
private int ma...
Let Us Do That for You
• Amazon GameCircle
– Data Synchronization with Whispersync for Games
– Player Engagement with Lead...
Please give us your feedback on this
presentation

MBL309
As a thank you, we will select prize
winners daily for completed...
Upcoming SlideShare
Loading in...5
×

Amazon Services for Data Sync, Player Engagement & A/B Testing (MBL309) | AWS re:Invent 2013

1,372

Published on

Is your mobile app or game built to run on multiple platforms? Do you want a fast, straightforward solution to common problems like data synchronization, player achievements, and leaderboards? Amazon offers several services that allow you to plug-and-play features in your mobile app or game, with very little set-up and no server-side development. This session provides instructions for integrating GameCircle (Whispersync for Games, Achievements, Leaderboards) in your Android apps, and demonstrates how to add A/B Testing and fine tune your app based on user response. Learn how to speed up your time to market, regardless of whether you distribute through Google Play or the Amazon Appstore.

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,372
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
19
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Amazon Services for Data Sync, Player Engagement & A/B Testing (MBL309) | AWS re:Invent 2013"

  1. 1. MBL309 Speeding Mobile Development with Cross-Platform APIs: High-Level Amazon Services for Data Sync, Player Engagement, and A/B Testing Sourabh Ahuja, Glu Mobile Peter Heinrich, Amazon Appstore November 13, 2013 © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified, or distributed in whole or in part without the express consent of Amazon.com, Inc.
  2. 2. What Can We Do for You? Whispersync for Games Leaderboards Achievements A/B/n Testing Engagement Reports Analytics Launches
  3. 3. Glu and Amazon: Whispersync for Games © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified, or distributed in whole or in part without the express consent of Amazon.com, Inc.
  4. 4. Whispersync: Downloading from Cloud • • • How: – 1.x: • multi-file synchronize API call and setup conflict strategy – 2.0: • via Whispersync callbacks & GameDataMap Handle What: – 1.x: • developer string + all files residing in the internal memory for that game – 2.0: • Developer string + syncablestring (i.e. raw game data) When: – game launch - AmazonGamesClient.getWhispersyncClient().synchronize();
  5. 5. Whispersync: Uploading to Cloud • • What: – developer string and raw game data byte[] (using SyncableString). When: – game calls save. – force save (flush) before closing the game [WhispersyncClient->flush()]
  6. 6. Whispersync: Uploading to Cloud Code Sample public static void sync( String developerStringLocal, byte[] rawGameData ) { developerStringCloud.setValue(developerStringLocal); rawDataLocal = rawGameData; } private static void onDataUploadedToCloud() { // Once cloud data is available on the device, Whispersync can check for conflicts if (developerStringCloud.inConflict()) { //display the values to the user. if(useCloudData) { developerStringCloud.setValue(developerString.getCloudValue()); OverwriteLocalSaveData(rawDataCloud); developerStringCloud.markAsResolved(); Restart(); } developerStringCloud.markAsResolved(); } rawDataCloud.set(Base64.encodeToString(rawDataLocal, Base64.DEFAULT)); whisperSyncClient.synchronize(); }
  7. 7. Whispersync: Developer String • Pick data which is core to the game – Should make sense to the user. • Data that changes in one direction – Player Level, Missions/Levels Unlocked, etc. • Data to avoid – Data the changes in both direction — e.g., currencies, energy, etc.
  8. 8. Whispersync: Developer String Starting at Level 2
  9. 9. Whispersync: Developer String Conflict Detected
  10. 10. Whispersync: Developer String User Chooses Cloud Data
  11. 11. Whispersync: Developer String Game Restored Using Cloud Data
  12. 12. Whispersync: Developer String • Ideal for games that haven't modeled the save data according to GameCircle 2.x’s Syncable Data Types • Easy to implement • User gets to make the choice • Auto-resolving is risky • Works offline
  13. 13. Whispersync & Unity: Tips and Tricks
  14. 14. Whispersync & Unity - Tips & Tricks • Avoiding game restart on first launch – Loading cloud data is asynchronous: • Halt the game progress before game state is loaded from disk • If Whispersync callback successfully retrieves data from cloud and it is the first launch, then load game state using cloud data
  15. 15. 1.x  2.x - Tips & Tricks • In the Whispersync onNewCloudData callback: – Retrieve developer string from gameDataMap. If the string is null, only then do the migrations mentioned below: • Single file steps: – API call to retrieve 1.x data – Load game from the cloud data • Multi-file steps: – API call to retrieve 1.x files – API call to copy 1.x files to specific location
  16. 16. Player Engagement with GameCircle Leaderboards & Achievements © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified, or distributed in whole or in part without the express consent of Amazon.com, Inc.
  17. 17. Engagement is Important 56% 62% 35% of purchases are repeat purchases of revenue occurs after the first 7 days of revenue occurs after the first 30 days Source: Amazon Appstore, July 2013
  18. 18. Display Prominently
  19. 19. Encourage Friendly Competition
  20. 20. Reward Completion
  21. 21. Engagement Service? Get a Head Start: • Leaderboards • Achievements • Game Center integration on iOS • Android, Fire OS
  22. 22. GameCircle: Auth(oriz|entic)ation
  23. 23. Security Profiles + API Keys
  24. 24. Enable Access on Server Create a security profile Associate it with GameCircle data Associate each permitted app
  25. 25. Enable Access on Client Compute MD5 of certificate store Generate an API key Add key to app
  26. 26. Compute MD5 Signature heinrich@DevMachine7 ~ $ cd ~/.android heinrich@DevMachine7 ~/.android $ keytool -list -v -alias androiddebugkey -keystore ./debug.keystore | grep MD5 Enter keystore password: android MD5: D4:85:0C:AE:3D:45:DF:45:59:F2:BE:DE:95:A8:E1:62 heinrich@DevMachine7 ~/.android $ cd ~/MonsterTag heinrich@DevMachine7 ~/MonsterTag $ unzip -p bin/MonsterTag.apk META-INF/CERT.RSA | keytool -printcert | grep MD5 MD5: D4:85:0C:AE:3D:45:DF:45:59:F2:BE:DE:95:A8:E1:62
  27. 27. GameCircle: Leaderboards
  28. 28. Submit a Score AmazonGamesClient agsClient; public void submitScore(long score) { LeaderboardsClient lbClient = agsClient.getLeaderboardsClient(); AGResponseHandle<SubmitScoreResponse> handle = lbClient.submitScore(TAGGED_LB, score); // Optional callback to receive notification of success/failure. handle.setCallback(new AGResponseCallback<SubmitScoreResponse>() { @Override public void onComplete(SubmitScoreResponse result) { if (result.isError()) { // Retries are automatic, so no action strictly required } else { // Special handling of your own. } } }); }
  29. 29. Other APIs • • • • Retrieve player’s current score or rank Retrieve filtered list of top scores Get a list of leaderboards Show the Leaderboard overlay
  30. 30. GameCircle: Achievements
  31. 31. Updating Progress AmazonGamesClient agsClient; public void unlockAchievement(View view) { AchievementsClient acClient = agsClient.getAchievementsClient(); AGResponseHandle<UpdateProgressResponse> handle = acClient.updateProgress(KING_AC, 100.0f); // Optional callback to receive notification of success/failure. handle.setCallback(new AGResponseCallback<UpdateProgressResponse>() { @Override public void onComplete(UpdateProgressResponse result) { if (result.isError()) { // Retries are automatic, so no action strictly required } else { // Special handling of your own. } } }); }
  32. 32. Other APIs • Retrieve info for a single achievement • Get a list of all achievements • Show the Achievement overlay
  33. 33. Using A/B Testing to Modify Live Apps without Republishing © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified, or distributed in whole or in part without the express consent of Amazon.com, Inc.
  34. 34. Air Patriots Used A/B Testing to decide: • Include in-game advertising? • Provide purchasing short-cuts? • Notification frequency? • Reduce difficulty? • Promotional imagery?
  35. 35. Air Patriots
  36. 36. Air Patriots
  37. 37. Launch Service Precisely control who is affected Safely test back-end load Change in the wild; No new APK needed
  38. 38. Initialize A/B Testing in Your App private static final String APP_KEY = "876c809ba7084b9fbe2c08a22e5acda1"; private static final String PRIVATE_KEY = "9nxxk4//qL89ymXl/P5aL7w8uhs3DVDrLcyYViG6yn0="; AmazonInsights insightsInstance; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); . . . InsightsCredentials credentials = AmazonInsights.newCredentials(APP_KEY, PRIVATE_KEY); insightsInstance = AmazonInsights.newInstance(credentials, getApplicationContext()); }
  39. 39. Multiple Projects Are Allowed private static final String AB_MAXACC = "Acceleration"; private static final String AB_MAXACC_VAR = "maxAcceleration"; private static final String AB_MAXVEL = "Velocity"; private static final String AB_MAXVEL_VAR = "maxVelocity";
  40. 40. Load Variation Variables private static final int DEF_MAXACC = 5; private static final int DEF_MAXVEL = 50; private int maxAcc; private int maxVel; private void loadTreatment() { ABTestClient abClient = insightsInstance.getABTestClient(); abClient.getVariations(AB_PRJ_VEL, AB_PRJ_ACC).setCallback(new InsightsCallback<VariationSet>() { @Override public void onComplete(VariationSet variations) { Variation variation = variations.getVariation(AB_PRJ_ACC); maxAcc = variation.getVariableAsInt(AB_VAR_MAXACC, DEF_MAXACC); variation = variations.getVariation(AB_PRJ_VEL); maxVel = variation.getVariableAsInt(AB_VAR_MAXVEL, DEF_MAXVEL); } }); }
  41. 41. Let Us Do That for You • Amazon GameCircle – Data Synchronization with Whispersync for Games – Player Engagement with Leaderboards and Achievements • A/B Testing – Real-time Control Knobs for Live Apps with Launches
  42. 42. Please give us your feedback on this presentation MBL309 As a thank you, we will select prize winners daily for completed surveys!
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×