myChips SDK
  • Introduction
  • Getting Started
    • Create a Publisher Account
    • Create your App/Site
    • Create an AdUnit
    • Test in Sanbox mode
  • Reward Handling
    • Webhook S2S Postback
    • Validating the Webhook S2S
    • Rejected S2S Webhook Postback
  • Billing
  • Unity
    • Install SDK
    • Reward User
    • FAQ
  • Android
    • Install SDK
    • Reward User
  • React Native
    • Install SDK
    • Reward User
  • RN Expo
    • Install SDK
    • Reward User
  • iOS
    • Install SDK
    • Reward User
  • Flutter
    • Install SDK
    • Reward User
  • iFrame
  • WebView & Direct Link
  • Revenue API
Powered by GitBook
On this page
  • 1. Building the Offerwall URL
  • Best Practice WebView
  • Code Example

WebView & Direct Link

Below is the integration guide for WebView and Direct Link

Although we provide support for WebView or direct-link integration, this is not the recommended approach. Whenever possible, you should integrate our official SDK instead.

Using the SDK ensures:

  • Better tracking accuracy — SDK handles device signals and user sessions more reliably

  • Stronger fraud protection — Anti-fraud checks and security layers are baked into SDK flows

  • Automatic updates — You benefit from improvements and bug fixes without touching your integration

  • Faster integration — No need to manually handle WebView setup, edge cases, or command bridges

WebView or direct links should only be used in special cases where SDK usage is not possible (e.g., HTML-based apps, low-code platforms). Even then, you must strictly follow the rules in this guide to ensure reliability.

Your offerwall can be integrated either with our SDK or by embedding the URL directly via WebView. If you’re using WebView or direct links, please follow the instructions below to avoid common issues.

1. Building the Offerwall URL

You must append correct parameters to ensure tracking and reward delivery.

Base URL:

https://sdk.mychips.io/content

Required Parameters:

  • content_id – your assigned adunit ID

  • user_id – a unique user ID on your side (can be a hash or UUID or numeric)

  • webview – bool

Optional but Recommended:

  • gaid or idfa – Google Advertising ID

  • gender – m, f, or o

  • age – user age (numeric 0-100)

  • os_version version of the os

Final URL Example:

https://sdk.mychips.io/content?content_id={your_adunit_id]&user_id={your_user_id}&gaid=abc-123&gender=m&age=25&webview=1

Best Practice WebView

These must be followed when integrating the offerwall via WebView or a direct link. Failure to implement them may result in broken reward flows, missing tracking, or bad UX.

✅ Rule

❓ Why It Matters

🛠 What to Do

content_id & user_id &webview=1 are mandatory

Without them, users can't be identified and rewards can't be tracked

Append both in the URL: ?content_id=...&user_id=...

Enable JavaScript in WebView

Required for rendering and logic of the offerwall

webView.getSettings().setJavaScriptEnabled(true);

Enable DOM Storage

Enables session/localStorage — often used by the offerwall

webView.getSettings().setDomStorageEnabled(true);

Disable WebView cache

Prevents bugs from loading outdated or broken content

webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

These are used for conversion tracking and if not well implemented could affect trackability

Open External Browser

Handle mychips:// URL scheme

Bridge used by offerwall to trigger native logic (e.g. reward sync)

override and ignore this schema

Add a custom error page on failure

Prevents user from seeing a blank screen when offline or error occurs

Override onReceivedError() and show fallback HTML content

Implement proper back navigation logic

Prevents broken UX and enables going back within the WebView

close activity on back press when url contains "home"

Support file uploads in WebView

support require file/image upload/

Use WebChromeClient.onShowFileChooser() and route result back via onActivityResult()

Do not preload

preloading will affect impression tracking and impact eCPM negatively

Code Example

Below are sample codes for different languages.

// Initialize the WebView and configure it
WebView webView = findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // External link handling
        if(url.contains("api.mychips.io/redirect")) {
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(intent);
            return true;
        }
        // Custom scheme handling
        if(url.startsWith("mychips://")) {
            // Trigger native logic here (e.g., reward synchronization)
            return true;
        }
        return false;
    }
    
    @Override
    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
        // Load error page
        view.loadData("<html><body><h3>Failed to load. Please try again later.</h3></body></html>", "text/html", "UTF-8");
    }
});

String url = "https://sdk.mychips.io/content?content_id=YOUR_CONTENT_ID&user_id=YOUR_USER_ID&webview=1";
webView.loadUrl(url);
// Initialize the WebView and configure it
val webView = findViewById<WebView>(R.id.webview)
webView.settings.apply {
    javaScriptEnabled = true
    domStorageEnabled = true
    cacheMode = WebSettings.LOAD_NO_CACHE
}

webView.webViewClient = object : WebViewClient() {
    override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
        url?.let {
            if(it.contains("api.mychips.io/redirect")){
                startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(it)))
                return true
            }
            if(it.startsWith("mychips://")){
                // Handle native logic here, e.g., reward synchronization
                return true
            }
        }
        return false
    }
    
    override fun onReceivedError(view: WebView?, request: WebResourceRequest?, error: WebResourceError?) {
        view?.loadData("<html><body><h3>Failed to load. Please try again later.</h3></body></html>", "text/html", "UTF-8")
    }
}

val url = "https://sdk.mychips.io/content?content_id=YOUR_CONTENT_ID&user_id=YOUR_USER_ID&webview=1"
webView.loadUrl(url)
import UIKit
import WebKit

class OfferwallViewController: UIViewController, WKNavigationDelegate {
    var webView: WKWebView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let webConfiguration = WKWebViewConfiguration()
        webConfiguration.preferences.javaScriptEnabled = true
        // Use non-persistent data storage to disable caching
        webConfiguration.websiteDataStore = .nonPersistent()
        
        webView = WKWebView(frame: self.view.frame, configuration: webConfiguration)
        webView.navigationDelegate = self
        self.view.addSubview(webView)
        
        if let url = URL(string: "https://sdk.mychips.io/content?content_id=YOUR_CONTENT_ID&user_id=YOUR_USER_ID&webview=1") {
            let request = URLRequest(url: url)
            webView.load(request)
        }
    }
    
    // Display an error page if loading fails
    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
        let errorHTML = "<html><body><h3>Failed to load. Please try again later.</h3></body></html>"
        webView.loadHTMLString(errorHTML, baseURL: nil)
    }
    
    // Handle external links and custom URL schemes
    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction,
                 decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        if let urlString = navigationAction.request.url?.absoluteString {
            if urlString.contains("api.mychips.io/redirect") {
                if let redirectUrl = URL(string: urlString) {
                    UIApplication.shared.open(redirectUrl)
                    decisionHandler(.cancel)
                    return
                }
            }
            if urlString.hasPrefix("mychips://") {
                // Handle native logic here, e.g., reward synchronization
                decisionHandler(.cancel)
                return
            }
        }
        decisionHandler(.allow)
    }
}

PreviousiFrameNextRevenue API

Last updated 1 month ago

Open URLs in external browser

api.mychips.io/redirect