Native Unity support for Bolt Charge, a fully hosted webshop for out-of-app purchases and subscriptions.
We also support other platforms:
JavaScript Javascript SDK |
Unity
This Repo |
Unreal Engine Unreal SDK |
iOS Coming Soon π§ |
Android Coming Soon π§ |
Only with Bolt you get 2.1% + $0.30 on all transactions. That's 10x better than traditional app stores which take 30% of your revenue! That's the fair and transparent pricing you get with using Bolt.
Disclaimer: Fees are subject to change but will continue to remain highly competitive. See bolt.com/pricing for up to date rates and visit bolt.com/end-user-terms for end user terms and conditions.
You need 3 things to get started:
- Existing App: You will need an application in the same platform as this SDK
- Backend Server: You will need to bring your own backend server (any language)
- Bolt Merchant Account: Dashboard access to manage your store (signup or login)
For broad documentation and API reference visit our documentation site.
This project depends on unity-webview plugin.
For both this Bolt Unity SDK and the unity-webview plugin:
- Download the repos as a zip file:
- Unpack it and drag it into your project's
Assets/
folder - The next section will help you resolve errors
The unity-webview
package is finicky to install because it has an example project inside of it. Please follow the next steps carefully.
Once you have the unzipped folder in your assets folder, make sure to run the dist/unity-webview.unitypackage
file which will import the necessary files into your project.
You can then delete the unzipped unity-webview folder you just added to /Assets
. This should also resolve import errors from the Bolt sdk package.
Review the General Notes to ensure you resolve any package errors.
If you have any issues our discord support team will be happy to help.
You need to bring your own server to safely handle transactions and api keys.
- Integrate the Bolt API
- This is how you will interact with the Charge API and manage digital subscriptions
- Docs: https://help.bolt.com/products/bolt-charge/charge-setup/
- API: https://help.bolt.com/api-subscriptions/
- Example server: https://github.com/BoltApp/bolt-gameserver-sample
- Set up the Authorization Webhook
- "Authorization" is an industry term for transactions
- This is how you will check if a user completed a transaction
- Webhook Docs: https://help.bolt.com/developers/webhooks/webhooks
- Webhook Events: https://help.bolt.com/developers/webhooks/webhooks/#authorization-events
- API: https://help.bolt.com/api-merchant/#tag/webhooks/POST/webhooks_transaction
- Note your server URL (like
https://your-server.herokuapp.com
)- You will use this URL for initializing the api client in Step 4
- Consider using configs for managing different environments
- Go to merchant.bolt.com and login to the dashboard. You can signup here if you don't have an account.
- Set up your products in the Bolt dashboard. You can find helpful instructions in our documentation.
- Get your checkout links (they look like:
https://digital-subscriptions-test-14-04.c-staging.bolt.com/c?u=SRZKjocdzkUmJfS2J7JNCQ&publishable_key=BQ9PKQksUGtj.Q9LwVLfV3WF4.32122926f7b9651a416a5099dc92dc2b4c87c8b922c114229f83b345d65f4695
)
You may copy this code into a new script in your Unity project or use it for reference on how to initialize the bolt client and webview.
using UnityEngine;
public class BoltPayments : MonoBehaviour
{
[Header("Your Backend Server")]
public string serverUrl = "https://your-server.herokuapp.com";
private BoltApiService boltApi;
private WebViewManager webViewManager;
void Start()
{
// Set up the payment system
boltApi = new BoltApiService(serverUrl);
webViewManager = gameObject.AddComponent<WebViewManager>();
webViewManager.OnWebViewClosed += OnPaymentComplete;
}
// Call this when player wants to buy something
// Ensure to style the modal to your preference and include a close button
public void BuyItem(string paymentUrl)
{
webViewManager.OpenFullScreenWebView(paymentUrl);
}
// This runs when payment is done
void OnPaymentComplete()
{
Debug.Log("Payment finished!");
// Recommended: you can sync your player object by polling your backend since a transaction webhook will have hit your backend server.
// Optional: If you have a simple checkout flow, you can use Bolt's api to check if player bought the item
StartCoroutine(boltApi.GetUserSubscriptions("[email protected]"));
}
}
- Add the script to a GameObject in your scene
- Put your server URL in the
serverUrl
field - Call
BuyItem()
with a Bolt payment link- Note: You can use our staging url for testing purposes: https://digital-subscriptions-test-14-04.c-staging.bolt.com/c?u=SRZKjocdzkUmJfS2J7JNCQ&publishable_key=BQ9PKQksUGtj.Q9LwVLfV3WF4.32122926f7b9651a416a5099dc92dc2b4c87c8b922c114229f83b345d65f4695
- The payment page should open as a modal in your game
- Modify the modal style to your liking. Ensure to add a close button and handle appropriately.
Congratulations π
You have successfully integrated Bolt Charge into your app!
Now that you have a single checkout working, you will want to adopt some best practices to make them easy to maintain.
Use a config for managing your collection of checkout links. We recommend using JSON and mapping links to readable names. You can swap configs based on environment. Example:
{
GEMS_100: 'https://your-checkout-link-here.com',
GEMS_500: 'https://your-checkout-link-here.com',
GEMS_1000: 'https://your-checkout-link-here.com',
BUNDLE_ONE: 'https://your-checkout-link-here.com',
BUNDLE_TWO: 'https://your-checkout-link-here.com'
// etc...
}
We recommend setting up automated testing against the most common flows. Good test coverage should include UI or API test coverage of the following scenarios:
- Checkout is possible to open
- Checkout is possible to close
- User gets success state from successful transaction
- User gets failed state from failed transaction
- User network interrupted after good payment, is shown success screen on reboot of app
- User network interrupted after bad payment, is shown fail screen on reboot of app
Bolt does support translations and handles many checkouts on the global market. However, right now the SDK is tailored to the U.S. market so only English is officially provided.
We will be rolling out official multi-region support to Bolt Charge in the very near future. If you would like a preview or are curious about the timeline, you can reach out to our team directly.
Get help and chat with us about anything on Discord
This project is licensed under the MIT License - see the LICENSE file for details.