React Native客户端 SDK 入门
遵循设置 CodePush 帐户的常规用途"入门"说明后,可以通过在应用的根目录中运行以下命令,开始在 React Native 应用中集成 CodePush:
npm install --save react-native-code-push
与所有其他 React Native 插件一样,iOS 和 Android 的集成体验也不同,因此请遵循安装步骤,具体取决于 (面向) 的平台版本。 请注意,如果面向这两个平台,建议为每个平台创建单独的 CodePush 应用程序。
若要了解其他项目如何与 CodePush 集成,请参阅社区提供的示例应用。 此外,如果想熟悉 CodePush + React Native,请参阅 由"管理 "和 "Deepak Sisodiya"生成的入门视频。
重要
本指南假定你已使用 命令 react-native init 初始化React Native项目。 从 2017 年 3 月开始,命令还 create-react-native-app 可用于初始化React Native项目。 如果使用此命令,请在你的项目的主目录中运行 ,获取类似于已 npm run eject react-native init 创建的项目。
iOS 设置
拥有 CodePush 插件后,必须将其集成到 React Native 应用的 Xcode 项目中并正确配置。
适用于 iOS React Native 0.60 及 (插件安装和)
运行
cd ios && pod install && cd ..以安装所有必要的 CocoaPods 依赖项。打开 文件
AppDelegate.m,并添加 CodePush 标头的 import 语句:#import <CodePush/CodePush.h>找到以下代码行,用于为生产版本设置 bridge 的源 URL:
return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];将其替换为以下行:
return [CodePush bundleURL];此更改将应用配置为始终加载应用的 JS 捆绑包的最新版本。 首次启动时,这对应于使用应用编译的文件。 但是,在通过 CodePush 推送更新后,这将返回最近安装的更新的位置。
备注
bundleURL方法假定应用的 JS 捆绑名为main.jsbundle。 如果已配置应用以使用不同的文件名,请调用 方法 (该方法假定你使用的是扩展名) 或 方法,以覆盖bundleURLForResource:.jsbundlebundleURLForResource:withExtension:该默认行为。通常,你只需使用 CodePush 来解析发布版本中的 JS 捆绑包位置。 建议使用预处理器宏,根据是否进行调试,在使用打包器服务器和
DEBUGCodePush 之间动态切换。 这使得确保在调试时仍使用 Chrome 开发工具、实时重载等在生产环境中获得所需的正确行为要简单得多。方法
sourceURLForBridge应如下所示:- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge { #if DEBUG return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; #else return [CodePush bundleURL]; #endif }将部署密钥添加到 :若要让 CodePush 运行时知道它应针对哪个部署查询更新,请打开应用的 文件并添加名为 的新条目,其值是要针对 (配置此应用的部署的密钥,例如应用
Info.plistInfo.plist)CodePushDeploymentKeyStagingFooBar部署的密钥。 可以通过在 AppCenter 仪表板上访问应用的"分发 UI"或使用 CodePush CLI 运行 来检索此值 (因为默认情况下不会显示键) 并复制与要使用 (的部署对应的列值,请参阅下面的appcenter codepush deployment list --app <ownerName>/<appName> -k-kDeployment Key) 。 使用部署的名称 (例如暂) 将不起作用。 该"友好名称"仅用于来自 CLI 的经过身份验证的管理使用情况,而不适合在应用中公开使用。
若要有效地使用随 CodePush 应用一起创建的 和 部署,请参阅下面的多部署测试文档,然后实际将
StagingProduction应用的 CodePush使用情况移动到生产环境。备注
如果需要动态使用不同的部署,还可以使用代码推送选项在 JS 代码中重写部署密钥*
用于响应本机低于 0.60 (iOS) 的插件安装
为了容纳尽可能多的开发人员首选项,CodePush 插件支持通过三种机制进行 iOS 安装:
RNPM - 对本机程序包管理器进行响应 (RNPM) 是一种非常丰富的工具,它提供了响应本机插件的最简单安装体验。 如果你已经在使用它,或想要使用它,则建议使用这种方法。
CocoaPods -如果你要构建一个本机 iOS 应用程序,该应用程序将对其进行本机响应,或者你更喜欢使用 CocoaPods,则建议使用我们在我们的插件中随附的 Podspec 文件。
"手动" -如果您不想依赖任何其他工具或使用几个额外的安装步骤, (只需一次) ,就可以使用这种方法。
(iOS 的插件安装-RNPM)
从0.27 响应的本机,已
rnpm link合并到响应本机 CLI。 运行:react-native link react-native-code-push如果应用使用的响应版本低于 v 0.27,请执行以下命令:
rnpm link react-native-code-push备注
如果尚未安装 RNPM,可以通过运行
npm i -g rnpm并执行上述命令来执行此操作。 如果你已安装 RNPM,请确保你已安装了 v 1.9.0 + 才能从此安装步骤中获益。系统将提示你输入要使用的部署密钥。 如果你还没有这样做,则可以通过运行来检索此值
appcenter codepush deployment list -a <ownerName>/<appName> --displayKeys,也可以选择通过点击) 来忽略 (,<ENTER>以后再添加它。 若要开始,建议使用Staging部署密钥,以便可以测试 CodePush 端到端。
(iOS 的插件安装-CocoaPods)
将响应的本机和 CodePush 插件依赖项添加到
Podfile,指向 NPM 已安装模块的路径# React Native requirements pod 'React', :path => '../node_modules/react-native', :subspecs => [ 'Core', 'CxxBridge', # Include this for RN >= 0.47 'DevSupport', # Include this to enable In-App Devmenu if RN >= 0.43 'RCTText', 'RCTNetwork', 'RCTWebSocket', # Needed for debugging 'RCTAnimation', # Needed for FlatList and animations running on native UI thread # Add any other subspecs you want to use in your project ] # Explicitly include Yoga if you're using RN >= 0.42.0 pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga' pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec' pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec' pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec' # CodePush plugin dependency pod 'CodePush', :path => '../node_modules/react-native-code-push'备注
依赖项的文件路径必须相对于应用的
Podfile位置。备注
项目的库
JWT必须是版本 3.0.x 或更高版本pod install运行
备注
CodePush 依赖于 Pod,因此,为了确保它可以正确使用生成应用的 React Native 版本,请确保在应用的 中定义依赖项,如 React Native 集成 .podspec React 文档 React Podfile 所说明。
iOS (插件安装 - 手动)
打开应用的 Xcode 项目
查找目录中的文件, (或 <= 安装) 并将其拖动到
CodePush.xcodeprojnode_modules/react-native-code-push/iosnode_modules/react-native-code-push1.7.3-betaLibrariesXcode 中的节点
在 Xcode 中选择项目节点,然后选择项目配置的"生成阶段"选项卡。
从 拖动到项目的"生成阶段"配置的"将二进制文件与库
libCodePush.aLibraries/CodePush.xcodeproj/Products链接"部分。
单击"将二进制文件与库链接"列表下面的加号,然后选择
libz.tbd节点下的iOS 9.1库。
备注
或者,如果愿意,可以将 标志添加到 的
-lzOther Linker Flags部分Linking中的 字段Build Settings。
适用于 iOS React Native 0.60 (插件)
备注
如果使用了 RNPM 或自动链接插件,则这些步骤已针对你 react-native link 完成,因此可以跳过本部分。
将 Xcode 项目设置为生成/链接 CodePush 插件后,需要将应用配置为检查 CodePush 中 JS 捆绑包的位置,因为它负责将其与已发布到 CodePush 服务器的更新同步。 为此,请执行以下步骤:
打开 AppDelegate.m 文件,并添加 CodePush 标头的 import 语句:
#import <CodePush/CodePush.h>
对于 React Native 0.59 - 0.59.10:
找到以下代码行,用于为生产版本设置 bridge 的源 URL:
return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];将其替换为以下行:
return [CodePush bundleURL];
对于 React Native 0.58 及以下:
查找下面的代码行,该代码行从应用程序二进制文件中加载用于生产版本的 JS 包:
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];将其替换为以下行:
jsCodeLocation = [CodePush bundleURL];
此更改将应用程序配置为始终加载最新版本的应用的 JS 包。 第一次启动时,这对应于在应用中编译的文件。 但是,在通过 CodePush 推送更新后,将返回最近安装的更新的位置。
备注
bundleURL方法假定应用的 JS 包命名为 main.jsbundle 。 如果已将应用配置为使用不同的文件名,请调用 bundleURLForResource: (方法,该方法假设你要 .jsbundle 改用扩展) 或 bundleURLForResource:withExtension: 方法来覆盖该默认行为。
通常情况下,只需使用 CodePush 在发行版本内解析你的 JS 包位置。 建议使用 DEBUG 预处理器宏在使用包装器服务器和 CodePush 之间动态切换,具体取决于是否正在进行调试。 这使你可以更轻松地确保你在生产中获得所需的正确行为,同时仍然在调试时使用 Chrome 开发工具、实时重载等。
对于响应本机 0.59-0.59.10:
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
#if DEBUG
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
#else
return [CodePush bundleURL];
#endif
}
对于响应本机0.58 和更低:
NSURL *jsCodeLocation;
#ifdef DEBUG
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
#else
jsCodeLocation = [CodePush bundleURL];
#endif
若要让 CodePush 运行时知道它应查询其更新的部署,请打开项目的 info.plist 文件并添加名为的新项 CodePushDeploymentKey ,其值为要为其配置此应用的部署的密钥, (如 Staging 应用) 的部署的密钥 FooBar 。 你可以通过 appcenter codepush deployment list -a <ownerName>/<appName> --displayKeys 在 CODEPUSH CLI 中运行并复制 Deployment Key 与你要使用的部署相对应的列的值来检索此值 (参见下面) 。 使用部署的名称 (如 Staging) 将不起作用。 "友好名称" 仅适用于 CLI 中经过身份验证的管理使用情况,不适用于应用内的公共使用。

