From 2cf7336b6aca1a9e2bba6c3c3df699d6250ebc2c Mon Sep 17 00:00:00 2001 From: sunnylqm Date: Wed, 21 May 2025 10:44:44 +0800 Subject: [PATCH] add fallback for android <= 7.0 --- package.json | 2 +- src/client.ts | 5 +++-- src/utils.ts | 28 ++++++++++++++++++++++++---- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index d12fdd1..119ce9e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-update", - "version": "10.28.11", + "version": "10.29.0", "description": "react-native hot update", "main": "src/index", "scripts": { diff --git a/src/client.ts b/src/client.ts index 46ab927..e26f6b9 100644 --- a/src/client.ts +++ b/src/client.ts @@ -3,6 +3,7 @@ import { assertDev, assertWeb, emptyObj, + enhancedFetch, joinUrls, log, noop, @@ -261,7 +262,7 @@ export class Pushy { type: 'checking', message: this.options.appKey + ': ' + stringifyBody, }); - resp = await fetch(this.getCheckUrl(), fetchPayload); + resp = await enhancedFetch(this.getCheckUrl(), fetchPayload); } catch (e: any) { this.report({ type: 'errorChecking', @@ -272,7 +273,7 @@ export class Pushy { try { resp = await promiseAny( backupEndpoints.map(endpoint => - fetch(this.getCheckUrl(endpoint), fetchPayload), + enhancedFetch(this.getCheckUrl(endpoint), fetchPayload), ), ); } catch (err: any) { diff --git a/src/utils.ts b/src/utils.ts index 91c9d73..6b12914 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -40,13 +40,13 @@ const ping = : async (url: string) => { let pingFinished = false; return Promise.race([ - fetch(url, { + enhancedFetch(url, { method: 'HEAD', }) - .then(({ status, statusText }) => { + .then(({ status, statusText, url: finalUrl }) => { pingFinished = true; if (status === 200) { - return url; + return finalUrl; } log('ping failed', url, status, statusText); throw new Error('Ping failed'); @@ -69,7 +69,7 @@ const ping = export function joinUrls(paths: string[], fileName?: string) { if (fileName) { - return paths.map(path => 'https://' + path + '/' + fileName); + return paths.map(path => `https://${path}/${fileName}`); } } @@ -108,3 +108,23 @@ export const assertDev = (matter: string) => { } return true; }; + +export const isAndroid70AndBelow = () => { + // android 7.0 and below devices do not support letsencrypt cert + // https://letsencrypt.org/2023/07/10/cross-sign-expiration/ + return Platform.OS === 'android' && Platform.Version <= 24; +}; + +export const enhancedFetch = async ( + url: string, + params: Parameters[1], +) => { + return fetch(url, params).catch(e => { + log('fetch error', url, e); + if (isAndroid70AndBelow()) { + log(`try fallback to http because android version: ${Platform.Version}`); + return fetch(url.replace('https', 'http'), params); + } + throw e; + }); +};