You are on page 1of 45

Turning players into payers:

best practices for monetization


Colin Creitz
Partner Engineer, Games
Users trust the Facebook brand

Facebook payments work everywhere

80+ payment methods

50+ countries

Built on familiar Facebook APIs


About Facebook payments
Setting up payments
Setting up payments
Setting up payments
Setting up payments
Cool new tech for driving conversions
Transition to local currency
$



z
GET https://graph.facebook.com/USER_ID?
fields=currency
&access_token=USER_ACCESS_TOKEN
data: {
"currency": {
"user_currency": "USD",
"currency_exchange": 10,
"currency_exchange_inverse": 0.1,
"currency_offset": 100
},
"id": "221159"
}

Get the users


preferred currency

Convert your
prices in your app

Invoke the
payment dialog
with a ag
Pricing in local currency
12 Price, in credits
x 0.1 currency_exchange_inverse
= 1.2 USD
1.20 rounded to nearest 1/currency_offset
= $1.20 Price you display

Get the users


preferred currency

Convert your
prices in your app

Invoke the
payment dialog
with a ag
Pricing in local currency
var obj = {
method: 'pay',
action: 'buy_item',
order_info: {'item_id': '1a'},
dev_purchase_params: {'oscif': true} //
N.B.
};
FB.ui(obj, callback);

Get the users


preferred currency

Convert your
prices in your app

Invoke the
payment dialog
with a ag
Pricing in local currency
Payer Promotion and In-App
Currency offers
Payer Promotion

Gets users into the payment ow

Free in-game credit for validated users

Creates payers

The easiest way to implement Payer Promotion is by doing in-app-


currency offers
KIXEYEs War Commander

By running Payer Promotion


over the last couple of
months, KIXEYE has grown
payer conversion by an
average of l8% across its
games.

War Commander users who


saw the Payer Promotion
exhibited a revenue lift of over
8% over the control group
In-app-currency offers
In-app-currency offers
1 Create an Open Graph currency object
2
Generalize your credits callback
3 Build an interface
<head prefix="og: http://ogp.me/ns#
fb: http://ogp.me/ns/fb#
fbpayment:http://ogp.me/ns/fb/fbpayment#">
<meta property="fb:app_id" content="YOUR_APP_ID" >
<meta property="og:type" content="fbpayment:currency" >
<meta property="og:url" content="URL_TO_THIS_WEBPAGE" >
<meta property="og:title" content="CURRENCY_PLURAL_NAME" >
<meta property="og:description" content="CURRENCY_DESCRIPTION" >
<meta property="og:image" content="IMAGE_URL_50x50px" >
<meta property="fbpayment:rate" content="CURRENCY_FX_RATE" >
</head>
1 Create an Open Graph currency object
In-app-currency offers
<head prefix="og: http://ogp.me/ns#
fb: http://ogp.me/ns/fb#
fbpayment:http://ogp.me/ns/fb/fbpayment#">
<meta property="fb:app_id" content="YOUR_APP_ID" >
<meta property="og:type" content="fbpayment:currency" >
<meta property="og:url" content="URL_TO_THIS_WEBPAGE" >
<meta property="og:title" content="CURRENCY_PLURAL_NAME" >
<meta property="og:description" content="CURRENCY_DESCRIPTION" >
<meta property="og:image" content="IMAGE_URL_50x50px" >
<meta property="fbpayment:rate" content="CURRENCY_FX_RATE" >
</head>
1 Create an Open Graph currency object
In-app-currency offers
In-app-currency offers
1 Create an Open Graph currency object
2 Generalize your credits callback
Before Now
1. pay dialog
2. payments_get_items
3. pay dialog
4. payments_status_update
5. client to server ping for balance
1. pay or fbpromo dialog
2. payments_status_update
3. client to server ping for balance
In-app-currency offers
2 Generalize your credits callback
Array (
[order_id] => 9006316682257, [receiver] => 409697, [status] => placed, ...
[items] => Array (
[0] => Array (
[item_id] => 0
...
[data] => {
"modified": {
"product":"URL_TO_APP_CURR_WEBPAGE", "product_title":"Your Currency",
"product_amount":3,
// always int; add this to the users balance in your app
"credits_amount":1
// always int; Facebook will pay you this many credits when fulfilled/settled
}
}
)
)
)
In-app-currency offers
3 Build an interface
DealSpot,
integrated
in Flash
In-app-currency offers
3 Build an interface
TrialPay offer
wall, invoked
via JavaScript
In-app-currency offers
3 Build an interface
function earn_currency() {
var obj = {
method: 'pay',
action: 'earn_currency',
product: 'CURRENCY_URL'
};

FB.ui(obj, js_callback);
}
In-app-currency offers
Payment Promotion-only Dealspot
Shows an offer to eligible users, invisible to ineligible ones
1
Check for eligibility
GET https://graph.facebook.com/USERID?
fields=is_eligible_promo&
access_token=USER_ACCESS_TOKEN
[{"is_eligible_promo":1, id: USERID}]
Payer Promotion in-game ow
2
Show the user the promo
Payer Promotion in-game ow