若要有效地使用随 CodePush 应用一起创建的 和 部署,请参阅下面的多部署测试文档,然后实际将 Staging Production 应用的 CodePush使用情况移动到生产环境。
iOS (HTTP 异常域)
CodePush 插件向以下域提出 HTTPS 请求:
- codepush.appcenter.ms
- codepush.blob.core.windows.net
- codepushupdates.azureedge.net
如果要更改其中任何域的默认 HTTP 安全配置,请定义 (Info.plist) NSAppTransportSecurity 中的 ATS安全配置:
<plist version="1.0">
<dict>
<!-- ...other configs... -->
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>codepush.appcenter.ms</key>
<dict><!-- read the ATS Apple Docs for available options --></dict>
</dict>
</dict>
<!-- ...other configs... -->
</dict>
</plist>
在做任何操作之前,请 首先参阅 Apple 文档。
iOS (代码签名)
可以在发布期间对捆绑包进行自签名,在安装更新之前验证其签名。 有关代码签名详细信息,请参阅相关的 代码推送文档部分。
若要为捆绑验证配置公钥,需要在 中添加一条包含公钥内容的名称和字符串 Info.plist CodePushPublicKey 值的记录。 示例:
<plist version="1.0">
<dict>
<!-- ...other configs... -->
<key>CodePushPublicKey</key>
<string>-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANkWYydPuyOumR/sn2agNBVDnzyRpM16NAUpYPGxNgjSEp0etkDNgzzdzyvyl+OsAGBYF3jCxYOXozum+uV5hQECAwEAAQ==
-----END PUBLIC KEY-----</string>
<!-- ...other configs... -->
</dict>
</plist>
Android 安装程序
若要将 CodePush 集成到 Android 项目中,请执行以下步骤:
Android (插件)
Android React Native 0.60 及 (插件安装和)
在
android/settings.gradle文件中,进行以下添加:include ':app', ':react-native-code-push' project(':react-native-code-push').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-code-push/android/app')在
android/app/build.gradle文件中,将codepush.gradle文件添加为 下面的附加生成任务定义react.gradle:... apply from: "../../node_modules/react-native/react.gradle" apply from: "../../node_modules/react-native-code-push/android/codepush.gradle" ...通过
MainApplication.java以下更改更新文件以使用 CodePush:... // 1. Import the plugin class. import com.microsoft.codepush.react.CodePush; public class MainApplication extends Application implements ReactApplication { private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { ... // 2. Override the getJSBundleFile method to let // the CodePush runtime determine where to get the JS // bundle location from on each app start @Override protected String getJSBundleFile() { return CodePush.getJSBundleFile(); } }; }将部署密钥添加到
strings.xml:若要让 CodePush 运行时知道哪个部署应查询更新,请打开应用的
strings.xml文件并添加一个名为的新字符串CodePushDeploymentKey,其值为要配置此应用的部署的密钥, (如Staging应用) 的部署的密钥FooBar。 你可以通过在 App Center CLI 中运行来检索此值appcenter codepush deployment list -a <ownerName>/<appName> -k(-k标志是必需的,因为默认情况下不会显示键) 并复制Key与你要使用的部署相对应的列的值 (参见下面的) 。 使用部署的名称 (如过渡) 将不起作用。 "友好名称" 仅适用于 CLI 中经过身份验证的管理使用情况,不适用于应用内的公共使用。
若要有效地使用与
StagingProductionCodePush 应用一起创建的和部署,请参阅下面的 多个部署测试 文档,然后将应用的 CodePush 使用投入到生产环境中。strings.xml文件应如下所示:<resources> <string name="app_name">AppName</string> <string moduleConfig="true" name="CodePushDeploymentKey">DeploymentKey</string> </resources>备注
如果需要动态使用不同的部署,还可以使用代码推送选项在 JS 代码中重写部署密钥*
用于响应本机低于 0.60 (Android) 的插件安装
为了容纳尽可能多的开发人员首选项,CodePush 插件通过两种机制支持 Android 安装:
RNPM - 对 本机程序包管理器进行响应 (RNPM)是一种非常丰富的工具,它提供了响应本机插件的最简单安装体验。 如果你已经在使用它,或想要使用它,则建议使用这种方法。
"手动" -如果您不想依赖任何其他工具或使用几个额外的安装步骤, (只需一次) ,就可以使用这种方法。
备注
由于响应本机存储库中的代码发生了更改,因此,如果已安装的响应本机版本范围从0.29 到0.32,我们建议遵循手动设置正确的步骤。
(Android 的插件安装-RNPM)
从0.27 响应的本机,已
rnpm link合并到响应本机 CLI。 运行:react-native link react-native-code-push如果应用使用的响应版本低于 v 0.27,请运行以下命令:
rnpm link react-native-code-push备注
如果尚未安装 RNPM,可以通过运行
npm i -g rnpm并执行上述命令来执行此操作。如果你使用的是 RNPM >= 1.6.0,系统将提示你输入要使用的部署密钥。 如果你还没有这样做,则可以通过运行来检索此值
appcenter codepush deployment list -a <ownerName>/<appName> --displayKeys,也可以选择通过点击) 来忽略 (,<ENTER>以后再添加它。 若要开始,建议使用Staging部署密钥,以便可以测试 CodePush 端到端。
这就是使用 RNPM 进行安装的方法! 继续下面到 " 插件配置 " 部分以完成设置。
(Android 的插件安装-手动)
在
android/settings.gradle文件中,进行以下添加:include ':app', ':react-native-code-push' project(':react-native-code-push').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-code-push/android/app')在
android/app/build.gradle文件中,将:react-native-code-push项目添加为编译时依赖项:... dependencies { ... compile project(':react-native-code-push') }在
android/app/build.gradle文件中,将该codepush.gradle文件作为其他生成任务定义添加到下面react.gradle:... apply from: "../../node_modules/react-native/react.gradle" apply from: "../../node_modules/react-native-code-push/android/codepush.gradle" ...
用于响应本机低于 0.60 (Android) 的插件配置
备注
如果使用了 RNPM 或 react-native link 自动链接插件,则已为你执行这些步骤,因此你可以跳过此部分。
安装插件并将 Android Studio 项目与 Gradle 同步后,需要将应用配置为在 CodePush 中检查你的 JS 包位置,因为它会 "控制" 管理当前和未来的所有版本。 为此,请按以下步骤操作:
对于响应本机 >= 0.29
如果要将 CodePush 集成到响应本机应用程序,请执行以下步骤:
MainApplication.java通过以下更改更新文件以使用 CodePush:
...
// 1. Import the plugin class.
import com.microsoft.codepush.react.CodePush;
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
...
// 2. Override the getJSBundleFile method to let
// the CodePush runtime determine where to get the JS
// bundle location from on each app start
@Override
protected String getJSBundleFile() {
return CodePush.getJSBundleFile();
}
@Override
protected List<ReactPackage> getPackages() {
// 3. Instantiate an instance of the CodePush runtime and add it to the list of
// existing packages, specifying the right deployment key. If you don't already
// have it, you can run "appcenter codepush deployment list -a <ownerName>/<appName> --displayKeys" to retrieve your key.
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new CodePush("deployment-key-here", MainApplication.this, BuildConfig.DEBUG)
);
}
};
}
如果要将 React Native集成到现有的本机应用程序中,请执行以下步骤:
更新 (在应用配置文件中以) 方式命名,以通过 MyReactActivity.java 以下更改使用 CodePush:
...
// 1. Import the plugin class.
import com.microsoft.codepush.react.CodePush;
public class MyReactActivity extends Activity {
private ReactRootView mReactRootView;
private ReactInstanceManager mReactInstanceManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
mReactInstanceManager = ReactInstanceManager.builder()
// ...
// Add CodePush package
.addPackage(new CodePush("deployment-key-here", getApplicationContext(), BuildConfig.DEBUG))
// Get the JS Bundle File via CodePush
.setJSBundleFile(CodePush.getJSBundleFile())
// ...
.build();
mReactRootView.startReactApplication(mReactInstanceManager, "MyReactNativeApp", null);
setContentView(mReactRootView);
}
...
}
对于 React Native v0.19 - v0.28
通过以下 更改更新 MainActivity.java 文件以使用 CodePush:
...
// 1. Import the plugin class (if you used RNPM to install the plugin, this
// should already be done for you automatically so you can skip this step).
import com.microsoft.codepush.react.CodePush;
public class MainActivity extends ReactActivity {
// 2. Override the getJSBundleFile method to let
// the CodePush runtime determine where to get the JS
// bundle location from on each app start
@Override
protected String getJSBundleFile() {
return CodePush.getJSBundleFile();
}
@Override
protected List<ReactPackage> getPackages() {
// 3. Instantiate an instance of the CodePush runtime and add it to the list of
// existing packages, specifying the right deployment key. If you don't already
// have it, you can run "appcenter codepush deployment list -a <ownerName>/<appName> --displayKeys" to retrieve your key.
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new CodePush("deployment-key-here", this, BuildConfig.DEBUG)
);
}
...
}
后台 React 实例
备注
本部分仅在未提供React Native的情况下显式启动 (,例如,从本机推送通知接收者 Activity) 。 对于这些情况,必须告知 CodePush 如何查找React Native实例。
若要更新/重启React Native,必须先使用 配置 CodePush,然后才能 ReactInstanceHolder 尝试在后台重启实例。 这在你的实现 Application 中完成。
对于 React Native >= v0.29
通过 MainApplication.java 以下更改更新文件以使用 CodePush:
...
// 1. Declare your ReactNativeHost to extend ReactInstanceHolder. ReactInstanceHolder is a subset of ReactNativeHost, so no additional implementation is needed.
import com.microsoft.codepush.react.ReactInstanceHolder;
public class MyReactNativeHost extends ReactNativeHost implements ReactInstanceHolder {
// ... usual overrides
}
// 2. Provide your ReactNativeHost to CodePush.
public class MainApplication extends Application implements ReactApplication {
private final MyReactNativeHost mReactNativeHost = new MyReactNativeHost(this);
@Override
public void onCreate() {
CodePush.setReactInstanceHolder(mReactNativeHost);
super.onCreate();
}
}
对于 React Native v0.19 - v0.28
在 v0.29 之前,React Native未提供 ReactNativeHost 抽象。 如果要启动后台实例,则很可能已生成自己的 实例,该实例现在应实现 ReactInstanceHolder 。 完成后:
// 1. Provide your ReactInstanceHolder to CodePush.
public class MainApplication extends Application {
@Override
public void onCreate() {
// ... initialize your instance holder
CodePush.setReactInstanceHolder(myInstanceHolder);
super.onCreate();
}
}
若要有效地使用我们建议随 CodePush 应用一起创建的 和 部署,请参阅下面的多部署测试文档,然后再实际将 Staging Production 应用的 CodePush使用情况迁移到生产环境。
Android (代码签名)
从 CLI 版本 2.1.0 开始,可以在发布期间对捆绑包进行自签名,在安装更新之前验证其签名。 有关代码签名详细信息,请参阅相关的 代码推送文档部分。 若要使用公钥进行代码签名,请执行以下步骤:
向添加 CodePushPublicKey 字符串项 /path_to_your_app/android/app/src/main/res/values/strings.xml 。 它可能如下所示:
<resources>
<string name="app_name">my_app</string>
<string name="CodePushPublicKey">-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtPSR9lkGzZ4FR0lxF+ZA
P6jJ8+Xi5L601BPN4QESoRVSrJM08roOCVrs4qoYqYJy3Of2cQWvNBEh8ti3FhHu
tiuLFpNdfzM4DjAw0Ti5hOTfTixqVBXTJPYpSjDh7K6tUvp9MV0l5q/Ps3se1vud
M1/X6g54lIX/QoEXTdMgR+SKXvlUIC13T7GkDHT6Z4RlwxkWkOmf2tGguRcEBL6j
ww7w/3g0kWILz7nNPtXyDhIB9WLH7MKSJWdVCZm+cAqabUfpCFo7sHiyHLnUxcVY
OTw3sz9ceaci7z2r8SZdsfjyjiDJrq69eWtvKVUpredy9HtyALtNuLjDITahdh8A
zwIDAQAB
-----END PUBLIC KEY-----</string>
</resources>
对于响应本机 <= v 0.60,应 CodePush 使用以下方法之一将实例配置为使用此参数
使用构造函数
new CodePush(
"deployment-key",
getApplicationContext(),
BuildConfig.DEBUG,
R.string.CodePushPublicKey)
使用生成器
new CodePushBuilder("deployment-key-here",getApplicationContext())
.setIsDebugMode(BuildConfig.DEBUG)
.setPublicKeyResourceDescriptor(R.string.CodePushPublicKey)
.build()
Windows 安装程序
获取 CodePush 插件后,需要将其集成到响应本机应用的 Visual Studio 项目中,并正确配置它。 为此,请采取以下步骤:
用于响应本机版本0.63.6 和更高版本 (Windows) 的插件安装和配置
(Windows 的插件安装-npx)
下载插件后, npx react-native autolink-windows 在应用程序的根目录中运行,将 CodePush c + + 项目自动添加到应用程序的 windows 解决方案文件中。
Windows) (插件配置
将位于以下位置的以下文件替换
windows/<app name>为此存储库中的 CodePushDemoAppCpp 示例应用中的文件Examples/CodePushDemoAppCpp/windows/CodePushDemoAppCpp:- app.config
- app.config
- app.xaml
在上述文件中,将的所有匹配项替换
CodePushDemoAppCpp为应用程序的名称在中的应用程序方法的顶部,将应用程序的应用版本和部署密钥输入到
configMap对象OnLaunched中App.cpp:
//...
void App::OnLaunched(activation::LaunchActivatedEventArgs const& e)
{
winrt::Microsoft::CodePush::ReactNative::CodePushConfig::SetHost(Host());
auto configMap{ winrt::single_threaded_map<hstring, hstring>() };
configMap.Insert(L"appVersion", L"1.0.0");
configMap.Insert(L"deploymentKey", L"<app deployment key>");
winrt::Microsoft::CodePush::ReactNative::CodePushConfig::Init(configMap);
//...
}
//...
用于响应本机低于 0.60 (Windows) 的插件安装和配置
Windows) (插件安装
打开位于应用内的 Visual Studio 解决方案
windows-legacy\<AppName>\<AppName>.sln右键单击窗口中的 "解决方案" 节点
Solution Explorer,然后选择Add -> Existing Project...菜单项
浏览到
node_modules\react-native-code-push\windows目录,选择文件,然后单击OK返回
Solution Explorer,右键单击以应用命名的项目节点,然后选择Add -> Reference...菜单项
选择
Projects左侧的选项卡,检查项CodePush,然后单击OK
Windows (插件)
安装插件后,需要将应用配置为检查 CodePush 中 JS 捆绑包的位置,因为它将"控制"管理当前版本和将来的所有版本。 为此,请通过以下更改更新文件 AppReactPage.cs 以使用 CodePush:
...
// 1. Import the CodePush namespace
using CodePush.ReactNative;
...
class AppReactPage : ReactPage
{
// 2. Declare a private instance variable for the CodePushModule instance.
private CodePushReactPackage codePushReactPackage;
// 3. Update the JavaScriptBundleFile property to initialize the CodePush runtime,
// specifying the right deployment key, then use it to return the bundle URL from
// CodePush instead of statically from the binary. If you don't already have your
// deployment key, you can run "appcenter codepush deployment list -a <ownerName>/<appName> --displayKeys" to retrieve it.
public override string JavaScriptBundleFile
{
get
{
codePushReactPackage = new CodePushReactPackage("deployment-key-here", this);
return codePushReactPackage.GetJavaScriptBundleFile();
}
}
// 4. Add the codePushReactPackage instance to the list of existing packages.
public override List<IReactPackage> Packages
{
get
{
return new List<IReactPackage>
{
new MainReactPackage(),
...
codePushReactPackage
};
}
}
...
}