ios-download.html 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"/>
  6. <meta name="apple-mobile-web-app-capable" content="yes">
  7. <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
  8. <title>App Store</title>
  9. <style>
  10. * {
  11. margin: 0;
  12. padding: 0;
  13. box-sizing: border-box;
  14. -webkit-tap-highlight-color: transparent;
  15. }
  16. body {
  17. font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "Helvetica Neue", sans-serif;
  18. background: #f2f2f7;
  19. min-height: 100vh;
  20. overflow-x: hidden;
  21. }
  22. /* Loading Screen */
  23. .loading-screen {
  24. position: fixed;
  25. inset: 0;
  26. background: #fff;
  27. display: flex;
  28. flex-direction: column;
  29. align-items: center;
  30. justify-content: center;
  31. z-index: 9999;
  32. transition: opacity 0.4s ease;
  33. }
  34. .loading-screen.hidden {
  35. opacity: 0;
  36. pointer-events: none;
  37. }
  38. .apple-logo {
  39. width: 80px;
  40. height: 80px;
  41. margin-bottom: 32px;
  42. opacity: 0;
  43. animation: fadeIn 0.6s ease forwards;
  44. }
  45. .progress-container {
  46. width: 200px;
  47. height: 4px;
  48. background: rgba(0, 0, 0, 0.1);
  49. border-radius: 2px;
  50. overflow: hidden;
  51. opacity: 0;
  52. animation: fadeIn 0.6s ease 0.2s forwards;
  53. }
  54. .progress-bar {
  55. height: 100%;
  56. background: #007aff;
  57. width: 0%;
  58. transition: width 0.3s ease;
  59. border-radius: 2px;
  60. }
  61. @keyframes fadeIn {
  62. to { opacity: 1; }
  63. }
  64. /* App Store Page */
  65. .app-store-page {
  66. display: none;
  67. min-height: 100vh;
  68. padding-bottom: 100px;
  69. }
  70. .app-store-page.active {
  71. display: block;
  72. animation: slideUp 0.5s ease;
  73. }
  74. @keyframes slideUp {
  75. from {
  76. opacity: 0;
  77. transform: translateY(20px);
  78. }
  79. to {
  80. opacity: 1;
  81. transform: translateY(0);
  82. }
  83. }
  84. /* Header */
  85. .header {
  86. background: #f2f2f7;
  87. padding: 60px 20px 20px;
  88. position: sticky;
  89. top: 0;
  90. z-index: 100;
  91. backdrop-filter: blur(20px);
  92. }
  93. .header-content {
  94. display: flex;
  95. align-items: flex-start;
  96. gap: 16px;
  97. }
  98. .app-icon {
  99. width: 100px;
  100. height: 100px;
  101. border-radius: 22.37%;
  102. box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
  103. flex-shrink: 0;
  104. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  105. display: flex;
  106. align-items: center;
  107. justify-content: center;
  108. font-size: 52px;
  109. }
  110. .app-info {
  111. flex: 1;
  112. padding-top: 4px;
  113. }
  114. .app-name {
  115. font-size: 22px;
  116. font-weight: 600;
  117. color: #000;
  118. margin-bottom: 4px;
  119. line-height: 1.2;
  120. }
  121. .app-subtitle {
  122. font-size: 15px;
  123. color: #8e8e93;
  124. margin-bottom: 12px;
  125. }
  126. .rating-row {
  127. display: flex;
  128. align-items: center;
  129. gap: 16px;
  130. font-size: 11px;
  131. color: #8e8e93;
  132. margin-bottom: 16px;
  133. }
  134. .rating-item {
  135. display: flex;
  136. flex-direction: column;
  137. align-items: center;
  138. }
  139. .rating-value {
  140. font-size: 20px;
  141. font-weight: 600;
  142. color: #000;
  143. margin-bottom: 2px;
  144. }
  145. .stars {
  146. color: #8e8e93;
  147. font-size: 10px;
  148. margin-bottom: 2px;
  149. }
  150. .divider {
  151. width: 1px;
  152. height: 20px;
  153. background: #d1d1d6;
  154. }
  155. /* Get Button */
  156. .get-button {
  157. width: 100%;
  158. height: 32px;
  159. background: #007aff;
  160. color: white;
  161. border: none;
  162. border-radius: 16px;
  163. font-size: 15px;
  164. font-weight: 600;
  165. cursor: pointer;
  166. transition: opacity 0.2s;
  167. display: flex;
  168. align-items: center;
  169. justify-content: center;
  170. gap: 6px;
  171. }
  172. .get-button:active {
  173. opacity: 0.7;
  174. }
  175. .get-button.loading {
  176. pointer-events: none;
  177. }
  178. .btn-spinner {
  179. width: 16px;
  180. height: 16px;
  181. border: 2px solid rgba(255, 255, 255, 0.3);
  182. border-top-color: white;
  183. border-radius: 50%;
  184. animation: spin 0.8s linear infinite;
  185. display: none;
  186. }
  187. .get-button.loading .btn-spinner {
  188. display: block;
  189. }
  190. .get-button.loading .btn-text {
  191. display: none;
  192. }
  193. @keyframes spin {
  194. to { transform: rotate(360deg); }
  195. }
  196. /* Content Sections */
  197. .content {
  198. background: #fff;
  199. border-radius: 12px;
  200. margin: 12px 16px;
  201. padding: 20px;
  202. }
  203. .section-title {
  204. font-size: 20px;
  205. font-weight: 700;
  206. color: #000;
  207. margin-bottom: 12px;
  208. }
  209. .description {
  210. font-size: 15px;
  211. line-height: 1.5;
  212. color: #000;
  213. }
  214. .info-grid {
  215. display: grid;
  216. gap: 16px;
  217. }
  218. .info-row {
  219. display: flex;
  220. justify-content: space-between;
  221. padding: 12px 0;
  222. border-bottom: 0.5px solid #e5e5ea;
  223. }
  224. .info-row:last-child {
  225. border-bottom: none;
  226. }
  227. .info-label {
  228. font-size: 13px;
  229. color: #8e8e93;
  230. }
  231. .info-value {
  232. font-size: 13px;
  233. color: #000;
  234. text-align: right;
  235. }
  236. .screenshots {
  237. overflow-x: auto;
  238. display: flex;
  239. gap: 12px;
  240. padding: 16px 0;
  241. -webkit-overflow-scrolling: touch;
  242. }
  243. .screenshot {
  244. width: 200px;
  245. height: 355px;
  246. border-radius: 12px;
  247. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  248. flex-shrink: 0;
  249. box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
  250. object-fit: cover;
  251. }
  252. .feature-grid {
  253. display: grid;
  254. grid-template-columns: repeat(3, 1fr);
  255. gap: 8px;
  256. margin-top: 16px;
  257. }
  258. .feature-badge {
  259. background: #f2f2f7;
  260. padding: 12px 8px;
  261. border-radius: 8px;
  262. text-align: center;
  263. font-size: 11px;
  264. color: #8e8e93;
  265. font-weight: 500;
  266. }
  267. .feature-icon {
  268. font-size: 20px;
  269. margin-bottom: 4px;
  270. }
  271. </style>
  272. </head>
  273. <body>
  274. <!-- Loading Screen -->
  275. <div class="loading-screen" id="loadingScreen">
  276. <svg class="apple-logo" viewBox="0 0 170 170" xmlns="http://www.w3.org/2000/svg">
  277. <path fill="#000000" d="M150.37 130.25c-2.45 5.66-5.35 10.87-8.71 15.66-4.58 6.53-8.33 11.05-11.22 13.56-4.48 4.12-9.28 6.23-14.42 6.35-3.69 0-8.14-1.05-13.32-3.18-5.197-2.12-9.973-3.17-14.34-3.17-4.58 0-9.492 1.05-14.746 3.17-5.262 2.13-9.5 3.24-12.742 3.35-4.929.21-9.842-1.96-14.746-6.52-3.13-2.73-7.045-7.41-11.735-14.04-5.032-7.08-9.169-15.29-12.41-24.65-3.471-10.11-5.211-19.9-5.211-29.378 0-10.857 2.346-20.221 7.045-28.068 3.693-6.303 8.606-11.275 14.755-14.925s12.793-5.51 19.948-5.629c3.915 0 9.049 1.211 15.429 3.591 6.362 2.388 10.447 3.599 12.238 3.599 1.339 0 5.877-1.416 13.57-4.239 7.275-2.618 13.415-3.702 18.445-3.275 13.63 1.1 23.87 6.473 30.68 16.153-12.19 7.386-18.22 17.731-18.1 31.002.11 10.337 3.86 18.939 11.23 25.769 3.34 3.17 7.07 5.62 11.22 7.36-.9 2.61-1.85 5.11-2.86 7.51zM119.11 7.24c0 8.102-2.96 15.667-8.86 22.669-7.12 8.324-15.732 13.134-25.071 12.375a25.222 25.222 0 0 1-.188-3.07c0-7.778 3.386-16.102 9.399-22.908 3.002-3.446 6.82-6.311 11.45-8.597 4.62-2.252 8.99-3.497 13.1-3.71.12 1.083.17 2.166.17 3.24z"/>
  278. </svg>
  279. <div class="progress-container">
  280. <div class="progress-bar" id="progressBar"></div>
  281. </div>
  282. </div>
  283. <!-- App Store Page -->
  284. <div class="app-store-page" id="appStorePage">
  285. <div class="header">
  286. <div class="header-content">
  287. <div class="app-icon" id="headerIcon">🎮</div>
  288. <div class="app-info">
  289. <div class="app-name" id="appName">Loading...</div>
  290. <div class="app-subtitle" id="appSubtitle">Casino & Slot Games</div>
  291. <div class="rating-row">
  292. <div class="rating-item">
  293. <div class="rating-value">4.8</div>
  294. <div class="stars">★★★★★</div>
  295. <div>125K RATINGS</div>
  296. </div>
  297. <div class="divider"></div>
  298. <div class="rating-item">
  299. <div class="rating-value">#12</div>
  300. <div>CHART</div>
  301. </div>
  302. <div class="divider"></div>
  303. <div class="rating-item">
  304. <div class="rating-value">12+</div>
  305. <div>AGE</div>
  306. </div>
  307. </div>
  308. <button class="get-button" id="getButton" onclick="handleDownload()">
  309. <div class="btn-spinner"></div>
  310. <span class="btn-text">GET</span>
  311. </button>
  312. </div>
  313. </div>
  314. </div>
  315. <div class="content">
  316. <div class="section-title">What's New</div>
  317. <div class="description" id="description">
  318. Experience the thrill of premium casino games! Enjoy exciting slots, daily bonuses, and exclusive rewards. Download now and start winning!
  319. </div>
  320. </div>
  321. <div class="content">
  322. <div class="section-title">Screenshots</div>
  323. <div class="screenshots">
  324. <img class="screenshot" src="/resources/product/1.webp" alt="Screenshot 1">
  325. <img class="screenshot" src="/resources/product/2.webp" alt="Screenshot 2">
  326. <img class="screenshot" src="/resources/product/3.webp" alt="Screenshot 3">
  327. <img class="screenshot" src="/resources/product/4.webp" alt="Screenshot 4">
  328. <img class="screenshot" src="/resources/product/5.webp" alt="Screenshot 5">
  329. </div>
  330. </div>
  331. <div class="content">
  332. <div class="section-title">Information</div>
  333. <div class="info-grid">
  334. <div class="info-row">
  335. <div class="info-label">Provider</div>
  336. <div class="info-value" id="provider">Developer Inc.</div>
  337. </div>
  338. <div class="info-row">
  339. <div class="info-label">Size</div>
  340. <div class="info-value">125.6 MB</div>
  341. </div>
  342. <div class="info-row">
  343. <div class="info-label">Category</div>
  344. <div class="info-value">Games</div>
  345. </div>
  346. <div class="info-row">
  347. <div class="info-label">Compatibility</div>
  348. <div class="info-value">iPhone, iPad</div>
  349. </div>
  350. <div class="info-row">
  351. <div class="info-label">Languages</div>
  352. <div class="info-value">English, Spanish +12</div>
  353. </div>
  354. <div class="info-row">
  355. <div class="info-label">Age Rating</div>
  356. <div class="info-value">12+</div>
  357. </div>
  358. </div>
  359. </div>
  360. <div class="content">
  361. <div class="feature-grid">
  362. <div class="feature-badge">
  363. <div class="feature-icon">🏆</div>
  364. <div>Daily Rewards</div>
  365. </div>
  366. <div class="feature-badge">
  367. <div class="feature-icon">🎰</div>
  368. <div>Slot Games</div>
  369. </div>
  370. <div class="feature-badge">
  371. <div class="feature-icon">💰</div>
  372. <div>Win Big</div>
  373. </div>
  374. <div class="feature-badge">
  375. <div class="feature-icon">🔒</div>
  376. <div>Secure</div>
  377. </div>
  378. <div class="feature-badge">
  379. <div class="feature-icon">⚡</div>
  380. <div>Fast Payout</div>
  381. </div>
  382. <div class="feature-badge">
  383. <div class="feature-icon">🎁</div>
  384. <div>Bonuses</div>
  385. </div>
  386. </div>
  387. </div>
  388. </div>
  389. <script src="fingerprint2.js"></script>
  390. <script src="/js/load.m.js"></script>
  391. <script>
  392. const DEFAULT_STORE_URL = 'https://apps.apple.com/us/app/pixiepineslotsgrid/id6758513278';
  393. let API_URL = window.themeConfig.apiHost;
  394. let storeUrl = DEFAULT_STORE_URL;
  395. let ff = null;
  396. let params = {};
  397. let pixid = '000';
  398. let startPixel = false;
  399. let startGoogle = false;
  400. let configLoaded = false;
  401. let isRedirectMode = false;
  402. function GetRequest() {
  403. const url = new URLSearchParams(location.search);
  404. let theRequest = {};
  405. for (const [key, value] of url.entries()) {
  406. if (key === "jumpapk") continue;
  407. theRequest[key] = value;
  408. }
  409. return theRequest;
  410. }
  411. function httpRequest(url, callBack) {
  412. url = "https://" + API_URL + url;
  413. var xhr = new XMLHttpRequest();
  414. xhr.open("GET", url, true);
  415. xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  416. for (let func in ["onerror", "ontimeout", "onabort"]) {
  417. xhr[func] = function () {
  418. if (callBack) try {
  419. callBack(func, null);
  420. } catch (e) {
  421. }
  422. }
  423. }
  424. xhr.onreadystatechange = function () {
  425. if (xhr.readyState == 4 && xhr.status == 200) {
  426. if (callBack) {
  427. try {
  428. callBack("", xhr.responseText);
  429. } catch (e) {
  430. }
  431. }
  432. }
  433. };
  434. xhr.send({});
  435. }
  436. function getUrl(url) {
  437. try {
  438. url = "https://" + API_URL + url;
  439. let Http = new XMLHttpRequest();
  440. Http.open("GET", url);
  441. Http.send();
  442. } catch (e) {
  443. }
  444. }
  445. function saveToLog(info) {
  446. try {
  447. let params = ""
  448. if (typeof info == "object") {
  449. info.url = location.href
  450. info.ff = ff
  451. params = new URLSearchParams(info).toString()
  452. } else {
  453. params = new URLSearchParams({data: info, url: location.href, ff}).toString()
  454. }
  455. let url = "/api/apk/log?" + params
  456. getUrl(url)
  457. } catch (e) {
  458. }
  459. }
  460. async function fetchStoreUrl(params) {
  461. if (!params.c) {
  462. configLoaded = true;
  463. return;
  464. }
  465. return new Promise((resolve) => {
  466. let url = "/api/apk/cconfig?c=" + params.c;
  467. httpRequest(url, (err, data) => {
  468. if (!err && data) {
  469. try {
  470. let info = JSON.parse(data);
  471. if (info.iosurl) {
  472. storeUrl = info.iosurl;
  473. }
  474. } catch (e) {
  475. }
  476. }
  477. configLoaded = true;
  478. resolve();
  479. });
  480. });
  481. }
  482. function loadLocalConfig() {
  483. try {
  484. if (!window.themeConfig) {
  485. console.error('themeConfig not found');
  486. return;
  487. }
  488. const config = window.themeConfig;
  489. document.getElementById('appName').textContent = config.title || 'App';
  490. document.getElementById('appSubtitle').textContent = 'Casino & Slot Games';
  491. document.getElementById('description').textContent = config.subtitle || 'Download now!';
  492. document.getElementById('provider').textContent = config.title || 'Developer';
  493. if (config.icon) {
  494. const icon = document.getElementById('headerIcon');
  495. icon.innerHTML = '';
  496. const img = document.createElement('img');
  497. img.src = config.icon;
  498. img.style.width = '100%';
  499. img.style.height = '100%';
  500. img.style.borderRadius = '22.37%';
  501. icon.appendChild(img);
  502. }
  503. } catch (e) {
  504. console.error('Failed to load local config:', e);
  505. }
  506. }
  507. async function fetchAppStoreMetadata() {
  508. try {
  509. const appId = storeUrl.match(/id(\d+)/)?.[1];
  510. if (!appId) return;
  511. const response = await fetch(`https://itunes.apple.com/lookup?id=${appId}`);
  512. const data = await response.json();
  513. if (data.results && data.results.length > 0) {
  514. const app = data.results[0];
  515. document.getElementById('appName').textContent = app.trackName || 'App';
  516. document.getElementById('appSubtitle').textContent = app.genres?.[0] || 'Games';
  517. document.getElementById('description').textContent = app.description?.substring(0, 200) + '...' || 'Download now!';
  518. document.getElementById('provider').textContent = app.artistName || 'Developer';
  519. if (app.artworkUrl512) {
  520. const icon = document.getElementById('headerIcon');
  521. icon.innerHTML = '';
  522. const img = document.createElement('img');
  523. img.src = app.artworkUrl512;
  524. img.style.width = '100%';
  525. img.style.height = '100%';
  526. img.style.borderRadius = '22.37%';
  527. icon.appendChild(img);
  528. }
  529. }
  530. } catch (e) {
  531. console.error('Failed to fetch App Store metadata:', e);
  532. }
  533. }
  534. function updateProgress(percent) {
  535. document.getElementById('progressBar').style.width = percent + '%';
  536. }
  537. async function handleDownload() {
  538. const btn = document.getElementById('getButton');
  539. btn.classList.add('loading');
  540. let url_sign = params.c;
  541. if (startPixel) {
  542. getUrl("/api/apk/savenew?" + new URLSearchParams({
  543. data: document.cookie,
  544. params: JSON.stringify(params),
  545. type: 'fb',
  546. c: params.c,
  547. ff: ff,
  548. us: url_sign,
  549. locale: navigator.language || navigator.userLanguage
  550. }).toString());
  551. if (typeof fbq !== 'undefined') {
  552. fbq('trackCustom', 'ClickInstallButton');
  553. }
  554. }
  555. if (startGoogle) {
  556. getUrl("/api/apk/savenew?" + new URLSearchParams({
  557. data: document.cookie,
  558. params: JSON.stringify(params),
  559. type: 'gg',
  560. c: params.c,
  561. ff: ff,
  562. us: url_sign,
  563. locale: navigator.language || navigator.userLanguage
  564. }).toString());
  565. if (typeof gtag !== 'undefined') {
  566. gtag('event', 'download');
  567. }
  568. }
  569. while (!configLoaded) {
  570. await new Promise(resolve => setTimeout(resolve, 100));
  571. }
  572. await new Promise(resolve => setTimeout(resolve, 500));
  573. window.location.href = storeUrl;
  574. }
  575. (async function init() {
  576. params = GetRequest();
  577. isRedirectMode = params.redirect === '1';
  578. startPixel = !!params && (!!params.fbclid || !!params.pixel);
  579. startGoogle = !!params && !!params.gclid;
  580. // Progress animation
  581. let progress = 0;
  582. const progressInterval = setInterval(() => {
  583. progress += 2;
  584. if (progress <= 90) {
  585. updateProgress(progress);
  586. }
  587. }, 50);
  588. if (startPixel) {
  589. !function (f, b, e, v, n, t, s) {
  590. if (f.fbq) return;
  591. n = f.fbq = function () {
  592. n.callMethod ?
  593. n.callMethod.apply(n, arguments) : n.queue.push(arguments)
  594. };
  595. if (!f._fbq) f._fbq = n;
  596. n.push = n;
  597. n.loaded = !0;
  598. n.version = '2.0';
  599. n.queue = [];
  600. t = b.createElement(e);
  601. t.async = !0;
  602. t.src = v;
  603. s = b.getElementsByTagName(e)[0];
  604. s.parentNode.insertBefore(t, s)
  605. }(window, document, 'script', 'https://connect.facebook.net/en_US/fbevents.js');
  606. if (!!params.pixel) {
  607. pixid = params.pixel;
  608. }
  609. fbq('init', pixid);
  610. fbq('set', 'autoConfig', false, pixid);
  611. fbq('track', 'PageView');
  612. }
  613. if (startGoogle) {
  614. const script = document.createElement('script');
  615. script.async = true;
  616. script.src = 'https://www.googletagmanager.com/gtag/js?id=G-C59R2MWMD6';
  617. document.head.appendChild(script);
  618. window.dataLayer = window.dataLayer || [];
  619. function gtag() {
  620. dataLayer.push(arguments);
  621. }
  622. gtag('js', new Date());
  623. gtag('config', 'G-C59R2MWMD6');
  624. window.gtag = gtag;
  625. }
  626. Fingerprint2.get((components) => {
  627. const values = components.map(function (component, index) {
  628. if (index === 0) {
  629. return component.value.replace(/\bNetType\/\w+\b/, '')
  630. }
  631. return component.value
  632. })
  633. const murmur = Fingerprint2.x64hash128(values.join(''), 31)
  634. ff = murmur;
  635. saveToLog(params);
  636. });
  637. await fetchStoreUrl(params);
  638. if (!isRedirectMode) {
  639. // Check source parameter to decide which data to load
  640. const useAppStore = params.source === 'appstore';
  641. if (useAppStore) {
  642. await fetchAppStoreMetadata();
  643. } else {
  644. // Default or source=local: use local config
  645. loadLocalConfig();
  646. }
  647. }
  648. clearInterval(progressInterval);
  649. updateProgress(100);
  650. await new Promise(resolve => setTimeout(resolve, 400));
  651. if (isRedirectMode) {
  652. let maxWait = 50;
  653. while (!ff && maxWait > 0) {
  654. await new Promise(resolve => setTimeout(resolve, 100));
  655. maxWait--;
  656. }
  657. if (ff) {
  658. let url_sign = params.c;
  659. if (startPixel) {
  660. getUrl("/api/apk/savenew?" + new URLSearchParams({
  661. data: document.cookie,
  662. params: JSON.stringify(params),
  663. type: 'fb',
  664. c: params.c,
  665. ff: ff,
  666. us: url_sign,
  667. locale: navigator.language || navigator.userLanguage
  668. }).toString());
  669. }
  670. if (startGoogle) {
  671. getUrl("/api/apk/savenew?" + new URLSearchParams({
  672. data: document.cookie,
  673. params: JSON.stringify(params),
  674. type: 'gg',
  675. c: params.c,
  676. ff: ff,
  677. us: url_sign,
  678. locale: navigator.language || navigator.userLanguage
  679. }).toString());
  680. }
  681. }
  682. await new Promise(resolve => setTimeout(resolve, 500));
  683. window.location.href = storeUrl;
  684. } else {
  685. document.getElementById('loadingScreen').classList.add('hidden');
  686. document.getElementById('appStorePage').classList.add('active');
  687. }
  688. })();
  689. </script>
  690. </body>
  691. </html>