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.

Jaana MetsamaaMobile 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.

Fortumo one-click mobile payment flow in Rovio's Angry BirdsOn 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:

  1. 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.
  2. 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.
  3. settings =
      plugins =
    		-- key is the name passed to Lua's require()
    		["plugin.fortumo"] =
    			-- required
    			publisherId = "com.fortumo",
  4. Making a payment: Configuring payments with Fortumo is simple:
  5. -- 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
     -- 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);

    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.

  6. 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.

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 support@fortumo.com.

Share this post....Share on Facebook0Share on Google+2Tweet about this on TwitterShare on LinkedIn0
  1. @ 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.

  2. So 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?

      • Hi 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.

    • Hi 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

  3. I 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


    which one is correct?

    • You 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.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>