Local Resources
Bundle images, videos, and other assets in your app so paywalls can load them instantly from the device.
Local resources let your paywalls load bundled assets directly from the device instead of fetching them over the network. This is useful for hero images, onboarding videos, and other media that should appear immediately even when the connection is slow.
Local resources require Android SDK v2.7.7+.
Registering local resources
Choose a stable resource ID for each asset you want to serve locally. That same ID is what you'll select in the paywall editor when configuring image or video components.
On Android, local resources are configured on Superwall.instance.localResources after calling configure(), and before presenting paywalls that depend on those assets.
import android.app.Application
import android.net.Uri
import com.superwall.sdk.Superwall
import com.superwall.sdk.paywall.view.webview.PaywallResource
import java.io.File
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
Superwall.configure(
application = this,
apiKey = "pk_your_api_key",
)
Superwall.instance.localResources = mapOf(
"hero-image" to PaywallResource.FromResources(R.drawable.hero),
"onboarding-video" to PaywallResource.FromUri(
Uri.fromFile(File(filesDir, "welcome.mp4"))
),
"background-animation" to PaywallResource.FromResources(R.raw.paywall_bg)
)
}
}Set localResources before presenting paywalls that depend on those assets. Updating the map later
only affects paywalls loaded after the change.
Supported source types
Android supports two local resource source types:
| Type | Use for |
|---|---|
PaywallResource.FromResources(resId) | Assets packaged in res/drawable, res/raw, and other Android resource folders |
PaywallResource.FromUri(uri) | Files addressed by a Uri, such as files in app storage or content provider URLs |
Choosing resource IDs
Resource IDs are the contract between your app and the paywall editor. A few guidelines:
- Use stable, descriptive names like
"hero-image"and"onboarding-video". - Keep the casing consistent.
"Hero-Image"and"hero-image"are different IDs. - If you rename an ID, update any paywalls that reference it.
Referencing local resources in a paywall
In the paywall editor, set a local resource on an image or video component and select the resource ID you registered in the SDK. You can still provide a remote URL as a fallback.
Under the hood, paywalls load these resources through swlocal:// URLs. For example:
<video src="swlocal://onboarding-video" autoplay muted playsinline></video>If the SDK cannot resolve a local resource, the paywall can fall back to the remote URL configured in the editor.
Debugging
If a resource ID does not appear in the editor or fails to load:
- Make sure the app is running a compatible SDK version.
- Confirm the resource ID in your paywall exactly matches the key you registered in the SDK.
- Open a paywall on a test device after configuring local resources so the editor can discover recently used IDs.
- Keep a remote fallback URL on critical media so older builds still render correctly.
Related
localResources: SDK reference for the property on supported platforms.- Paywall Editor: Local Resources: How to assign local resource IDs in the dashboard.
How is this guide?