What is Megacool?

Megacool is a mobile SDK for recording and sharing content. It enables app developers to easily capture highlights of what is going on in their app, and share that as animated GIFs or screenshots. Megacool also assists in linking back to that content, so that if a user shares something from a particular part of the app, a link can be attached to the share that takes other users to the same part of the app.

Who are you guys?

You can see us at our company page. Hi! 👋

What are the key benefits of using Megacool?

What does it cost?

Using our free plan is completely free! See our pricing page for what our different plans offer.

Why is it free?

Our free plan is subsidized by our Enterprise plan.

Which platforms and devices does the SDK support?

The SDK works on iOS devices running iOS 7 or newer (recording only works on iOS 8 and newer), and Android devices running API level 16 (4.1.x) and newer.

We publish SDKs for native iOS, native Android and Unity. On iOS the SDK works well with both Swift and Objective-C, and on Android with both Kotlin and Java. If you use a custom game engine you can read about how to use our SDK with your custom engine here. We are evaluating adding more platforms based on the feedback we get.

What kind of apps can use Megacool?

All apps that have interesting visual content that users might like to share! Currently, we are integrated primarily into games, but it's possible to also use Megacool with custom camera apps or similar that creates content that could benefit from sharing.

What does an ideal integration with Megacool look like?

Glad you're asking! Check out our best practice guide.

This seems like a cool thing for a racing game, but not for my slow paced game

That's a comment, not a question! But we'll address it anyway: A slow paced game can still be exciting to share, we can compress long-form content as a timelapse or extract highlights automatically to help bring out the best moments. Take a look at the docs for the different recording modes to learn more.

I want to share the dashboard with more people, can I add them to my account?

You can invite new team members on your Team page on the Megacool dashboard.

How long does it take to integrate with Megacool?

This depends on the level of customization, most people have been able to get most features working in a couple of hours, with a full integration that fits the UI and feel of the game in a couple of days. The closer you integrate recording and sharing into the flow of the app the more time it'll take.

Do users need an account to share?

No. We enable users to share to whatever apps they already have on their device, and we work hard to ensure they all work. We support all apps that accept a GIF or MP4 on iOS and Android, but we have tested and verified that it works with the apps listed on the app support page.

I ran into an issue I don't know how to fix, can you help?

We'd love to! You can use the chat bubble on this page to reach us through Intercom.

Can I reward a user for sharing?

To some extent, yes, but completing a share is not a very strong signal as the user could simply be sending themselves an email or similar. We recommend rewarding the sender when someone installs the game from their share, which you can do by listening to the sentShareOpened event. On iOS Apple is generally against rewarding the receiver for installing, so we recommend not doing that to avoid any surprises.

What is the performance impact of Megacool?

As low as we can make it! We try hard to minimize the impact of the SDK, but it will take up some extra CPU during normal operation for the recording to work. It's hard to give a good general answer to this, try it in your app and see. If you're having performance problems, please reach out to us and we might be able to help diagnose the issue.

What is the size of the Megacool SDK?

The download size of the SDK is 700KB on Android (900KB unpacked), and 2.5MB on iOS (5MB unpacked).

Is the GIF stored anywhere?

It's not stored on the users' device, but to make link previews work all shared recordings are uploaded to our servers where we persist them until they're no longer regularly used. This way the user always has access to their content (as long as they have the links). To store it locally the user has to share to something like their camera app or Dropbox or some other channel that can persist the GIFs.

Is it possible to download the GIF from your servers?

Not at the moment, but if this is something you find interesting, please reach out, and we might prioritize something like this in the future.

Can we see any analytics on the impact of adding Megacool?

Yes, on your dashboard you can see how many shares are created in your game and the number of link clicks, new installs and re-engaged users they have created. You also get insights into which apps your users share to and how they perform.

How much bandwidth does the SDK use?

To ensure that link previews work wherever the user decides to share the recording, the recordings are uploaded to our servers whenever a share is initiated. There are also situations where we can't be sure if a share is completed or not which requires us to upload the recording in advance. Recordings uploaded from shares that didn't end up being shared are deleted. The size of each recording uploaded depends on how well the particular app compresses and the screen dimensions, but generally, it'll be in the 300kB-600kB range.

