SlideShare una empresa de Scribd logo
1 de 50
Descargar para leer sin conexión
developers
Prashant Sridharan
github.com/CoolAssPuppy
@CoolAssPuppy
Building Social Games
Thursday, May 2, 13
iOS & Android Devices - Time Spent
Source: Flurry Analytics
http://blog.flurry.com/bid/95723/Flurry-Five-Year-Report-It-s-an-App-World-The-Just-Web-Lives-in-It
20%
Browser
14%
Other
8%
Utility
8%
Enterta-
inment
32%
Playing Games
18%
Facebook
0% 100%
50%
Thursday, May 2, 13
28%
72%
US top 400 grossing iOS apps
Source: App Figures
Thursday, May 2, 13
22%
78%
US top 400 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?
143
Source: 124Apps.biz
http://148apps.biz/app-store-metrics/?mpage=submission
Thursday, May 2, 13
250M
Gamer MAU
751M
Mobile MAU
1.1B+
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
1. Invites
2. Sending Gifts
3. Leaderboards
4. Tournaments
5. Bragging
6. Challenges
Thursday, May 2, 13
Sending Invites
Custom
Friend Picker
Thursday, May 2, 13
Sending Gifts
Invitations
with Value
Thursday, May 2, 13
Sending Gifts
Invitations
with 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 Leaderboards
Peer Pressure
Bubble Witch
Saga
Thursday, May 2, 13
Weekly Tournaments
Build regular
engagement
Diamond
Dash
Thursday, May 2, 13
Bragging
Finding natural
moments to share
new share dialog
screenshot neede
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=not
if&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

Más contenido relacionado

Similar a Building social games

Lost in o auth? learn velruse and get your life back
Lost in o auth? learn velruse and get your life backLost in o auth? learn velruse and get your life back
Lost in o auth? learn velruse and get your life back
Andrew Mleczko
 
Jaoo - Open Social A Standard For The Social Web
Jaoo - Open Social A Standard For The Social WebJaoo - Open Social A Standard For The Social Web
Jaoo - Open Social A Standard For The Social Web
Patrick Chanezon
 
Arif hasnat (android apps and games development)
Arif hasnat (android apps and games development)Arif hasnat (android apps and games development)
Arif hasnat (android apps and games development)
Arif Hasnat
 

Similar a Building social games (20)

Creating Chatbots with Botman - English
Creating Chatbots with Botman - EnglishCreating Chatbots with Botman - English
Creating Chatbots with Botman - English
 
Laravel Poznań Meetup #2 - Creating chatbots with BotMan
Laravel Poznań Meetup #2 - Creating chatbots with BotManLaravel Poznań Meetup #2 - Creating chatbots with BotMan
Laravel Poznań Meetup #2 - Creating chatbots with BotMan
 
Lost in o auth? learn velruse and get your life back
Lost in o auth? learn velruse and get your life backLost in o auth? learn velruse and get your life back
Lost in o auth? learn velruse and get your life back
 
Passing a Front end Developer interview
Passing a Front end Developer interview Passing a Front end Developer interview
Passing a Front end Developer interview
 
Lone StarPHP 2013 - Building Web Apps from a New Angle
Lone StarPHP 2013 - Building Web Apps from a New AngleLone StarPHP 2013 - Building Web Apps from a New Angle
Lone StarPHP 2013 - Building Web Apps from a New Angle
 
Traning security 2013
Traning security 2013Traning security 2013
Traning security 2013
 
Iskandar Najmuddin
Iskandar NajmuddinIskandar Najmuddin
Iskandar Najmuddin
 
Learn Developing REST API in Node.js using LoopBack Framework
Learn Developing REST API  in Node.js using LoopBack FrameworkLearn Developing REST API  in Node.js using LoopBack Framework
Learn Developing REST API in Node.js using LoopBack Framework
 
The social media developer
The social media developer The social media developer
The social media developer
 
Introduction to Parse
Introduction to ParseIntroduction to Parse
Introduction to Parse
 
Jaoo - Open Social A Standard For The Social Web
Jaoo - Open Social A Standard For The Social WebJaoo - Open Social A Standard For The Social Web
Jaoo - Open Social A Standard For The Social Web
 
Pwa devoxx
Pwa devoxxPwa devoxx
Pwa devoxx
 
