SlideShare une entreprise Scribd logo
1  sur  50
Télécharger pour lire hors ligne
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

Contenu connexe

Similaire à Building social games

Creating Chatbots with Botman - English
Creating Chatbots with Botman - EnglishCreating Chatbots with Botman - English
Creating Chatbots with Botman - EnglishLaravel Poland MeetUp
 
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 BotManHighSolutions Sp. z o.o.
 
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 backAndrew Mleczko
 
Passing a Front end Developer interview
Passing a Front end Developer interview Passing a Front end Developer interview
Passing a Front end Developer interview tonyfarnsworth
 
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 AnglePablo Godel
 
Iskandar Najmuddin
Iskandar NajmuddinIskandar Najmuddin
Iskandar NajmuddiniPlatform
 
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 FrameworkMarudi Subakti
 
Introduction to Parse
Introduction to ParseIntroduction to Parse
Introduction to Parseabeymm
 
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 WebPatrick Chanezon
 
Foundations of a Social Application Platform
Foundations of a Social Application PlatformFoundations of a Social Application Platform
Foundations of a Social Application PlatformJonathan LeBlanc
 
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
 
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 storeEric Bidelman
 
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 AppsNathan Smith
 
Traxo Presentation - Facebook Garage Dallas 09
Traxo Presentation - Facebook Garage Dallas 09Traxo Presentation - Facebook Garage Dallas 09
Traxo Presentation - Facebook Garage Dallas 09Chris Stevens
 

Similaire à 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
 

Dernier

Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 

Dernier (20)

Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 

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