Can I test how Megacool works without implementing it my game?

Yes! You can test us through some of the games that are using our SDK, such as CATS.

What data does Megacool collect about users?

As little as possible! We collect the device manufacturer and model, our own pseudonymous identifer, the version of the operating system and the version of your app. We need this both to make deep linking work reliably, and to be able to reproduce crashes and issues. A full list of data collected is included in our privacy policy. Notably, we do not collect advertising identifiers on either platform.

Is Megacool GDPR compliant?

Yes! You have to include a reference to our privacy policy in your own privacy policy that is presented to your users, but apart from that, you don't need to ask for permission from users. See our terms for more details.

Which parts of the recording and sharing experience can I customize?

You can configure these properties:

Why should I use Megacool instead of some other deep linking/marketing tool?

Megacool is the only solution that fully empowers your own users to be your marketing team. They know best what they want to share and where to share it, and will do so if you provide them with engaging content. We enable you to create that content, and leverage that to grow your user base.

A new SDK version is out, when should I update the SDK in my game?

It's recommended that you update the SDK every time you update your game if there are updates. The SDK is built with backward compatibility in mind, so you shouldn’t need to make any changes. If there are changes required, the release notes will tell you that. Also, it’s always a good idea to test the Megacool recording & sharing functionality before submitting your app to the App Store. If you encounter any errors with our SDK updates, we’d love to hear about them through our issue tracker or directly at support@megacool.co.


How does sharing recordings work?

Different apps accept media in different formats. When a recording is shared we create both a .gif and a .mp4 version of the recording and deliver the best format accepted by a given app. When we evaluate the best format we value that the recording autoplays, loops, and that we can include a link. How many of these properties of a share we can achieve depends on the target app. Often if we only share a .gif it'll be converted into a still image by the target app, which is no fun, but we can usually work around this by giving these apps a .mp4 instead, but then we often lose the looping property. In other cases, we can't include a link when we share media, but the app will generate rich link previews if we share a link. In these cases, we rely on the recording being uploaded to our servers so that we can include it when the app tries to render the rich link preview.

How long can a recording be?

The default limit is 50 frames, with the default playback framerate of 10fps that yields a 5-second recording. This is roughly the length we recommend you keep your recordings. Longer recordings are constrained by the file size of the resulting GIF, which quickly gets overwhelming, so we don't recommend going far beyond the 10s range.

I have a long game session but only want to share a subset of it, how can I do this?

The SDK supports three different techniques to compress long recordings into something short that can be shared. These techniques are called overflow strategies and is one of highlight, latest and timelapse. The default is latest, which will always include the last seconds of the recording. The highlight strategy you can use together with the registerScoreChange method to indicate when something of interest happens in the app, like the user scoring a point or goal, or crashes, or hits an opponent, etc. The final recording will then contain the segment between the start and stop with the highest sum of scores. The timelapse strategy will ensure the full duration of the recording is included, but sped up to match the target length. Timelapses are well suited when it's interesting to see progress, i.e. when drawing or building a city and similar. You can see examples of our different recording strategies on our website here.

Can users decide themselves what to record?

You could implement start/stop recording buttons in the game that maps to the start and stop method calls in the SDK, but we recommend that you keep recording on at all times since the user rarely knows up front if a moment is going to be worth recording. With the highlight recording feature, you can easily annotate moments in your app as they occur, enabling us to extract only the best parts of a longer recording.

What happens if the user runs out of disk space while recording?

The recording will stop, and the subsequent preview and share will only include frames captured while there was disk space available. When the recording is stopped and started over the old frames will be deleted and the same thing will repeat itself until more disk space is available.

What is the resolution of the recording? Can I customize it?

To balance the quality and performance of the SDK and resulting file sizes we default to half the screen resolution. If the longest edge of the screen is larger than 1500px we halve it once more, thus most recordings will be in the 350x200-640x360 range.

Can I add a fallback media for failed recordings?

Yes. You can set your own fallback media as a JPEG, PNG, GIF or MP4, that is used in cases where the recording is missing from the share. We recommend using an animated media (GIF or MP4) that is engaging to the viewer. When choosing your media file please keep in mind that there's a size limit for some social media platforms, so try to stay below 3MB.

