Key takeaways

  • Place the wall where players want currency, and always keep it optional.
  • Build the signed link and credit rewards on your server; the salt and the wallet never live in the app.
  • Apple and Google both forbid incentivized ratings and reviews, and both have more rules to check before release.

Why an offerwall instead of banners

Banner ads in a game take screen space on every session, earn little per view, and make the game feel cheaper. An offerwall works the other way around: nothing appears until a player chooses to open it, and it pays for completed actions rather than views. Players who would never buy gems can still earn them by trying another game or answering a survey, and you earn from every confirmed completion.

This guide covers the practical side: placement, opening the wall, security, crediting, currency design, and store rules. For the model itself, read What is an offerwall?, and for how it compares with video ads, Offerwall vs rewarded video ads.

Where to place the wall

  • In the store or currency screen. A “Get free gems” entry next to your in-app purchase packs is the most natural spot. Players who are already thinking about currency see an alternative to paying.
  • When a player runs short. If an item costs 300 gems and the player has 120, offer three choices: buy gems, wait, or earn them on the wall.
  • At soft gates. Energy timers, extra lives, and optional content are good moments to mention the wall, as long as there is always another way forward.
  • In events. A limited event with a premium reward gives players a reason to earn this week.

Never force it

Do not require offers to progress, to unlock core features, or to keep playing. Apple’s guidelines forbid forcing users to download other apps or take other store-related actions to access functionality, and Sharklio does not allow the wall behind a paywall, in pop-ups, or anywhere that misdescribes what users must do.

Open it in a WebView or the system browser

A web-based offerwall needs no SDK. You open a link, and you have two choices:

  • An in-app WebView keeps players inside your game and lets you add your own header and a close button. Test that links to app stores open correctly from it, since many offers send players to a store page; you may need to pass those links to the system.
  • The system browser, or an in-app browser tab such as Custom Tabs on Android or SFSafariViewController on iOS, handles store redirects, sign-ins, and cookies the way players expect, at the cost of briefly leaving your UI.

Either way, refresh the player’s balance when they return, because rewards arrive through your server, not through the page. On Sharklio, the link opens directly in a WebView or a browser anywhere, while iframe embedding only works on the website you registered for the app.

Sign the link on your server

The wall link carries the player’s user ID and a hash that proves you created it. On Sharklio, the link is https://wall.sharklio.com/{APP_ID}?user_id=...&hash=..., and the hash is an HMAC-SHA256 of the user ID with your app’s link hash salt. Without the hash, anyone could change the user ID and earn rewards into someone else’s account.

The salt is a secret, and anything shipped inside an app can be extracted. So the flow is:

  1. The game asks your backend for the wall link, with the player’s normal session token.
  2. Your backend looks up the player’s account ID, builds the hash, and returns the finished link.
  3. The game opens that link.
$userId = (string)$player->id;
$hash   = hash_hmac('sha256', $userId, $linkHashSalt);
$link   = 'https://wall.sharklio.com/' . $appId . '?user_id=' . rawurlencode($userId) . '&hash=' . $hash;

Use an ID that never changes for the same player, such as your account ID, not a device ID that resets on reinstall. If the same player uses your website and your app, use the same ID on both. The full reference, with Node.js and Python versions, is on the Offerwall link docs page.

Credit rewards with server-to-server postbacks

Never credit from the app, and never trust the page to tell you a player earned something. When a result is final, the offerwall calls a URL on your server. Your server checks the signature and updates the player’s wallet, which the game then reads. Sharklio sends a status with each postback:

StatusMeaningYour server
1CreditedAdd the reward, once per transaction ID.
2ReversedTake the reward back, if you credited it.
3Pending (opt-in)Show it as on its way. Do not credit yet.
4RejectedNothing to credit.

Each completion keeps one transaction ID for its whole life, so store the last status you processed and skip repeats after a retry. Answer quickly with a 2xx status. A push notification such as “Your 450 gems have arrived” after a status 1 is a nice touch that brings players back. See Postbacks and Chargebacks in the docs, or What is a postback URL? for the concept.

Plan for reversals. If a player already spent reversed gems, decide in advance whether the balance can go negative, and say so in your terms.

Design your currency and rate

On Sharklio you set the currency name and icon, a rate in units per $1, and the user split, and each offer shows its reward in your currency. Three questions help you pick the numbers:

  1. What does currency cost in your store? If players can buy it, your IAP prices are the reference they will compare against.
  2. How much effort should a premium item take? Earning should feel achievable but meaningful, so the wall adds to purchases instead of replacing them.
  3. Do the numbers look good on the wall? Rewards like 450 gems read better than 4.5 gems, so pick a rate that avoids tiny decimals.

Hypothetical example with sample numbers

A game sells 500 gems for $4.99, about 100 gems per dollar spent. The developer sets the wall rate at 1,000 gems per $1 of earnings with a 60% user split, so an offer that earns the developer $1.50 shows 900 gems. Earning 500 gems through offers takes real effort, and buying them stays the quick option. These numbers are invented to show the method.

Watch purchases after launch. If IAP revenue drops while offerwall revenue rises by less, your rate is too generous. How much can you earn with an offerwall? shows how to estimate and track the result.

App store policies to check

Apple and Google both have rules on incentives, and both update them. Read the current App Store Review Guidelines and the Google Play policy on ratings, reviews, and installs before you submit. At the time of writing, they include:

  • No incentivized ratings or reviews. Apple warns that apps which manipulate reviews with paid, incentivized, filtered, or fake feedback can be removed, and Google Play gives asking users to rate an app while offering an incentive as an example of a violation. Never reward a rating, a review, or a specific star count.
  • No forced store actions. Apple guideline 3.2.2(x) says apps must not force users to rate, review, or download other apps to access functionality, while allowing incentives for actions within the app, such as completing a level or watching an ad.
  • Installs are not your main feature. Google Play prohibits incentivizing users to install other apps as the app’s main functionality. An offerwall should be one part of a real game.
  • Not in apps for children. Google Play’s Families policy lists offerwalls among the monetization formats not allowed in apps that target children. Sharklio also requires end users to be at least 16.
  • Crypto rewards. Apple does not allow cryptocurrency apps to offer currency for tasks such as downloading other apps.

Also follow your own traffic rules: no paid installs of your app to farm the wall, and no rewards for users who complete offers through VPNs. See the traffic quality rules.

Our recommendation

Sharklio fits this setup without an SDK: one signed link from your backend, your own currency name, icon, colors, and rate, and a postback for every credit and reversal. Publisher applications are opening soon. See how to prepare your application and read the Quick start.

Frequently asked questions

Do I need an SDK to add an offerwall to my app?

Not with a web-based wall such as Sharklio’s. Your backend builds a signed link, the app opens it in a WebView or browser, and your server credits players from postbacks.

Can I put the link hash salt in my app?

No. Anything shipped in an app can be extracted. Keep the salt on your server and send the finished link to the app.

Is an offerwall allowed on the App Store and Google Play?

Offerwalls are used in many store apps, but you must follow each store’s rules, including no incentivized reviews, no forced installs, and no offerwalls in apps for children. Read the current policies before each release.

Can I use one app for my game and my website?

Yes, if the same player has the same user ID on both. If they need different currencies, create a second app.