Building fb mobile
Building fb mobileBuilding fb mobile
Building fb mobile
 
Foundations of a Social Application Platform
Foundations of a Social Application PlatformFoundations of a Social Application Platform
Foundations of a Social Application Platform
 
Hta f43
Hta f43Hta f43
Hta f43
 
Arif hasnat (android apps and games development)
Arif hasnat (android apps and games development)Arif hasnat (android apps and games development)
Arif hasnat (android apps and games development)
 
Anshul 2015
Anshul 2015Anshul 2015
Anshul 2015
 
So what's a web app? introduction to the chrome web store
So what's a web app? introduction to the chrome web storeSo what's a web app? introduction to the chrome web store
So what's a web app? introduction to the chrome web store
 
Use Web Skills To Build Mobile Apps
Use Web Skills To Build Mobile AppsUse Web Skills To Build Mobile Apps
Use Web Skills To Build Mobile Apps
 
Traxo Presentation - Facebook Garage Dallas 09
Traxo Presentation - Facebook Garage Dallas 09Traxo Presentation - Facebook Garage Dallas 09
Traxo Presentation - Facebook Garage Dallas 09
 

Último

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Último (20)

Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 

Building social games

  • 2. iOS & Android Devices - Time Spent Source: Flurry Analytics http://blog.flurry.com/bid/95723/Flurry-Five-Year-Report-It-s-an-App-World-The-Just-Web-Lives-in-It 20% Browser 14% Other 8% Utility 8% Enterta- inment 32% Playing Games 18% Facebook 0% 100% 50% Thursday, May 2, 13
  • 3. 28% 72% US top 400 grossing iOS apps Source: App Figures Thursday, May 2, 13
  • 4. 22% 78% US top 400 grossing Android apps Source: App Figures Thursday, May 2, 13
  • 5. On average in March, how many games were added to the Apple App Store every day? 143 Source: 124Apps.biz http://148apps.biz/app-store-metrics/?mpage=submission Thursday, May 2, 13
  • 7. Facebook Provides Unique Social Channels 2012 Requests Sharing Scores & Achievements Open Graph Thursday, May 2, 13
  • 8. Scenarios for Using Facebook Social Channels 2012 1. Invites 2. Sending Gifts 3. Leaderboards 4. Tournaments 5. Bragging 6. Challenges Thursday, May 2, 13
  • 11. Sending Gifts Invitations with Value ‣ Q: Why use this over native push notifications? - Cross-Platform - Works with users who’ve not installed your app Thursday, May 2, 13
  • 12. Social Leaderboards Peer Pressure Bubble Witch Saga Thursday, May 2, 13
  • 14. Bragging Finding natural moments to share new share dialog screenshot neede Thursday, May 2, 13
  • 15. Start with Facebook Login User’s identity Appearing in SearchUser’s friends Getting Distribution Thursday, May 2, 13
  • 16. 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
  • 17. Ask for Read Permissions First [FBSession      openActiveSessionWithReadPermissions:@[@”email”]                                                    allowLoginUI:YES                                          completionHandler:    ^(FBSession  *session,  FBSessionState  status,  NSError  *error)      {          //handle  result      } ]; Thursday, May 2, 13
  • 18. 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
  • 19. Support Free & Paid Versions of Your App FBSession  *fbSession  =  [[FBSession  alloc]  initWithAppID:@"480369938658210"                                                                                        permissions:permissions                                                                                urlSchemeSuffix:@"free"                                                                          tokenCacheStrategy:nil]; Thursday, May 2, 13
  • 21. Get Existing Users to Recruit New Users Thursday, May 2, 13
  • 22. User Flow for Requests Sending Receive Push Notification Light up notification jewel Thursday, May 2, 13
  • 23. User Flow for Requests Sending Receive Push Notification Light up notification jewel Thursday, May 2, 13
  • 24. User Flow for Requests Receive Push Notification Light up notification jewel Appear in notification list Thursday, May 2, 13
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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
  • 30. 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
  • 31. 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=not if&app_request_type=user_to_user Thursday, May 2, 13
  • 32. 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
  • 35. 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
  • 39. 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
  • 41. 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
  • 42. 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
  • 43. 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
  • 45. 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
  • 46. 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
  • 47. 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
  • 49. 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
  • 50. 2012 Requests Sharing Scores & Achievements Open Graph Thursday, May 2, 13