Show it when the boost it


provides will matter in play

Consider including a bonus item


in the offer
var obj = {
method: 'fbpromotion',
display: 'popup',
package_name: zero_promo,
product:http://your.currency.url/
};
FB.ui(obj, callback);
3
Invoke the fbpromotion dialog
Payer Promotion in-game ow
4
Confirm results at your payments callback
Payer Promotion in-game ow
Array (
[order_id] => 9006316682257, [receiver] => 409697, [status] => placed, ...
[items] => Array (
[0] => Array (
[item_id] => 0
...
[data] => {
"modified": {
"product":"URL_TO_APP_CURR_WEBPAGE", "product_title":"Your Currency",
"product_amount":3,
// always int; add this to the users balance in your app
"credits_amount":1
// always int; Facebook will pay you this many credits when fulfilled/settled
}
}
)
)
)
Without writing another line
of code...

Facebook will feature the promotion


on your behalf

Premium placement
Payer Promotion does more
Subscriptions
Subscriptions

Additional revenue channel

Create recurring revenue

Create additional engagement

Developers have seen incremental revenue


Subscriptions - key features

Monthly billing

Free trial

Alternate pricing by currency

Credit Card and Paypal support

Available to apps on Facebook.com


Build a subscription object

Specify the usual descriptive metadata, plus:

price, specied as a number and unit (5.99 USD)

Only one, acts as a default

alternate_price, specied the same way (3.99 EUR)

Zero or more, unspecied currencies computed from default

trial_duration, number and unit (7 days)

First billing period begins afterwards


Build a subscription object
<html>
<head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#
fbpayment: http://ogp.me/ns/fb/fbpayment#">
<meta property="fb:app_id" content="YOUR_APP_ID" />
<meta property="og:type" content="fbpayment:subscription" />
<meta property="og:title" content="Your Subscription" />
<meta property="og:image" content="https://your.subscription/image.png" />
<meta property="og:description" content="The best subscription around!" />
<meta property="og:url" content="http://canonical.url/" />
<meta property="fbpayment:price" content="5.99 USD" />
<meta property="fbpayment:alternate_price" content="3.99 EUR" />
<meta property="fbpayment:alternate_price" content="3.99 GBP" />
<meta property="fbpayment:trial_duration" content="7 days" />
</html>
Sell a subscription
var obj = {
method: 'pay',
action: 'create_subscription',
product: 'SUBSCRIPTION_URL'
};
FB.ui(obj, callback);

Check for eligibility using the Graph API

GET https://graph.facebook.com/USER_ID/payment.subscriptions

Sell using the payment dialog


Subscriptions
Subscription management
Real-time updates

Find out about changes users make outside your app

You provide a callback, an HTTP endpoint

Your app creates an RTU subscription using the Graph API, passing in the callback URL

Facebook noties the callback

via GET when a new RTU subscription is created

via POST when a subscribed object changes


New Reporting API
New reporting API

Were replacing email reports with a web-facing API

Fetch your own reports, via HTTPS, when you want them

Reliable, secure, and exible


New reporting API

Were replacing email reports with a web-facing API

Fetch your own reports, via HTTPS, when you want them

Reliable, secure, and exible


GET https://graph.facebook.com/oauth/access_token?
client_id=COMPANY_ID&
client_secret=COMPANY_SECRET&
grant_type=client_credentials
1 Get a company access token
New reporting API
GET https://paymentreports.facebook.com/COMPANY_ID/report?
date=YYYY-MM-DD&
type=[detail|digest]&
access_token=COMPANY_TOKEN
2 Download your reports
New reporting API
Things to remember

Were always adding new ways for developers to make money

Local Currency: Improved monetization

Payer Promotion: Facebook sponsors great benets

Subscriptions: New revenue channels

Reports: Secure, reliable, and exible

You might also like