apk.html 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>USSlot77 - Get Free Bonus</title>
  6. <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" />
  7. <meta name="referrer" content="no-referrer-when-downgrade" />
  8. <script>
  9. !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
  10. n.callMethod.apply(n,arguments):n.queue.push(arguments)};
  11. if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
  12. n.queue=[];t=b.createElement(e);t.async=!0;t.src=v;
  13. s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}
  14. (window, document,'script','https://connect.facebook.net/en_US/fbevents.js');
  15. fbq('init','26337722602485177');
  16. fbq('track','PageView');
  17. </script>
  18. <noscript><img height="1" width="1" style="display:none"
  19. src="https://www.facebook.com/tr?id=26337722602485177&ev=PageView&noscript=1"
  20. /></noscript>
  21. <style>
  22. * { box-sizing: border-box; margin: 0; padding: 0; }
  23. html, body {
  24. width: 100%; height: 100%;
  25. background: #000;
  26. font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  27. }
  28. body { display: flex; justify-content: center; align-items: stretch; }
  29. .stage {
  30. position: relative;
  31. width: 100%;
  32. max-width: 720px;
  33. height: 100vh;
  34. max-height: 1280px;
  35. overflow: hidden;
  36. background: #000 url("https://usslots-s3.s3.us-east-1.amazonaws.com/h5-images/bg_01.png") no-repeat top center;
  37. background-size: cover;
  38. cursor: pointer;
  39. }
  40. .top-bar {
  41. position: absolute;
  42. top: 0;
  43. left: 50%;
  44. transform: translateX(-50%);
  45. width: 100%;
  46. max-width: 720px;
  47. height: auto;
  48. z-index: 5;
  49. pointer-events: none;
  50. }
  51. .popup-mask {
  52. position: absolute;
  53. inset: 0;
  54. background: rgba(0, 0, 0, 0.65);
  55. display: flex;
  56. justify-content: center;
  57. align-items: center;
  58. z-index: 10;
  59. }
  60. .popup { position: relative; width: 78%; max-width: 563px; }
  61. .popup__img { width: 100%; display: block; }
  62. .hint {
  63. position: absolute;
  64. left: 50%;
  65. bottom: 16px;
  66. transform: translateX(-50%);
  67. width: calc(100% - 24px);
  68. max-width: 680px;
  69. padding: 10px 12px;
  70. border-radius: 12px;
  71. background: rgba(0,0,0,0.55);
  72. color: rgba(255,255,255,0.88);
  73. font-size: 12px;
  74. line-height: 1.35;
  75. z-index: 20;
  76. pointer-events: none;
  77. text-align: center;
  78. border: 1px solid rgba(255,255,255,0.12);
  79. backdrop-filter: blur(6px);
  80. }
  81. .toast {
  82. position: fixed;
  83. left: 50%;
  84. bottom: 18px;
  85. transform: translateX(-50%);
  86. padding: 10px 12px;
  87. border-radius: 999px;
  88. background: rgba(0,0,0,0.7);
  89. border: 1px solid rgba(255,255,255,0.12);
  90. color: rgba(255,255,255,0.92);
  91. font-size: 13px;
  92. opacity: 0;
  93. pointer-events: none;
  94. transition: opacity .18s ease;
  95. z-index: 9999;
  96. max-width: min(92vw, 520px);
  97. text-align: center;
  98. }
  99. .toast.show { opacity: 1; }
  100. .stage.locked { cursor: progress; }
  101. </style>
  102. </head>
  103. <body>
  104. <div class="stage" id="stageRoot">
  105. <img src="https://usslots-s3.s3.us-east-1.amazonaws.com/h5-images/top_01.png" alt="Top Bar" class="top-bar" />
  106. <div class="popup-mask" id="bonusPopup">
  107. <div class="popup">
  108. <img src="https://usslots-s3.s3.us-east-1.amazonaws.com/h5-images/pop_01.png" alt="Popup" class="popup__img" />
  109. </div>
  110. </div>
  111. <div class="hint" id="hintText">Tap anywhere to download. If download fails, open in system browser.</div>
  112. </div>
  113. <div class="toast" id="toast" role="status" aria-live="polite"></div>
  114. <script>
  115. var APK_URL = "https://usslots-s3.s3.us-east-1.amazonaws.com/apk/USSlotAD.apk";
  116. function toast(msg) {
  117. var el = document.getElementById("toast");
  118. el.textContent = msg;
  119. el.classList.add("show");
  120. clearTimeout(el.__t);
  121. el.__t = setTimeout(function(){ el.classList.remove("show"); }, 2200);
  122. }
  123. function parseQuery() {
  124. var params = {};
  125. try {
  126. var usp = new URLSearchParams(window.location.search);
  127. usp.forEach(function(v,k){ params[k] = v; });
  128. } catch (e) {}
  129. return params;
  130. }
  131. function setCookie(name, value, days) {
  132. try {
  133. if (!value) return;
  134. var d = new Date();
  135. d.setTime(d.getTime() + (days||30)*24*60*60*1000);
  136. document.cookie = name + "=" + encodeURIComponent(value) + "; expires=" + d.toUTCString() + "; path=/; SameSite=Lax";
  137. } catch(e) {}
  138. }
  139. function detectEnv() {
  140. var ua = navigator.userAgent || "";
  141. return {
  142. ua: ua,
  143. isAndroid: /Android/i.test(ua),
  144. isIOS: /iPhone|iPad|iPod/i.test(ua),
  145. isWeChat: /MicroMessenger/i.test(ua),
  146. isFBInApp: /\bFBAN\b|\bFBAV\b/i.test(ua) || /Instagram/i.test(ua)
  147. };
  148. }
  149. function trackLeadOnce(payload) {
  150. if (window.__leadTracked) return;
  151. window.__leadTracked = true;
  152. try {
  153. if (typeof window.fbq === "function") {
  154. window.fbq("track", "Lead", payload || {});
  155. }
  156. } catch (e) {}
  157. }
  158. /***********************
  159. * 主逻辑
  160. ***********************/
  161. (function initLanding() {
  162. var stage = document.getElementById("stageRoot");
  163. var popup = document.getElementById("bonusPopup");
  164. var hint = document.getElementById("hintText");
  165. var qp = parseQuery();
  166. var env = detectEnv();
  167. // 1) 归因参数:只保存,不拼到 APK 链接
  168. // 建议允许保存的字段(常见投放+你们自定义 sub/c)
  169. var attribution = {
  170. fbclid: qp.fbclid || "",
  171. utm_source: qp.utm_source || "",
  172. utm_medium: qp.utm_medium || "",
  173. utm_campaign: qp.utm_campaign || "",
  174. utm_content: qp.utm_content || "",
  175. utm_term: qp.utm_term || "",
  176. campaign_id: qp.campaign_id || qp.c || "",
  177. adset_id: qp.adset_id || "",
  178. ad_id: qp.ad_id || "",
  179. placement: qp.placement || "",
  180. creative: qp.creative || "",
  181. sub: qp.sub || "",
  182. sub1: qp.sub1 || "",
  183. sub2: qp.sub2 || "",
  184. sub3: qp.sub3 || "",
  185. sub4: qp.sub4 || "",
  186. sub5: qp.sub5 || ""
  187. };
  188. // localStorage + cookie(cookie 只存关键的,避免太长)
  189. try {
  190. localStorage.setItem("lp_attribution", JSON.stringify(attribution));
  191. } catch(e){}
  192. setCookie("fbclid", attribution.fbclid, 30);
  193. setCookie("utm_source", attribution.utm_source, 30);
  194. setCookie("utm_medium", attribution.utm_medium, 30);
  195. setCookie("utm_campaign", attribution.utm_campaign, 30);
  196. setCookie("campaign_id", attribution.campaign_id, 30);
  197. // 2) 环境提示
  198. if (env.isIOS) {
  199. hint.textContent = "iPhone/iPad cannot install APK. Please use an Android device.";
  200. } else if (env.isWeChat) {
  201. hint.textContent = "WeChat may block APK download. Tap ⋯ and open in Browser.";
  202. } else if (env.isFBInApp) {
  203. hint.textContent = "If download fails in in-app browser, please open in system browser.";
  204. } else {
  205. hint.textContent = "Tap anywhere to download APK. Install after download completes.";
  206. }
  207. // 3) 点击:只触发一次 + 防连点
  208. function handleClick() {
  209. if (stage.classList.contains("locked")) return;
  210. stage.classList.add("locked");
  211. // Pixel Lead(如果没有 Pixel,这步会自动忽略)
  212. trackLeadOnce({
  213. content_name: "USSlot77",
  214. platform: env.isAndroid ? "android" : (env.isIOS ? "ios" : "other"),
  215. fbclid: attribution.fbclid,
  216. utm_campaign: attribution.utm_campaign,
  217. campaign_id: attribution.campaign_id,
  218. ad_id: attribution.ad_id
  219. });
  220. if (env.isIOS) {
  221. toast("iOS cannot install APK. Use Android device.");
  222. stage.classList.remove("locked");
  223. return;
  224. }
  225. toast("Starting download…");
  226. window.location.assign(APK_URL); // 永远不拼参数
  227. }
  228. stage.addEventListener("click", handleClick, { passive: true });
  229. if (popup) popup.addEventListener("click", handleClick, { passive: true });
  230. })();
  231. </script>
  232. </body>
  233. </html>