From ed7f5ac606de5ba656963881ae1c4bd7d7c7bd9c Mon Sep 17 00:00:00 2001 From: sunnylqm Date: Thu, 13 Aug 2020 00:32:07 +0800 Subject: [PATCH] Detect android bundle url --- .../modules/update/DownloadTask.java | 2 +- .../modules/update/UpdateContext.java | 6 +++++ .../modules/update/UpdateModule.java | 9 ++++---- lib/index.js | 23 +++++++++++-------- 4 files changed, 26 insertions(+), 14 deletions(-) diff --git a/android/src/main/java/cn/reactnative/modules/update/DownloadTask.java b/android/src/main/java/cn/reactnative/modules/update/DownloadTask.java index d819558..efddcda 100644 --- a/android/src/main/java/cn/reactnative/modules/update/DownloadTask.java +++ b/android/src/main/java/cn/reactnative/modules/update/DownloadTask.java @@ -123,7 +123,7 @@ class DownloadTask extends AsyncTask { WritableMap params = Arguments.createMap(); params.putDouble("received", (values[0][0])); params.putDouble("total", (values[0][1])); - params.putDouble("hashname", this.hash); + params.putString("hashname", this.hash); sendEvent("RCTPushyDownloadProgress", params); } diff --git a/android/src/main/java/cn/reactnative/modules/update/UpdateContext.java b/android/src/main/java/cn/reactnative/modules/update/UpdateContext.java index a03f6dd..e533ee7 100644 --- a/android/src/main/java/cn/reactnative/modules/update/UpdateContext.java +++ b/android/src/main/java/cn/reactnative/modules/update/UpdateContext.java @@ -23,6 +23,7 @@ public class UpdateContext { public static boolean DEBUG = false; private static ReactInstanceManager mReactInstanceManager; + private static boolean isUsingBundleUrl = false; public UpdateContext(Context context) { this.context = context; @@ -67,6 +68,10 @@ public class UpdateContext { return context.getString(R.string.pushy_build_time); } + public boolean getIsUsingBundleUrl() { + return isUsingBundleUrl; + } + public interface DownloadFileListener { void onDownloadCompleted(); void onDownloadFailed(Throwable error); @@ -184,6 +189,7 @@ public class UpdateContext { } public String getBundleUrl(String defaultAssetsUrl) { + isUsingBundleUrl = true; String currentVersion = getCurrentVersion(); if (currentVersion == null) { return defaultAssetsUrl; diff --git a/android/src/main/java/cn/reactnative/modules/update/UpdateModule.java b/android/src/main/java/cn/reactnative/modules/update/UpdateModule.java index 5038479..24ac18d 100644 --- a/android/src/main/java/cn/reactnative/modules/update/UpdateModule.java +++ b/android/src/main/java/cn/reactnative/modules/update/UpdateModule.java @@ -46,6 +46,7 @@ public class UpdateModule extends ReactContextBaseJavaModule{ constants.put("packageVersion", updateContext.getPackageVersion()); constants.put("currentVersion", updateContext.getCurrentVersion()); constants.put("buildTime", updateContext.getBuildTime()); + constants.put("isUsingBundleUrl", updateContext.getIsUsingBundleUrl()); boolean isFirstTime = updateContext.isFirstTime(); constants.put("isFirstTime", isFirstTime); if (isFirstTime) { @@ -134,14 +135,14 @@ public class UpdateModule extends ReactContextBaseJavaModule{ } try { - Field jsBundleField = instanceManager.getClass().getDeclaredField("mJSBundleFile"); - jsBundleField.setAccessible(true); - jsBundleField.set(instanceManager, UpdateContext.getBundleUrl(application)); - } catch (Throwable err) { JSBundleLoader loader = JSBundleLoader.createFileLoader(UpdateContext.getBundleUrl(application)); Field loadField = instanceManager.getClass().getDeclaredField("mBundleLoader"); loadField.setAccessible(true); loadField.set(instanceManager, loader); + } catch (Throwable err) { + Field jsBundleField = instanceManager.getClass().getDeclaredField("mJSBundleFile"); + jsBundleField.setAccessible(true); + jsBundleField.set(instanceManager, UpdateContext.getBundleUrl(application)); } try { diff --git a/lib/index.js b/lib/index.js index 05e952c..cdfd6f9 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,5 +1,9 @@ -import { tryBackupEndpoints, getCheckUrl, setCustomEndpoints } from './endpoint'; -import { NativeAppEventEmitter, NativeModules } from 'react-native'; +import { + tryBackupEndpoints, + getCheckUrl, + setCustomEndpoints, +} from './endpoint'; +import { NativeAppEventEmitter, NativeModules, Platform } from 'react-native'; export { setCustomEndpoints }; let Pushy = NativeModules.Pushy; @@ -15,6 +19,12 @@ export const isFirstTime = Pushy.isFirstTime; export const isRolledBack = Pushy.isRolledBack; export const buildTime = Pushy.buildTime; +if (Platform.OS === 'android' && !Pushy.isUsingBundleUrl) { + throw new Error( + 'react-native-update模块无法加载,请对照文档检查Bundle URL的配置', + ); +} + /* Return json: Package was expired: @@ -111,11 +121,6 @@ export function markSuccess() { Pushy.markSuccess(); } -// function report(action) { -// // ${project}.${host}/logstores/${logstore}/track?APIVersion=0.6.0&key1=val1 -// fetch(`${logUrl}&action=${action}`); -// } +NativeAppEventEmitter.addListener('RCTPushyDownloadProgress', (params) => {}); -NativeAppEventEmitter.addListener('RCTPushyDownloadProgress', params => {}); - -NativeAppEventEmitter.addListener('RCTPushyUnzipProgress', params => {}); +NativeAppEventEmitter.addListener('RCTPushyUnzipProgress', (params) => {});