Note: Fallbacks also need to be set on the server-side for the best experience, but we don't have an automatic way to set these yet. Contact us if you want this and we'll help you get it sorted.

You can read more about recordings here and how to set your fallback media here.

Can I record a webview?

No, not easily at the moment, but let us know if you need this and we can prioritize a fix and let you know when it's supported!

Why am I getting warnings from the main thread checker on iOS?

Our default capture mechanism on iOS relies on calling some graphics APIs on a background thread, which angers the main thread checker. We believe our usage of these APIs is entirely safe and have never encountered any crashes from this, and thus recommend you turn off the main thread checker in your scheme settings to avoid being interrupted by it all the time.


What is deep linking?

Deep linking is when a link works equally well on all platforms and takes you straight to the content you're interested in. On the web this is the default, but often when implementing linking into apps, everything beyond the domain is often ignored. Deep links enable you to link directly to a particular section of your app, like a user's profile or an item in a shop or a specific location on a map. This enables users to share exactly what they're experiencing with others more easily.

Apple introduced Universal Links in iOS 9 as a way to launch apps with traditional HTTP links if the app is installed on the device. A universal link is a merge of a deep link and web link to one link. With a Universal Link, you can route the user to the right place inside your app with the right context. I.e. https://myapp.com/battle?username=nbroby can open the battle-scene and match against the user nbroby. This will give a smooth user experience with context and most importantly the user doesn't get redirected to the web browser and then to the app like deep links do.

Say someone completes level 3 in your app on "hard" difficulty level and shares a recording of that. You can customize the link for the share to look like this:


If someone else clicked on this and already has the app installed the app will be opened and you will receive a link-clicked event with the URL /level3?difficulty=hard that you can use to navigate to the same level. You will also receive a received-share-opened event with the 1234567890 identifier you can use to identify the sending user. The sending user will receive a sent-share-opened event which lets them know that their link was clicked, and this event includes a isFirstSession property that enables you to detect whether the link click resulted in a new install or came from an existing user.

A Megacool link looks like this:


The links include a reference to the share (the <referral-code> part) so that we can fetch the associated recording. You can customize the <share-url> part to add whatever info you need to identify the current location in the game, see the share configuration part of the docs for how to do this.

Megacool links are both Universal Links and deep linking capable.

You can read more about our links here.

How do I test that referrals work without publishing to the App Store/Play Store?

If you have two devices you can build your app for both of them and use our reset functionality to simulate a new user on both devices. You can read about how to test your referrals here.

Are users who already have my app installed counted as new users by Megacool when I publish the first version with Megacool integrated?


Failure modes

A number of things can go wrong, but we try very hard not to crash your app if this happens, and rather run with degraded functionality. These are a couple of known failure modes:

Attribution failure

Attribution is hard because we can only track the users when they do exactly what we've optimized for them to do. If a referral results in the user searching up the game on the App Store and installing without ever having clicked our link there's no way we can track that and reward the user. And once the users have started the game, we will no longer attribute anyone for the install, even if they click the link after that. Younger and/or technical audiences might understand enough of how attribution works to understand that they need to follow the link given to be able to claim the reward, but you might find that communicating this explicitly reduces confusion among your users. The result of this is that if you're running a referral program, the sender might not get the expected reward even though someone installed the app because of the share. In practice, this usually means that the actual impact of integrating with Megacool is larger than what we can actually quantify through the SDK.

Communicating referrals to users

In relation to attribution, the receiving user needs to both download and open the app for an install to be registered. If the receiving user fails to open the app, the sending user will not receive a reward for referring the friend, even though the receiving user tells the sender that he/she has downloaded the game and believe to have done their part. Check out our best practice guide on how to best communicate this to the user.

The media is missing from the share

If the recording fails for some reason, the rest of the SDK will still work and users can still create shares and referrals. But if i.e. the app shared to needs rich link previews to show the recording and the recording hasn't completed uploading to our servers, we don't have a recording to show. Thus available bandwidth impacts how often sharing a recording will succeed. If a recording is missing from the share, a fallback media is used (if available).