CINXE.COM
How to Use hCaptcha with Android Apps | Blog - hCaptcha
<!DOCTYPE html><!-- Last Published: Fri Feb 07 2025 15:52:22 GMT+0000 (Coordinated Universal Time) --><html data-wf-domain="www.hcaptcha.com" data-wf-page="64da82f6bf67de1b1278908c" data-wf-site="64da82f6bf67de1b12789030" lang="en" data-wf-collection="64da82f6bf67de1b12789073" data-wf-item-slug="how-to-use-hcaptcha-with-android-apps"><head><meta charset="utf-8"><title>How to Use hCaptcha with Android Apps | Blog - hCaptcha</title><meta content="Want to use hCaptcha with your Android app? Learn how to integrate hCaptcha into your mobile app and provide a seamless, secure user experience for your customers." name="description"><meta content="How to Use hCaptcha with Android Apps | Blog - hCaptcha" property="og:title"><meta content="Want to use hCaptcha with your Android app? Learn how to integrate hCaptcha into your mobile app and provide a seamless, secure user experience for your customers." property="og:description"><meta content="../images/64da82f6bf67de1b127892f3_621ec9e93c0f0383256c87e7_hcaptcha-android.jpeg" property="og:image"><meta content="How to Use hCaptcha with Android Apps | Blog - hCaptcha" property="twitter:title"><meta content="Want to use hCaptcha with your Android app? Learn how to integrate hCaptcha into your mobile app and provide a seamless, secure user experience for your customers." property="twitter:description"><meta content="https://cdn.prod.website-files.com/64da82f6bf67de1b12789053/64da82f6bf67de1b127892f3_621ec9e93c0f0383256c87e7_hcaptcha-android.jpeg" property="twitter:image"><meta property="og:type" content="website"><meta content="summary_large_image" name="twitter:card"><meta content="width=device-width, initial-scale=1" name="viewport"><link href="../css/3ab37a58b73d590e6a9637f943ed060c1619550182eda0d3887a5175ae30da5a.css" rel="stylesheet" type="text/css"><link href="https://fonts.googleapis.com" rel="preconnect"><link href="https://fonts.gstatic.com" rel="preconnect" crossorigin="anonymous"><script type="text/javascript">!function(o,c){var n=c.documentElement,t=" w-mod-";n.className+=t+"js",("ontouchstart"in o||o.DocumentTouch&&c instanceof DocumentTouch)&&(n.className+=t+"touch")}(window,document);</script><link href="../images/64da82f6bf67de1b1278926d_favicon%25403x.png" rel="shortcut icon" type="image/x-icon"><link href="../images/64da82f6bf67de1b127890f9_hcaptcha-symbol-256.png" rel="apple-touch-icon"><link href="https://www.hcaptcha.com/post/how-to-use-hcaptcha-with-android-apps" rel="canonical"><link href="rss.xml" rel="alternate" title="RSS Feed" type="application/rss+xml"><style type="text/css"> .w-embed { pointer-events:none; } .noclick, .more-info { pointer-events:none; } .click { pointer-events:all; } * { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } p { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } </style> <script type="text/javascript"> function getqvar(varName){ var qs = unescape(window.location.search) + '&'; var regex = new RegExp('.*?[&\\?]' + varName + '=(.*?)&.*'); val = qs.replace(regex, "$1"); return val == qs ? false : val; } window.referrer = getqvar('r'); if (window.referrer) { document.cookie = "r=" + window.referrer + ';path=/;domain=.hcaptcha.com'; } </script> <script async="" defer="" data-domain="hcaptcha.com" src="https://newassets.hcaptcha.com/js/p.js"></script> <script type="text/javascript">window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script> <style> .w-richtext-figure-type-image { margin: 30px 0px; } figcaption { color: #7e838a; font-size: 12px; } .rich-text-block p { margin-bottom: 16px; margin-top: 16px; } pre { white-space: break-spaces; background: hsl(0deg 0% 98%); border: 1px solid #ddd; border-left: 3px solid #a8a8a8; border-radius: 4px; color: #666; page-break-inside: avoid; font-family: monospace; font-size: 15px; line-height: 1.6; margin-bottom: 1.6em; max-width: 100%; overflow: auto; padding: 0em 1.5em 1.5em 1.5em; display: block; word-wrap: break-word; overflow-wrap: anywhere; word-break: break-all; } xmp { white-space: break-spaces; background: hsl(0deg 0% 98%); border: 1px solid #ddd; border-left: 3px solid #a8a8a8; border-radius: 4px; color: #666; page-break-inside: avoid; font-family: monospace; font-size: 15px; line-height: 1.6; margin-bottom: 1.6em; max-width: 100%; overflow: auto; padding: 0em 1.5em 1.5em 1.5em; display: block; word-wrap: break-word; overflow-wrap: anywhere; word-break: break-all; } </style> <link rel="stylesheet" href="../css/default.min.css"> <script src="../js/highlight.min.js"></script> <script>hljs.highlightAll();</script></head><body><div data-animation="default" class="header w-nav" data-easing2="ease-out-cubic" data-vavilon="header-labeling-services" data-easing="ease-in-cubic" aria-label="top" data-collapse="medium" role="banner" data-no-scroll="1" data-duration="300" bind="69afaaec-36d3-5321-a161-243b8802a3b9"><div class="mobile-menu"><div class="mobile-header-trigger"><a aria-label="hCaptcha home page" href="../index.html" class="w-inline-block"><img src="../fonts/64da82f6bf67de1b127890b5_hcaptcha-logo-landscape.svg" loading="lazy" alt="hCaptcha logo (horizontal)" class="mobile-header-logo"></a><div class="mobile-menu-icon"><img src="../images/64f60bf617f515e82d3150ff_close-icon-24px.png" loading="lazy" data-w-id="389ce542-308c-f3f2-d64d-430940fcf47d" alt="close menu" class="mobile-header-close-icon"><img src="../fonts/64f5f0dbb2064353a5bf1cb5_menu.svg" loading="lazy" data-w-id="389ce542-308c-f3f2-d64d-430940fcf47e" alt="menu button" class="mobile-header-menu-icon"></div></div><div class="mobile-header-menu-content enterpriisev2-mobile-menu-content"><div class="enterprisev2-mobile-menu-items"><a href="../pricing.html" class="mobile-header-item w-inline-block"><div class="text-block-39">Plans</div></a><a href="../pro.html" class="mobile-header-item w-inline-block"><div class="text-block-40">Pro</div></a><a href="#" class="mobile-header-item w-inline-block"><div class="text-block-41">Enterprise</div></a><a href="https://docs.hcaptcha.com/" class="mobile-header-item w-inline-block"><div class="text-block-42">Docs</div></a><a href="../blog.html" class="w-inline-block"><div class="mobile-header-item">Blog</div></a></div><div class="mobile-menu-ctas"><a href="../pricing.html" id="w-node-e22d0e3d-0fd4-b1ef-84e4-43111614a9c6-1614a9c6" class="btn-signup w-button">Sign Up</a><a href="https://dashboard.hcaptcha.com/login" id="w-node-cc03cbc4-d1b0-7d41-521c-8a2094b44f57-94b44f57" class="button btn-stroke btn-login w-button">Log In</a></div></div></div><div class="a11y-blog"><div class="a11y-blog-wrapper"><div data-w-id="d939bfca-ae19-8683-8036-f5e3e1cbf0bc" class="parent"><div class="div-block-70 grey-600-text"><div class="cap1">From the blog:</div><a href="https://www.hcaptcha.com/post/preparing-for-ai-agents" rel="noopener" class="cap1 bold grey-600-text">Preparing for AI Agents →</a><div data-w-id="d939bfca-ae19-8683-8036-f5e3e1cbf0c2" class="x-container"><div class="x-icon w-embed"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M3.293 3.29279C2.90247 3.68331 2.90231 4.31664 3.29264 4.70736L8.24477 9.66448L3.30166 14.6126C2.91134 15.0033 2.91149 15.6366 3.30202 16.0271C3.69254 16.4177 4.32555 16.4175 4.71588 16.0268L9.65827 11.0794L14.6006 16.0268C14.991 16.4175 15.624 16.4176 16.0145 16.0271C16.405 15.6366 16.4052 15.0033 16.0149 14.6126L11.0718 9.66447L16.0239 4.70737C16.4142 4.31665 16.4141 3.68332 16.0235 3.2928C15.633 2.90227 15 2.90243 14.6097 3.29316L9.65827 8.24955L4.70685 3.29315C4.31653 2.90242 3.68352 2.90226 3.293 3.29279Z" fill="currentColor"></path> </svg></div></div></div></div><div data-w-id="d939bfca-ae19-8683-8036-f5e3e1cbf0c4" class="parent"><div class="div-block-74"><a id="switch-to-english" tabindex="0" aria-label="Switch to English translation" data-vavilon="switch-to-english-link--do-not-translate" whenclicked="setLang('en')" bind="492c3087-facd-576f-62be-84e9a7d5f70b" href="#" class="cap1 grey-600-text subheader-second english">Switch to English</a><a id="acc-button-dup" tabindex="0" aria-label="Learn more about accessibility options and sign up to bypass the challenge" bind="492c3087-facd-576f-62be-84e9a7d5f709" href="../accessibility.html" class="cap1 grey-600-text subheader-second">Accessibility</a><div data-w-id="d939bfca-ae19-8683-8036-f5e3e1cbf0ca" class="x-container"><div class="x-icon second w-embed"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M3.293 3.29279C2.90247 3.68331 2.90231 4.31664 3.29264 4.70736L8.24477 9.66448L3.30166 14.6126C2.91134 15.0033 2.91149 15.6366 3.30202 16.0271C3.69254 16.4177 4.32555 16.4175 4.71588 16.0268L9.65827 11.0794L14.6006 16.0268C14.991 16.4175 15.624 16.4176 16.0145 16.0271C16.405 15.6366 16.4052 15.0033 16.0149 14.6126L11.0718 9.66447L16.0239 4.70737C16.4142 4.31665 16.4141 3.68332 16.0235 3.2928C15.633 2.90227 15 2.90243 14.6097 3.29316L9.65827 8.24955L4.70685 3.29315C4.31653 2.90242 3.68352 2.90226 3.293 3.29279Z" fill="currentColor"></path> </svg></div></div></div></div></div></div><div aria-hidden="false" class="desktop-menu"><div class="navbar-container-dekstop"><a href="../index.html" aria-label="hCaptcha homepage" class="hcaptcha-logo logo-nav w-nav-brand"></a><div class="header-nav"><a href="../plans.html" class="nav-link vavilon w-nav-link">Plans</a><a href="../pro.html" class="nav-link vavilon w-nav-link">Pro</a><a href="../index.html#enterprise-features" class="nav-link vavilon w-nav-link">Enterprise</a><a href="https://docs.hcaptcha.com/" class="nav-link vavilon w-nav-link">Docs</a><a href="../blog.html" class="nav-link vavilon w-nav-link">Blog</a></div><div class="cta-nav"><div class="headerv2-cta-contaienr header"><div id="w-node-_7f66424e-0889-8f7f-36ad-d51b14d40455-8802a3b9"><a href="../start-a-pilot.html">Contact Sales</a></div><a href="../pricing.html" id="w-node-e22d0e3d-0fd4-b1ef-84e4-43111614a9c6-1614a9c6" class="btn-signup w-button">Sign Up</a><a href="https://dashboard.hcaptcha.com/login" id="w-node-cc03cbc4-d1b0-7d41-521c-8a2094b44f57-94b44f57" class="button btn-stroke btn-login w-button">Log In</a></div></div></div></div></div><div class="section grey-100"><div class="container blog-hero"><div class="div-block-119"><a href="../blog.html" class="link-11 bold">← <span class="text-span-21">Back to Blog</span></a><div class="div-block-120"><div class="bold blue-700-text">Attack Prevention</div><h1 class="title no-margin grey-900-text">How to Use hCaptcha with Android Apps</h1><p class="cap1">June 21, 2019</p></div></div><div style="background-image:url("../images/64da82f6bf67de1b127892f3_621ec9e93c0f0383256c87e7_hcaptcha-android.jpeg")" class="div-block-118"></div></div></div><div class="section blog-content-container top-effect"><div class="div-block-121 container"><div class="div-block-122"></div></div></div><div class="section blog-content-container"><div class="container blog-content"><div class="content blog-post"><div id="w-node-a2cbe5ce-574a-6045-9a66-e3aea276edd4-1278908c" class="spost"><div><div class="cap2 grey-600-text">Share</div><div class="w-layout-grid grid-21 noclick"><div class="sharing _w-inline-block click w-embed"><a class="w-inline-block social-share-btn lnk" href="http://www.linkedin.com/shareArticle?mini=true&url=&title=&summary=&source=" target="_blank" title="Share on LinkedIn" onclick="window.open('http://www.linkedin.com/shareArticle?mini=true&url=' + encodeURIComponent(document.URL) + '&title=' + encodeURIComponent(document.title)); return false;"> <svg width="23px" height="22px" viewBox="0 0 23 22" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <g id="Blog" stroke="none" stroke-width="1" fill="currentColor" fill-rule="evenodd"> <g id="Blog-Article-Scroll-2" transform="translate(-400.000000, -115.000000)" fill="currentColor"> <g id="Group-5" transform="translate(400.000000, 114.000000)"> <g id="Group" transform="translate(0.000000, 1.000000)"> <path d="M0.680482759,21.8008276 L4.84427586,21.8008276 C5.04334483,21.8008276 5.20513793,21.6398276 5.20513793,21.4399655 L5.20513793,7.46231034 C5.20513793,7.26324138 5.04334483,7.10144828 4.84427586,7.10144828 L0.680482759,7.10144828 C0.481413793,7.10144828 0.318827586,7.26324138 0.318827586,7.46231034 L0.318827586,21.4399655 C0.318827586,21.6398276 0.481413793,21.8008276 0.680482759,21.8008276 Z M22.8255172,13.3717241 L22.8255172,21.4399655 C22.8255172,21.6398276 22.6645172,21.8008276 22.4646552,21.8008276 L18.2992759,21.8008276 C18.1002069,21.8008276 17.9384138,21.6398276 17.9384138,21.4399655 L17.9384138,13.9364138 C17.9384138,11.9615862 17.2333448,10.6133103 15.4631379,10.6133103 C14.1132759,10.6133103 13.3106552,11.5214138 12.956931,12.4001724 C12.8284483,12.7142414 12.7951379,13.1504483 12.7951379,13.5914138 L12.7951379,21.4399655 C12.7951379,21.6390345 12.6333448,21.8008276 12.4342759,21.8008276 L8.26968966,21.8008276 C8.06982759,21.8008276 7.90803448,21.6398276 7.90882468,21.4399655 C7.91834483,19.4413448 7.96037931,9.74565517 7.91755172,7.46706897 C7.91437931,7.26482759 8.07696552,7.10144828 8.27841379,7.10144828 L12.4342759,7.10144828 C12.6341379,7.10144828 12.7951379,7.26324138 12.7951379,7.46231034 L12.7951379,9.18493103 C12.7848276,9.2007931 12.7721379,9.21744828 12.7626207,9.23251724 L12.7951379,9.23251724 L12.7951379,9.18493103 C13.4446897,8.18482759 14.6026207,6.75644828 17.2000345,6.75644828 C20.4152759,6.75644828 22.8255172,8.85737931 22.8255172,13.3717241 L22.8255172,13.3717241 Z" id="Fill-86"></path> <path d="M5.23210345,2.61644828 C5.23210345,4.06068966 4.06068966,5.23210345 2.61565517,5.23210345 C1.17141379,5.23210345 0,4.06068966 0,2.61644828 C0,1.17141379 1.17141379,0 2.61565517,0 C4.06068966,0 5.23210345,1.17141379 5.23210345,2.61644828" id="Fill-87"></path> </g> </g> </g> </g> </svg> </a></div><div><div class="sharing click w-embed"><a href="" class="twitter" onclick="return tweet()"><svg width="26px" height="25px" viewBox="0 0 26 21" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <g id="Blog" stroke="none" bottom="-30px" stroke-width="1" fill="currentColor" fill-rule="evenodd"> <g id="Blog-Article-Scroll-2" transform="translate(-447.000000, -116.000000)" fill="currentColor"> <g id="Group-5" transform="translate(400.000000, 114.000000)"> <path d="M72.9018138,4.48839507 C72.0763411,4.85131021 71.1666866,5.07080256 70.27583,5.21581014 C70.6991912,5.14687211 71.3227908,4.40440161 71.5720672,4.10408536 C71.9521116,3.64608328 72.2684065,3.12389752 72.4465778,2.56050742 C72.4694622,2.51613351 72.4866255,2.46066613 72.4408567,2.4273857 C72.3844631,2.40519875 72.3476846,2.41708462 72.3019158,2.43847918 C71.3064448,2.9559106 70.2782819,3.33071161 69.1831003,3.59616264 C69.0915628,3.61834959 69.0237269,3.59616264 68.9673332,3.54069526 C68.876613,3.44164637 68.7916138,3.34814421 68.6943551,3.27048988 C68.2350327,2.89093452 67.7405665,2.59299545 67.1831681,2.37271071 C66.4525022,2.08348795 65.6531831,1.96145971 64.8653063,2.01058796 C64.0994965,2.05892382 63.3467635,2.26890747 62.6667702,2.61280523 C61.9851423,2.95828777 61.3770714,3.4384768 60.89323,4.01771473 C60.3922253,4.61676243 60.0228058,5.32436772 59.8331923,6.07476214 C59.6509345,6.79900764 59.6656459,7.51532923 59.777616,8.24670626 C59.7939619,8.3679421 59.783337,8.38458232 59.6697324,8.3679421 C55.3854476,7.74987701 51.8334633,6.26335123 48.9500302,3.07793883 C48.8249833,2.94006277 48.7571475,2.94006277 48.654985,3.08903231 C47.3930743,4.92262541 48.0052318,7.86794329 49.5809855,9.31564191 C49.7910315,9.50898535 50.0076159,9.7015364 50.239729,9.87744723 C50.1547299,9.89487984 49.1061344,9.78394508 48.1719609,9.31564191 C48.0460968,9.23877997 47.9831647,9.28315388 47.9725398,9.42023754 C47.9610976,9.61833533 47.9774436,9.80058529 48.0068664,10.0161157 C48.2479698,11.8742729 49.5752644,13.5937617 51.3937561,14.2641246 C51.6103405,14.3528724 51.848992,14.4297344 52.0811051,14.4685615 C51.6667342,14.5557245 51.2409211,14.6191158 50.0517501,14.5287832 C49.9046362,14.5018419 49.8474252,14.5731571 49.9046362,14.7110332 C50.7979447,17.0699816 52.72432,17.7712478 54.1676711,18.1714053 C54.3605539,18.2038934 54.5534366,18.2038934 54.7479539,18.2482673 C54.7356944,18.2656999 54.7242522,18.2656999 54.7136273,18.2815477 C54.2346897,18.989153 52.5747541,19.5153007 51.802406,19.7775822 C50.3966506,20.2538093 48.8658483,20.4677549 47.3808148,20.3259168 C47.1429806,20.291844 47.0931254,20.2950136 47.0285587,20.3259168 C46.9631747,20.364744 47.0203857,20.4202114 47.0963946,20.4796407 C47.3979781,20.6729842 47.7044655,20.8441407 48.0174913,21.008958 C48.9614724,21.4939014 49.9446838,21.8797959 50.9728468,22.155548 C56.2836599,23.5770977 62.2671107,22.5327262 66.255533,18.6912139 C69.3874253,15.6745808 70.4842414,11.5145273 70.4842414,7.34892709 C70.4842414,7.18569452 70.6836625,7.09536193 70.8013536,7.00899129 C71.6162014,6.41549033 72.2635027,5.70550786 72.8707564,4.91232433 C73.0072454,4.73403632 73,4.57555809 73,4.51058202 C73,4.49948854 73,4.48839507 73,4.48839507 C73,4.42183421 73.0072454,4.44243638 72.9018138,4.48839507" id="Fill-61"></path> </g> </g> </g> </svg></a></div><div class="sharing click twitter w-embed w-script"><script type="text/javascript"> function tweet() { var u = location.href; var t="Latest news from #hCaptcha"; window.open('http://twitter.com/share?url='+encodeURIComponent(u)+'&text='+encodeURIComponent(t),'twitsharer','toolbar=0,status=0,width=626,height=436'); return false; } </script></div></div><div class="sharing click w-embed"><a class="w-inline-block social-share-btn fb" href="https://www.facebook.com/sharer/sharer.php?u=&t=" title="Share on Facebook" target="_blank" onclick="window.open('https://www.facebook.com/sharer/sharer.php?u=' + encodeURIComponent(document.URL) + '&t=' + encodeURIComponent(document.URL)); return false;"> <svg width="12px" height="24px" viewBox="0 0 12 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <g id="Blog" stroke="none" stroke-width="1" fill="currentColor" fill-rule="evenodd"> <g id="Blog-Article-Scroll-2" transform="translate(-498.000000, -114.000000)" fill="currentColor"> <g id="Group-5" transform="translate(400.000000, 114.000000)"> <path d="M100.456629,12.0946268 L100.456629,23.697781 C100.456629,23.8650284 100.591601,24 100.758848,24 L105.067669,24 C105.234183,24 105.369888,23.8650284 105.369888,23.697781 L105.369888,11.9053732 L108.49404,11.9053732 C108.651018,11.9053732 108.781588,11.7850724 108.794792,11.6288282 L109.095544,8.07555474 C109.110948,7.89950486 108.970842,7.74766184 108.794058,7.74766184 L105.369888,7.74766184 L105.369888,5.22721438 C105.369888,4.63598019 105.848891,4.15697781 106.440125,4.15697781 L108.846873,4.15697781 C109.014121,4.15697781 109.149092,4.02200624 109.149092,3.85549239 L109.149092,0.302218962 C109.149092,0.134971575 109.014121,0 108.846873,0 L104.778654,0 C102.391711,0 100.456629,1.93508161 100.456629,4.32202457 L100.456629,7.74766184 L98.302219,7.74766184 C98.1357051,7.74766184 98,7.88336695 98,8.0498808 L98,11.6031542 C98,11.7704016 98.1357051,11.9053732 98.302219,11.9053732 L100.456629,11.9053732 L100.456629,12.0946268" id="Fill-67"></path> </g> </g> </g> </svg> </a></div><div class="sharing click w-embed"><a class="w-inline-block social-share-btn fb" href="https://t.me/share/url?url=" target="_blank" onclick="window.open('https://t.me/share/url?url=' + encodeURIComponent(document.URL) + '&t=' + encodeURIComponent(document.URL)); return false;"> <svg width="24px" viewBox="0 0 32 27" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <g id="Page-1" stroke="none" stroke-width="1" fill="currentColor" fill-rule="evenodd"> <g id="HUMAN-Menu2-Community" transform="translate(-1330.000000, -563.000000)" fill="currentColor" fill-rule="nonzero"> <path d="M1332.19983,574.479826 C1340.78975,570.716544 1346.51771,568.235558 1349.3837,567.036869 C1357.56671,563.614366 1359.26706,563.019841 1360.37533,563 C1360.61909,562.995892 1361.1641,563.056637 1361.51714,563.344694 C1361.81524,563.587924 1361.89726,563.916492 1361.9365,564.147101 C1361.97575,564.37771 1362.02463,564.903042 1361.98578,565.313521 C1361.54234,569.998666 1359.62358,581.368277 1358.64742,586.61572 C1358.23438,588.836109 1357.42107,589.580594 1356.6337,589.653452 C1354.92256,589.811789 1353.6232,588.516328 1351.96587,587.423896 C1349.37249,585.714454 1347.90739,584.650322 1345.39006,582.982223 C1342.48085,581.054446 1344.36677,579.994907 1346.02472,578.263322 C1346.45861,577.810158 1353.99794,570.914458 1354.14387,570.28891 C1354.16212,570.210675 1354.17905,569.919051 1354.00676,569.765063 C1353.83447,569.611074 1353.58018,569.663732 1353.39668,569.705612 C1353.13658,569.764974 1348.99361,572.518535 1340.96778,577.966293 C1339.79181,578.778289 1338.72666,579.17392 1337.77232,579.153188 C1336.72023,579.130332 1334.69644,578.555018 1333.19196,578.063254 C1331.34666,577.460085 1329.88004,577.141185 1330.00775,576.116818 C1330.07427,575.583265 1330.80496,575.037601 1332.19983,574.479826 Z" id="Path-3"></path> </g> </g> </svg> </a></div></div></div></div><div id="w-node-_8734ea4b-e276-fa68-830c-34a3e27fc64b-1278908c" class="div-block-123"><div class="blog-intro">Good news! It is quite simple to integrate hCaptcha with your native Android app today.</div><div class="rich-text-block rtb w-richtext"><p>(Note: if you are using Flutter, please see our <a href="implementing-hcaptcha-in-your-flutter-app.html">hCaptcha Flutter guide</a>.)</p><p><strong><em>2021 Update</em></strong><em><br>The article below is now outdated: please use our </em><a href="https://github.com/hCaptcha/hcaptcha-android-sdk" target="_blank"><em>native Android SDK</em></a><em>.</em></p><p>Simply create an HTML file with a hCaptcha form (see <a href="https://hcaptcha.com/docs" target="_blank">hCaptcha </a>docs) and host that on your web site. Then load the URL in a WebView and create a bridge between Java and Javascript (<em>addJavascriptInterface</em>).</p><p>Android Activity:</p><div class="w-embed"><xmp> WebView mWebView = (WebView) findViewById(R.id.webview); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setBuiltInZoomControls(false); mWebView.loadUrl("https://your.server/hcaptcha_form.html"); mWebView.addJavascriptInterface(new BridgeWebViewClass(this), "BridgeWebViewClass"); </xmp></div><p><strong>Note</strong>: if you are an <a href="https://www.hcaptcha.com/enterprise">hCaptcha Enterprise</a> customer, you can also embed the HTML file directly into your mobile app.</p><div class="w-embed"><xmp> mWebView.loadUrl("https://your.server/hcaptcha_form.html"); </xmp></div><p>in your Activity instead becomes:<br></p><div class="w-embed"><xmp> mWebView.loadUrl("file:///android_asset/myFolder/hcaptcha_form.html"); </xmp></div><p>Contact the integration engineering team for further guidance to enable this.</p><p>Bridge Class:</p><div class="w-embed"><xmp> public class BridgeWebViewClass { @JavascriptInterface public void hCaptchaCallbackInAndroid(String h_response){ log.d("hCaptcha", "token" + h_response); } } </xmp></div><p>Now from your HTML file you can run the Bridge Class as a Javascript function:</p><div class="w-embed w-script"><xmp> <div class="h-captcha" data-sitekey="YOUR_CAPTCHA_SITE_KEY" data-callback="captchaResponse"></div> <script type="text/javascript"> function captchaResponse(token){ BridgeWebViewClass.hCaptchaCallbackInAndroid(token); } </script> </xmp></div><p>Finally, pass the response token returned above to your backend server, and have it call <a href="https://docs.hcaptcha.com/#server" target="_blank">siteverify</a> to check that the token is valid.</p><p>Let us if you have any questions!</p><p><em>Credit: this method was inspired by a similar StackOverflow </em><a href="https://stackoverflow.com/questions/34588910/how-to-integrate-recaptcha-2-0-in-android" target="_blank"><em>answer</em></a><em>.</em></p></div></div></div></div></div><div id="demo1" class="section relative subscribe"><div class="container padding-0topbottom"><div class="div-block-115 no-margin"><div class="content full-width-card grey-050 grey-300-stroke"><div class="width70pr subscibe"><h3 class="margin-0 enterprise-title grey-800-text">Subscribe to our newsletter</h3><h6 class="heading-18">Stay up to date on the latest trends in cyber security. No spam, promise.</h6><div class="form-block-9 w-form"><form id="email-form" name="email-form" data-name="Email Form" method="get" class="subscribe-form-flex" data-wf-page-id="64da82f6bf67de1b1278908c" data-wf-element-id="6296c60a-2175-dfae-7f45-c0d61710f045"><div class="subscribe-form-input-wrapper"><input class="subscribe-form-input w-input" maxlength="256" name="Subscriber-Email" data-name="Subscriber Email" placeholder="Email address" type="email" id="Subscriber-Email" required=""></div><input type="submit" data-wait="Please wait..." class="button w-button" value="Subscribe"></form><div class="w-form-done"><div>Thank you! Your submission has been received!</div></div><div class="w-form-fail"><div>Oops! Something went wrong while submitting the form.</div></div></div></div></div><div class="container absolute noclick pattern blog"><div class="div-block-75"><img src="../fonts/64da82f6bf67de1b12789264_patter-diagonal-dark.svg" loading="lazy" alt="" class="image-24"></div></div></div></div></div><div class="section overflow"><div class="container latest"><a href="../blog.html" class="w-inline-block"><h2 class="blue-700-text latest-news"><strong>←</strong> Back to blog</h2></a><div class="content"><div data-delay="4000" data-animation="slide" class="slider-2 w-slider" data-autoplay="false" data-easing="ease" data-hide-arrows="true" data-disable-swipe="true" data-autoplay-limit="0" data-nav-spacing="3" data-duration="500" data-infinite="false"><div class="mask-2 w-slider-mask"><div class="slide-2 w-slide"><div class="w-clearfix w-dyn-list"><div role="list" class="collection-list-3 slider w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="preparing-for-ai-agents.html" class="link-block-12 w-inline-block"><div style="background-image:url("../images/67a6199f88432c9cfcc598f0_ai_agents.jpg")" class="div-block-113"></div><div class="div-block-114"><div class="div-block-124"><p fs-cmsfilter-field="category" class="cap1 blue-700-text no-margin category">Research</p></div><h5 class="no-margin">Preparing for AI Agents</h5><p class="grey-600-text no-margin">AI agents are coming. How should you prepare? </p><p class="cap1 grey-400-text no-margin">February 7, 2025</p></div></a></div><div role="listitem" class="w-dyn-item"><a href="our-position-on-ai-regulation.html" class="link-block-12 w-inline-block"><div style="background-image:url("../images/66cde8f93f93718d737e9ada_pos_header.jpg")" class="div-block-113"></div><div class="div-block-114"><div class="div-block-124"><p fs-cmsfilter-field="category" class="cap1 blue-700-text no-margin category">Announcements</p></div><h5 class="no-margin">Our Position on AI Regulation</h5><p class="grey-600-text no-margin">There is currently substantial interest in directly regulating the development and availability of AI, rather than its applications. Here is our position.</p><p class="cap1 grey-400-text no-margin">August 27, 2024</p></div></a></div><div role="listitem" class="w-dyn-item"><a href="why-classic-browser-fingerprinting-no-longer-stops-bots.html" class="link-block-12 w-inline-block"><div style="background-image:url("../images/669566fff913a1aeb53eb46e_Fingerprinting%20-%20Blog%20Image.png")" class="div-block-113"></div><div class="div-block-114"><div class="div-block-124"><p fs-cmsfilter-field="category" class="cap1 blue-700-text no-margin category">Security Strategy</p></div><h5 class="no-margin">Why Classic Browser Fingerprinting No Longer Stops Bots</h5><p class="grey-600-text no-margin">Browser fingerprinting, once a powerful tool, is now thwarted by privacy-focused browsers and advanced evasion tactics, making it largely obsolete for identifying threat actors.</p><p class="cap1 grey-400-text no-margin">July 16, 2024</p></div></a></div></div></div></div></div><div class="hide w-slider-arrow-left"><div class="w-icon-slider-left"></div></div><div class="hide w-slider-arrow-right"><div class="w-icon-slider-right"></div></div><div class="hide w-slider-nav w-round"></div></div></div></div></div><div bind="6395893a-e5fe-ad5b-d853-97b7d8379d42" role="navigation" aria-label="Footer" class="section grey-400-stroke"><div class="container padding-0topbottom"><div class="footer-nav"><div class="footer-logo"><a aria-label="homepage link" tabindex="-1" href="../labeling.html" class="hcaptcha-logo footer-logo w-inline-block"></a><div class="footer-social"><div id="social-tw" class="social-icon margin-right"><a aria-label="twitter" rel="noopener" href="https://twitter.com/hcaptcha" target="_blank" class="invisible-link w-inline-block"></a><div bind="baca4d9f-97b3-ea5e-d3dc-157bfa33ac71" class="icon-facebook w-embed"><a href="https://twitter.com/hcaptcha" rel="noopener" target="_blank" class="invisible-link w-inline-block" title="twitter"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400" role="img" alt=""> <rect width="400" height="400" style="fill: none"></rect> <path fill="currentColor" d="M136.07,340c130,0,201.16-107.73,201.16-201.16,0-3.06,0-6.11-.21-9.14A144,144,0,0,0,372.3,93.11a141.51,141.51,0,0,1-40.61,11.12,71,71,0,0,0,31.08-39.11,141.8,141.8,0,0,1-44.89,17.17,70.77,70.77,0,0,0-120.49,64.48A200.71,200.71,0,0,1,51.69,72.9a70.75,70.75,0,0,0,21.89,94.38,70.23,70.23,0,0,1-32.09-8.85v.89a70.73,70.73,0,0,0,56.72,69.31,70.6,70.6,0,0,1-31.93,1.21,70.8,70.8,0,0,0,66.06,49.1,141.94,141.94,0,0,1-87.81,30.32,143.57,143.57,0,0,1-16.83-1,200.08,200.08,0,0,0,108.37,31.7"></path> </svg> </a></div></div><div id="social-fb" class="social-icon margin-left"><a rel="noopener" href="https://www.facebook.com/hcaptcha" target="_blank" class="invisible-link w-inline-block"></a><div bind="d109ca64-ce48-07d7-4b5d-71f01999d535" class="icon-facebook w-embed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400"> <path fill="currentColor" d="M275,50.06,236.09,50c-43.71,0-72,29-72,73.83v34H125A6.12,6.12,0,0,0,118.9,164v49.32a6.12,6.12,0,0,0,6.12,6.12h39.12V343.88a6.11,6.11,0,0,0,6.11,6.12h51a6.11,6.11,0,0,0,6.11-6.12V219.43h45.74a6.12,6.12,0,0,0,6.12-6.12l0-49.32a6.15,6.15,0,0,0-6.13-6.12H227.4V129c0-13.88,3.31-20.91,21.38-20.91l26.2,0A6.11,6.11,0,0,0,281.1,102V56.18A6.12,6.12,0,0,0,275,50.06Z"></path> </svg></div></div></div></div><div class="footer-columns w-clearfix"><div class="footer-link-column-desktop navfooter2"><h5 class="footer-header">Company</h5><a href="../about.html" class="footer-link">About</a><a rel="noopener" href="https://apply.workable.com/imachines/" class="footer-link">Jobs</a><a rel="noopener" href="../trademarks.html" class="footer-link">Trademarks</a><a rel="noopener" href="../ai-ethics.html" class="footer-link">AI Ethics</a><a rel="noopener" href="../press-inquiries.html" class="footer-link">Press</a><a href="../certifications.html" class="footer-link">Compliance</a></div><div class="footer-link-column-desktop footer-link-column-center navfooter2"><h5 class="footer-header">Resources</h5><a rel="noopener" href="https://www.hcaptchastatus.com/" target="_blank" class="footer-link">Status</a><a rel="noopener" href="https://docs.hcaptcha.com/" class="footer-link">Documentation</a><a href="../reporting-bugs.html" class="footer-link">Report a Bug</a><a href="../accessibility.html" class="footer-link">Accessibility</a><a href="../hcaptcha-resources-bots-101.html" class="footer-link">Cyberattacks 101</a><a href="../gdpr.html" class="footer-link">GDPR</a></div><div class="footer-link-column-desktop navfooter2"><h5 class="footer-header">Contact</h5><a href="../support-interstitial.html" class="link-block-8 w-inline-block"><div class="footer-link bold">Support</div></a><a href="../contact-us.html" class="footer-link margin-bottom">Contact Support</a><a href="#" class="link-block-7 w-inline-block"><div class="footer-link bold">Sales</div></a><a href="../contact-us.html#contact-sales" class="footer-link margin-bottom">Contact Sales</a></div></div></div><div class="footer-legal w-clearfix"><div class="legal-nav"><a href="../terms.html" class="cap2 footer-legal-links">Terms</a><a href="../privacy.html" class="cap2 footer-legal-links">Privacy</a><a href="../dmca.html" class="cap2 footer-legal-links">DMCA</a><a href="../attribution.html" class="cap2 footer-legal-links">Attribution</a></div><div class="copyright-info-container"><div class="cap2 center-text">hCaptcha is a registered trademark of Intuition Machines, Inc.</div></div><div class="cap2">©2024 Intuition Machines, Inc.</div></div></div></div><script src="../js/jquery-3.5.1.min.dc5e7f18c8.js" type="text/javascript" crossorigin="anonymous"></script><script src="../js/11a199ec191785f1fe8a97aa2b490bfb78aed032f9d28816acb42ddbb5aa90a0.js" type="text/javascript"></script><!-- <script type="text/javascript"> var xhr = new XMLHttpRequest(); var data = JSON.stringify({vt: "p", p: window.location.href, r: document.referrer, sw: window.screen.width}); xhr.open("POST", "https://accounts.hcaptcha.com/b", true); xhr.setRequestHeader("Content-type", "application/json;charset=UTF-8"); xhr.send(data); </script> --> <script type="text/javascript"> /** * Include on static page to enable translations. * * Loads only necessary dict files. * */ /** * @module Language * @desc * Language Translation Module used to process text and covert a string based on user defined language. * Language can be defined by Client's browser or API * @requires module:utils */ var Language = { /** * @name module:Language#getLocale * @return {string} Defined ISO 639-1 Language Codes * @see https://www.w3schools.com/tags/ref_language_codes.asp * @example * en-us */ getLocale: function(override) { var locale = override || window.navigator.userLanguage || window.navigator.language; // Get short locale for remapping purposes var short_locale = Language.getShortLocale(locale); // Remap known locales if (short_locale === "in") { short_locale = "id"; } if (short_locale === "he") { short_locale = "iw"; } if (short_locale === "nb") { short_locale = "no"; } // need multiple versions for Chinese if (locale.includes("zh-CN")) { short_locale = locale; } return short_locale; }, /** * @name module:Language#getShortLocale * @return {string} Restricts the ISO 639-1 Language Code to two chracters * @example * en-us > en */ getShortLocale: function(locale) { return locale.substring(0, 2); } }; // find manually data-tagged but missing translation class var textM = $('body *').contents().filter(function() { return ($(this).parent().data("vavilon") != null) && (!$(this).parent().hasClass("vavilon")); }); // tag with class textM.each(function( index ) { $(this).parent().addClass("vavilon"); }); // tag all elements based on content for ease of translation // MurmurHash 3, MIT license. https://github.com/jensyt/imurmurhash-js/blob/master/imurmurhash.min.js !function(){function t(h,r){var s=this instanceof t?this:e;return s.reset(r),"string"==typeof h&&h.length>0&&s.hash(h),s!==this?s:void 0}var e;t.prototype.hash=function(t){var e,h,r,s,i;switch(i=t.length,this.len+=i,h=this.k1,r=0,this.rem){case 0:h^=i>r?65535&t.charCodeAt(r++):0;case 1:h^=i>r?(65535&t.charCodeAt(r++))<<8:0;case 2:h^=i>r?(65535&t.charCodeAt(r++))<<16:0;case 3:h^=i>r?(255&t.charCodeAt(r))<<24:0,h^=i>r?(65280&t.charCodeAt(r++))>>8:0}if(this.rem=3&i+this.rem,i-=this.rem,i>0){for(e=this.h1;;){if(h=4294967295&11601*h+3432906752*(65535&h),h=h<<15|h>>>17,h=4294967295&13715*h+461832192*(65535&h),e^=h,e=e<<13|e>>>19,e=4294967295&5*e+3864292196,r>=i)break;h=65535&t.charCodeAt(r++)^(65535&t.charCodeAt(r++))<<8^(65535&t.charCodeAt(r++))<<16,s=t.charCodeAt(r++),h^=(255&s)<<24^(65280&s)>>8}switch(h=0,this.rem){case 3:h^=(65535&t.charCodeAt(r+2))<<16;case 2:h^=(65535&t.charCodeAt(r+1))<<8;case 1:h^=65535&t.charCodeAt(r)}this.h1=e}return this.k1=h,this},t.prototype.result=function(){var t,e;return t=this.k1,e=this.h1,t>0&&(t=4294967295&11601*t+3432906752*(65535&t),t=t<<15|t>>>17,t=4294967295&13715*t+461832192*(65535&t),e^=t),e^=this.len,e^=e>>>16,e=4294967295&51819*e+2246770688*(65535&e),e^=e>>>13,e=4294967295&44597*e+3266445312*(65535&e),e^=e>>>16,e>>>0},t.prototype.reset=function(t){return this.h1="number"==typeof t?t:0,this.rem=this.k1=this.len=0,this},e=new t,"undefined"!=typeof module?module.exports=t:this.MurmurHash3=t}(); // find untagged strings var textS = $('body *').contents().filter(function() { return (this.nodeType == 3) && (this.nodeValue.length > 3) && this.nodeValue.match(/[a-z]/) && (! this.nodeValue.match(/\@|©/)) && ($(this).parent().data("vavilon") == null || typeof $(this).parent().data("vavilon") === 'number') && (!$(this).parent().is("script")) && $(this).parents('.code-snippet').length === 0; }); tKeys = {} // tag with hash textS.each(function( index ) { var h = MurmurHash3(this.nodeValue).result(); $(this).parent().attr("data-vavilon", h).addClass("vavilon"); // hack to preserve insertion order: V8 re-sorts "string" ints. tKeys['XXXHHH' + h] = $(this).text().trim(); // tKeys[h] = $(this).text().trim(); }); // output for key file // console.log(JSON.stringify(tKeys)); // check if vavilon cookie is set var c = document.cookie.split(";"); var lang; for (var i=0; i < c.length; i++) if (c[i].indexOf("vavilon") >= 0) lang = c[i].split("=")[1] var urlParams = new URLSearchParams(window.location.search); var hl_lang = urlParams.get('hl'); if (hl_lang && (hl_lang.length > 5 || ! /^[a-zA-Z0-9\-]+$/.test(hl_lang))) { // reject invalid hl param: too long or unexpected chars hl_lang = null; } var browser_lang = Language.getLocale(hl_lang); var pathname = window.location.pathname; // var asset_root = "https://assets.hcaptcha.com/website-i18n"; if (browser_lang.indexOf("zh") >= 0) { var asset_root = "https://website-i18n.hcaptcha.com"; } else { var asset_root = "https://newassets.hcaptcha.com/website-i18n"; } var page = "main"; var tr_path = asset_root + "/" + browser_lang + "/" + page + ".json"; var en_path = asset_root + "/" + "en" + "/" + page + ".json"; function updateOpt(lang) { $("#switch-to-english").text("Switch to " + lang.toUpperCase()); var finalStr = "javascript:setLang('" + lang + "'); $('html').attr('lang', '" + lang + "');" if (lang != "en") { finalStr += "updateOpt('en');"; } else { finalStr += "updateOpt('" + browser_lang + "');"; } document.getElementById("switch-to-english").href = finalStr; } function switchToEnglish() { $("html").attr("lang", "en"); setLang('en'); updateOpt(browser_lang); } if ((hl_lang && hl_lang !== "en") || (browser_lang !== "en" && lang !== 'en')) { $("html").attr("lang", browser_lang); // unhide switch to english part on block $('#switch-to-english').show(); // load correct lang JSON var element = document.createElement("script"); element.src = tr_path; element.setAttribute("type", "application/json"); element.setAttribute("data-vavilon-dict", browser_lang); document.body.appendChild(element); var haveEn = $('script').filter(function() { return $(this).attr("data-vavilon-dict") === 'en'; }).length > 0; // do we need to load en? if (! haveEn) { // load en lang JSON to switch var element2 = document.createElement("script"); element2.src = en_path; element2.setAttribute("type", "application/json"); element2.setAttribute("data-vavilon-dict", "en"); document.body.appendChild(element2); } // due to element race setTimeout(function() { // load vavilon JS // var element2 = document.createElement("script"); // element2.src = "https://newassets.hcaptcha.com/website-tr/js/vavilon_mod.min.js"; //"https://assets.hcaptcha.com/website-tr-js/vavilon.min.js"; // document.body.appendChild(element2); // setLang(browser_lang) // once more, just in case // direct insertion !function(){"use strict";var o=(n.prototype.hasString=function(n){return this.strings.hasOwnProperty(n)},n.prototype.load=function(t){var i=this;!function(n,t){var i=new XMLHttpRequest;i.onload=function(){this.status<300&&200<=this.status&&t&&t(i.responseText)},i.open("GET",n,!0),i.send()}(this.url,function(n){i.strings=JSON.parse(n),t&&t()})},n);function n(n,t){void 0===t&&(t={}),this.url=n,this.strings=t}function t(n){var t=new Date;t.setTime(t.getTime()+31536e7);var i="; expires="+t.toUTCString();document.cookie="vavilon-locale="+(n||"")+i+"; path=/"}function i(){return(function(){var n=("; "+document.cookie).split("; vavilon-locale=");return 2===n.length?n[1].split(";")[0]:null}()||window.navigator.language||window.browserLanguage||window.userLanguage).toLowerCase()}function u(){this.n=i(),this.t=document.documentElement.lang.toLowerCase(),this.i=null,this.o={},this.u=null}var c=new(u.prototype.find=function(){this.i=document.getElementsByClassName("vavilon")},u.prototype.replace=function(){var i=this;this.i&&this.u&&(this.o[this.t]||(this.o[this.t]=new o(null)),Array.from(this.i).forEach(function(n){var t=n.dataset.vavilon;i.o[i.u].hasString(t)&&(i.o[i.t].hasString(t)||(i.o[i.t].strings[t]=n.innerText.trim()),n.innerHTML=i.o[i.u].strings[t])}))},u.prototype.addDicts=function(){var i=this;Array.from(document.scripts).filter(function(n){return n.dataset.hasOwnProperty("vavilonDict")}).forEach(function(n){var t=n.dataset.vavilonDict.toLowerCase();i.o[t]=new o(n.src)})},u.prototype.loadDicts=function(t){var i=this;Object.keys(this.o).forEach(function(n){n===i.n||n.slice(0,2)===i.n.slice(0,2)&&!i.u?(i.u=n,i.o[n].load(function(){i.pageDictLoaded=!0,t()})):i.o[n].load()})},u.prototype.setLocale=function(n){return this.o[n]?(this.u=n,t(this.u),!0):!!this.o[n.slice(0,2)]&&(this.u=n.slice(0,2),t(this.u),!0)},u),s=!1;c.addDicts(),c.loadDicts(function(){s&&c.replace()}),window.onload=function(){c.find(),s=!0,c.pageDictLoaded&&c.replace()},window.setLang=function(n){n=n.toLowerCase(),c.setLocale(n)&&c.replace()}}(); // make sure we translate window.onload() // double up for manual override if (hl_lang !== null) { // console.log("lang", hl_lang) setLang(hl_lang); setTimeout(function() { setLang(hl_lang); }, 300); } else { // console.log("browser_lang", browser_lang) setLang(browser_lang); setTimeout(function() { setLang(browser_lang); }, 300); } // race document.getElementById("switch-to-english").href = "javascript:switchToEnglish();"; }, 300); } else { // if (browser_lang == "en") { // $('#switch-to-english').hide(); // } // we show the block on main page always page because of the link to /accessibility // but the block is not visible by default on accessibility page as it only contains // switch language option if (window.location.pathname === '/accessibility') { $('#acc-switch-block').hide(); } }; </script> <!-- Cloudflare Web Analytics --><script defer="" src="https://static.cloudflareinsights.com/beacon.min.js" data-cf-beacon="{"token": "07c762c369a9497f86fdfb1774ba0fb9"}"></script><!-- End Cloudflare Web Analytics --> <script type="text/javascript"> function getRefQueryParam(name) { name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]'); var regex = new RegExp('[\\?&]' + name + '=([^&#]*)'); var results = regex.exec(location.search); return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' ')); }; var utmParamQueryString = '', utmParamQueryStringTrimmed = '', utm_source = '', utm_medium = '', utm_content = '', utm_campaign = '', utm_term = ''; (function() { utm_source = getRefQueryParam("utm_source"); utm_medium = getRefQueryParam("utm_medium"); utm_content = getRefQueryParam("utm_content"); utm_campaign = getRefQueryParam("utm_campaign"); utm_term = getRefQueryParam("utm_term"); if (utm_source) { utmParamQueryString += '&utm_source=' + utm_source; } if (utm_medium) { utmParamQueryString += '&utm_medium=' + utm_medium; } if (utm_content) { utmParamQueryString += '&utm_content=' + utm_content; } if (utm_campaign) { utmParamQueryString += '&utm_campaign=' + utm_campaign; } if (utm_term) { utmParamQueryString += '&utm_term=' + utm_term; } if(utmParamQueryString.length > 0) { utmParamQueryString = utmParamQueryString.substring(1); utmParamQueryStringTrimmed = utmParamQueryString; utmParamQueryString = utmParamQueryString; } if (!utmParamQueryString) return; var navLinks = document.querySelectorAll('a'); navLinks.forEach(function(item) { if (item.href.indexOf('mailto:') == -1 && (item.href.indexOf('/') === 0 || item.href.indexOf('botstop.com') !== -1 || item.href.indexOf('hcaptcha.com') !== -1)) { if (item.href.indexOf('?') === -1) { item.href += '?'; } else { item.href += '&'; } item.href += utmParamQueryString; } }); })(); </script><!-- Cloudflare Pages Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "832e9d9ca0b94a568ba9d035a7fc0b87"}'></script><!-- Cloudflare Pages Analytics --></body></html>