30 May 2013
Guest Post: Increasing App Revenue with Fortumo Mobile Payments
Jaana Metsamaa is the head of engineering at Fortumo, the mobile payments company that powers in-app payments for game developers such as Rovio, Gameloft, Vostu and Zeptolab. The company covers 80 countries through 300 operators and lets users make payments on the web and in Android, Windows 8 and Windows Phone apps.
Fortumo recently added Corona SDK support for their Android and NOOK in-app payments via a Corona Plugin. In this post, Jaana walks developers through the integration process for adding mobile payments into their Android apps built with Corona.
Mobile payments give end-users a way to make in-app payments by charging purchases to their phone bill. Mobile payments work for literally anyone who has a mobile phone, whereas credit card payments are available to only those that have a credit card. In most countries (especially emerging markets such as Brazil and China) phones outnumber credit cards by up to ten times. This means adding mobile payment capability into your app will significantly increase the number of potential paying users.
On top of that, mobile payments are significantly faster than credit card payments – users do not need to sign up, fill out forms or enter their credit card credentials. You can see an example of Fortumo’s one-click mobile payment flow in the Angry Birds’ screenshot to the right. It’s a one-click solution from the first payment, requires no sign up or registration, and ultimately leads to higher conversion rates and revenue.
Developers using Corona SDK can now integrate Fortumo’s payments and start billing in any Android app store, including Google Play, NOOK Apps, Amazon Appstore and other 3rd party app stores. Integration should only take about an hour. Here’s how to get started:
- Service Setup via Fortumo homepage: Create an account on our homepage and navigate to the Dashboard. On the Dashboard, create a new service for in-app purchasing on Android or NOOK. After creating the service, you will need to integrate the Fortumo Corona Plugin into your app.
- Configuring the SDK: In order to use the Fortumo plugin, you need to add the following to your “build.settings” file. Note that the Corona simulator will automatically include the Android permissions that the plugin needs to the built APK.
- Making a payment: Configuring payments with Fortumo is simple:
- Setting up server side receipt verification (optional): Receipt verification is a convenient way to stream payment data to your servers and for integrating in-app purchases with users online profile so that purchases and users’ virtual items can be kept track of online. Receipt verification works by making a HTTP GET request to your server after each payment. Here you can read about how to get your service backend to talk to Fortumo.
1 2 3 4 5 6 7 8 9 10 11 12 |
settings = { plugins = { -- key is the name passed to Lua's require() ["plugin.fortumo"] = { -- required publisherId = "com.fortumo", }, }, } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
-- enable Fortumo plugin local fortumo = require("plugin.fortumo") -- initiate Fortumo payment object local request = fortumo.newPaymentRequest(); -- set the product name to be displayed to the user request:setDisplayString("Super Powers #1"); -- associate the payment with your Fortumo account request:setService("service id", "app secret"); -- set unique product identifier request:setProductName("ProductSKU-User123"); -- non-consumable products (by product name) can be restored even after app uninstall request:setConsumable(false); reinstall -- launch the payment flow fortumo.makePayment(request, onPaymentComplete); … -- And once the payment has been completed, we’ll receive the payment result function onPaymentComplete(response) print("complete=" .. response.billingStatus); end |
onPaymentComplete may return fortumo.BILLING_STATUS_PENDING if the UI is hidden before the payment is completed. If it’s a non-consumable product then it will return fortumo.BILLING_STATUS_BILLED the next time makePayment is called. Alternatively, it’s possible to use fortumo.setStatusChangeListener() method to get notified as soon as possible in the background.
The full Fortumo Lua API documentation for more details about the APIs and access to the sample project can be found at http://docs.coronalabs.com/daily/plugin/fortumo.
After testing and making sure that payments work, you’re good to go!
We are excited to be working with Corona developers and are looking forward to bringing you additional revenue from users without credit cards. If you have any questions or need help with the integration, please let us know at [email protected].
Daniel Williams
Posted at 10:52h, 30 MayMaybe I missed it, but what build do I need to use for Fortumo?
David
Posted at 10:57h, 30 MayDaniel – you need 1133 or later to be safe. This is the line labeled “Revision” in the docs page: http://docs.coronalabs.com/daily/plugin/fortumo/
carlostg
Posted at 11:36h, 30 MayWill this work for iOS anytime soon?
David Rangel
Posted at 13:59h, 30 MayCarlos – answer is probably no. Apple IAP are the only way to do IAP on iOS.
Kerem
Posted at 12:12h, 30 May@ carlostg, I might be wrong but I think the Apple Dev policies may be forbidding the use of services like this on IOS apps published on App Store. I think Apple would never want to allow a sidestream out of their revenues… Just a hunch.
Opus
Posted at 13:03h, 30 MaySo if someone buys an In-app purchase. How is the money split up. On Apple it is 70/30. Is this same on Android, Nook? How does Fortumo make money from this?
David Rangel
Posted at 14:15h, 30 MayOpus – you probably want to look at this:
http://fortumo.com/countries
Jaana
Posted at 14:24h, 30 MayYes on NOOK it is 70/30 and for mobile billing you can check http://fortumo.com/countries.
Holger
Posted at 14:06h, 30 MayDoes Fortumo work on devices that only have w-lan connection?
Jaana
Posted at 14:23h, 30 MayFor mobile billing, the user needs to go online once, to get the payment information, after that offline payments can be done as well.
On NOOK where credit card billing is used, users need to be online to make purchases.
Holger
Posted at 14:31h, 30 MayThank you Jaana. Can I find info on your web site?
Martin
Posted at 14:48h, 30 MayHi Holger, yes you should find all basic information from http://fortumo.com, country based revenue shares and payout terms from http://fortumo.com/countries and developer support documentation from http://developers.fortumo.com/
If you have further questions please contact Corona or Fortumo [email protected]
Scott D Brooks
Posted at 14:12h, 30 MayWoo hoo! Awesome! Thank you for partnering with a provider that will also work on Amazon! … and 80% revenue share? Even better.
Jorge
Posted at 22:01h, 30 MayFortumo supports Amazon Appstore, as in apps for kindle? Does it then work like in-app purchasing for the nook, or do I have it wrong?
Martin
Posted at 00:01h, 03 JuneHi Jorge, you are right:
1) You can include Fortumo in-app payments for applications in Amazon Appstore. Amazon does not restrict 3rd party payments in their Appstore.
2) Fortumo is in-app payments provider for Nook Appstore.
So basically when you have Android game/app and you have integrated Fortumo payments, you should be able to use the same code-base and submit your App to all Appstores who allow 3rd party payments.
Damir
Posted at 13:24h, 31 MayLast time I checked, the revenue share was very bad for the developers…
Martin
Posted at 23:58h, 02 JuneHi Damir,
Revenue shares depend a lot from countries and operators. Fortumo is constantly negotiating better terms with operators and so revenue shares for developers are improving constantly.
Examples: Nook pays 70% to developers; Revenue in Russia ~75% etc. Please check revenue shares for each specific country which you are targeting from http://fortumo.com/countries
Opus
Posted at 08:01h, 03 JuneSo is this the “goto” way to do IAP on Android?
rhaine
Posted at 19:18h, 23 OctoberI am new to fortumo, where can I get SKU? and also, corona documentation has this request set type
request:setType( fortumo.PRODUCT_TYPE_NON_CONSUMABLE )
and the example above shows
request:setConsumable(false);
which one is correct?
Rob Miracle
Posted at 19:31h, 23 OctoberYou make up your own SKU when you define the product in the Fortumo dashboard.
I believe that request:setConsumable( false ) may be old code. There are no references it in the documentation. There is a good chance the sample app hasn’t been updated.