我有一个内置于 Expo 的 React Native 应用程序,可连接到 Rest API。其余 api 共有三种环境 - dev、uat 和 production,如下(示例)。
dev = https://dev.myapi.com/api
uat = https://uat.myapi.com/api
prod = https://prod.myapi.com/api
根据应用的使用位置,它需要连接到正确的环境。
Running in the Expo Client = Dev API
Running in TestFlight or Internal Testing for the Play Store = UAT API
Running in the App Store or Play Store = Production API
实现这一目标的最简单方法是什么?
答案 0 :(得分:1)
按照以下步骤操作
安装 expo-constants 包。要安装包,请运行以下命令。
npm i expo-constants
添加 environment.js 文件并粘贴下面的代码。
import Constants from "expo-constants";
import { Platform } from "react-native";
const localhost =
Platform.OS === "ios" ? "localhost:8080" : "10.0.2.2:8080";
const ENV = {
dev: {
apiUrl: "https://dev.myapi.com/api",
amplitudeApiKey: null,
},
staging: {
apiUrl: "https://uat.myapi.com/api",
amplitudeApiKey: "[Enter your key here]",
// Add other keys you want here
},
prod: {
apiUrl: "https://prod.myapi.com/api",
amplitudeApiKey: "[Enter your key here]",
// Add other keys you want here
}
};
const getEnvVars = (env = Constants.manifest.releaseChannel) => {
// What is __DEV__ ?
// This variable is set to true when react-native is running in Dev mode.
// __DEV__ is true when run locally, but false when published.
if (__DEV__) {
return ENV.dev;
} else if (env === 'staging') {
return ENV.staging;
} else if (env === 'prod') {
return ENV.prod;
}
};
export default getEnvVars;
// Import getEnvVars() from environment.js
import getEnvVars from '../environment';
const { apiUrl } = getEnvVars();
/******* SESSIONS::LOG IN *******/
// LOG IN
// credentials should be an object containing phone number:
// {
// "phone" : "9876342222"
// }
export const logIn = (credentials, jsonWebToken) => (
fetch(`${apiUrl}/phone`, {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + jsonWebToken,
'Content-Type': 'application/json',
},
body: JSON.stringify(credentials)
})
);
开发 - expo build:ios --release-channel dev
分期 - expo build:ios --release-channel 分期
生产 - expo build:ios --release-channel prod
现在 Expo 支持配置文件为 app.config.js 或 app.config.ts,我们可以使用 dotenv。检查这个:https://docs.expo.io/guides/environment-variables/#using-a-dotenv-file