Download - Building social games
developers
Prashant Sridharangithub.com/CoolAssPuppy
@CoolAssPuppy
Building Social Games
Thursday, May 2, 13
iOS & Android Devices - Time Spent
Source: Flurry Analyticshttp://blog.flurry.com/bid/!"#$%/Flurry-Five-Year-Report-It-s-an-App-World-The-Just-Web-Lives-in-It
!"#Browser
$%#Other
&#Utility
&#Enterta-inment
'!#Playing Games
&' (&&'
"&'
Thursday, May 2, 13
!"#
$!#
US top %"" grossing iOS apps
Source: App Figures
Thursday, May 2, 13
!!#
$"#
US top %"" grossing Android apps
Source: App Figures
Thursday, May 2, 13
On average in March, how many games were added to the Apple App Store every day?
!"#Source: ($)Apps.bizhttp://()*apps.biz/app-store-metrics/?mpage=submission
Thursday, May 2, 13
!"#MGamer MAU
$"%MMobile MAU
%.%B+Global MAU
Thursday, May 2, 13
Facebook Provides Unique Social Channels
2012
Requests Sharing Scores &Achievements
Open Graph
Thursday, May 2, 13
Scenarios for Using Facebook Social Channels
2012
(. Invites$. Sending Gifts%. Leaderboards). Tournaments". Bragging+. Challenges
Thursday, May 2, 13
Sending InvitesCustomFriend Picker
Thursday, May 2, 13
Sending GiftsInvitationswith Value
Thursday, May 2, 13
Sending GiftsInvitationswith Value
‣Q: Why use this over native push notifications?
- Cross-Platform- Works with users who’ve not installed your app
Thursday, May 2, 13
Social LeaderboardsPeer Pressure
Bubble WitchSaga
Thursday, May 2, 13
Weekly TournamentsBuild regular engagement
DiamondDash
Thursday, May 2, 13
BraggingFinding natural moments to share
new share dialog screenshot needed
Thursday, May 2, 13
Start with Facebook Login
User’s identity Appearing in SearchUser’s friends Getting Distribution
Thursday, May 2, 13
Make Facebook Login Prominent
Explain what you’re going to do with user data and upsell on the value of Facebook Login
Thursday, May 2, 13
Ask for Read Permissions First
[FBSession openActiveSessionWithReadPermissions:@[@”email”] allowLoginUI:YES completionHandler: ^(FBSession *session, FBSessionState status, NSError *error) { //handle result }];
Thursday, May 2, 13
Ask for Write Permissions In Context
FBSession *fbSession = [FBSession activeSession]; [fbSession requestNewPublishPermissions:@[@"publish_actions"] defaultAudience:FBSessionDefaultAudienceFriends completionHandler:^(FBSession *session, NSError* error) { //handle result }];
Thursday, May 2, 13
Support Free & Paid Versions of Your App
FBSession *fbSession = [[FBSession alloc] initWithAppID:@"480369938658210" permissions:permissions urlSchemeSuffix:@"free" tokenCacheStrategy:nil];
Thursday, May 2, 13
Requests
Thursday, May 2, 13
Get Existing Users to Recruit New Users
Thursday, May 2, 13
User Flow for Requests
Sending Receive Push Notification Light up notification jewel
Thursday, May 2, 13
User Flow for Requests
Sending Receive Push Notification Light up notification jewel
Thursday, May 2, 13
User Flow for Requests
Receive Push Notification Light up notification jewel Appear in notification list
Thursday, May 2, 13
User Flow for Requests
Receive Push Notification Cross-Platform(Web / iOS / Android /
Mobile Web)
Light up notification jewel Appear in notification list
Thursday, May 2, 13
Sending a Request
NSString *message = [NSString stringWithFormat:@"I just smashed %d friends! Can you beat it?", nScore]; [FBWebDialogs presentRequestsDialogModallyWithSession:nil message:message title:@”Invite Friend” parameters:params handler:nil];
Thursday, May 2, 13
Frictionless Requests
▪Automatically sends future requests without prompting the user
▪Useful for Games to send a “Your Turn” notification, to send lives/gifts to friends
Thursday, May 2, 13
Request Filtering
GET https://graph.facebook.com/USER_ID/friends?fields=devices
▪What if you don’t support all platforms?
▪Restrict Requests only to users that support your platforms...
▪Can query the set of devices a user has via the Graph API
▪Send the result of the query to your native Friend Selector
Thursday, May 2, 13
Demo: Sending Requests
Thursday, May 2, 13
Advanced Filtering
NSString *fql = @”SELECT uid, devices FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) and is_app_user = 0”;
[FBRequestConnection startWithGraphPath:@"/fql" parameters:@{@”q”: fql} HTTPMethod:@"GET" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { //parse list }];
▪Remove friends who are already using the app
▪Send the result to to your custom Friend Selector
Thursday, May 2, 13
Deep Linking from Requests
fb[APP_ID]://authorize#expires_in=[ACCESS_TOKEN_EXPIRATION] &access_token=[USER_ACCESS_TOKEN] &target_url=https://apps.facebook.com/[APP_NAME_SPACE]/?request_ids=[COMMA_SEPARATED_REQUESTIDs]&ref=notif&app_request_type=user_to_user
Thursday, May 2, 13
Build Your Own Friend Selector
▪Build your own friend selector for better results
▪Use your game’s artwork for a more consistent user experience
▪Native dialogs will perform better
▪Send the selected friends to the Facebook Requests Dialog
Thursday, May 2, 13
Thursday, May 2, 13
Sharing
Thursday, May 2, 13
Using the New Native Share Dialog
[FBDialogs presentShareDialogWithLink:[NSURL URLWithString:@"http://yoururl.com/"] name:@"Checkout how awesome I am" caption:@"See if you can beat me!" description:[NSString stringWithFormat:@"I just scored %d points!] picture:[NSURL URLWithString:@"http://youurl.com/yourimage.jpg"] clientState:nil handler:nil];
Thursday, May 2, 13
Sharing
Thursday, May 2, 13
Demo: Feed Dialog
Thursday, May 2, 13
Share Interesting Moments
Thursday, May 2, 13
Support Deep Linking when Sharing
▪ Feed and Timeline stories link directly to the native app
▪ Don’t just send users to a generic title screen, provide context
▪ Parse target_url to provide a contextual experience
Thursday, May 2, 13
Scores & Achievements
2012
Thursday, May 2, 13
Graph API for Scores▪ Simple API, only for
games
▪ Post an integer score for a player
▪ We generate stories automatically
▪ These stories are only for desktop Facebook
▪ ...but the Scores API is still useful for mobile...
Thursday, May 2, 13
Example: Publishing Scores
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: [NSString stringWithFormat:@"%d", nScore], @"score", nil]; FBRequest *req = [[FBRequest alloc] initWithSession:[FBSession activeSession] graphPath:[NSString stringWithFormat:@"%@/scores", playerFBID] parameters:params HTTPMethod:@"POST"];
[req startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {}];
Thursday, May 2, 13
Creating a Social Scoreboard
GET https://graph.facebook.com/APP_ID/scores? access_token=USER_ACCESS_TOKEN
"data": [ { "user": { "name": "Christine Abernathy", "id": "1424840234" }, "score": 106, }, { "user": { "name": "Amir Naor", "id": "627802916" }, "score": 57 }, ... ]
Thursday, May 2, 13
Demo: Social Scoreboard
Thursday, May 2, 13
Creating a Tournament
DELETE https://graph.facebook.com/USER_ID/scores/
DELETE https://graph.facebook.com/APP_ID/scores/
Delete individual user score
Delete all user scores
Easily delete scores, per-user or all users and run weekly tournaments
Thursday, May 2, 13
Achievements API
▪Define a set of achievements a player can earn in your game
▪Each achievement can be earned only once
▪Publishes on user’s Timeline, appears in News Feed
Thursday, May 2, 13
Managing Achievements
<html><head><meta property="og:type" content="game.achievement"/><meta property="og:title" content="50 Score!"/><meta property="og:description" content="Smash 50 friends in 1 round"/><meta property="og:url" content="http://www.friendsmash.com/achievement_50.html"/><meta property="og:image" content="http://www.friendsmash.com/images/achievement_50.png"/><meta property="game:points" content="50"/><title>Friend Smash! -‐ Achievement: 50 Score!</title></head><body><p>Friend Smash! -‐ Achievement: 50 Score!</p>
<img src="http://www.friendsmash.com/images/achievement_50.png" /></body></html>
POST https://graph.facebook.com/me/achievements& achievement=http://site.com/ach1.html& access_token=USER_ACCESS_TOKEN
Thursday, May 2, 13
Open Graph
Thursday, May 2, 13
Custom Open Graph Actions for Games
▪Custom actions and objects, tailored to your game
▪Publishes on the user Timeline and Newsfeed
▪Represents core gameplay interactions
▪Allows you to differentiate your game
Thursday, May 2, 13
2012
Requests Sharing Scores &Achievements
Open Graph
Thursday, May 2, 13