有谁知道如何在应用程序内切换 Firebase 项目/环境,假设您有一个包含不同开发 URL 的下拉菜单。我们不是在谈论不同的构建,这对我们不起作用,并且需要将多个版本发送到 TestFlight。
我们在这里找到了一段代码。
final options = FirebaseOptions.from({});
final firebaseApp = await FirebaseApp.configure(name: 'some_app_name', options: options);
Run Code Online (Sandbox Code Playgroud)
但我们不知道如何使用它,也不知道它是否能正常工作。
编辑
当我写这篇文章时,它还没有得到官方支持。现在是了。
小智 6
我处理多个环境的方法 - 使用多个项目和一个.env文件来确定使用哪个。
flutterfire configure
Run Code Online (Sandbox Code Playgroud)
mv android/app/google-services.json android/app/google-services-<env>.json
mv ios/firebase_app_id_file.json ios/firebase_app_id_file-<env>.json
mv lib/firebase_options.dart lib/firebase_options_<env>.dart
Run Code Online (Sandbox Code Playgroud)
对于您需要的每个环境,重复步骤 1-2。
.env::# Set choose environment. Options: production, stage, etc...
ENVIRONMENT=production
Run Code Online (Sandbox Code Playgroud)
.env到pubspec.yamlflutter:
assets:
- .env
Run Code Online (Sandbox Code Playgroud)
main.dart以导入环境配置,并且flutter_dotenv:主要.dart:
import 'firebase_options_prod.dart' as prod;
import 'firebase_options_stage.dart' as stage;
import 'package:flutter_dotenv/flutter_dotenv.dart';
Run Code Online (Sandbox Code Playgroud)
.env以下行:主要.dart:
await dotenv.load(fileName: '.env');
Run Code Online (Sandbox Code Playgroud)
ENVIRONMENT:主要.dart:
await Firebase.initializeApp(
options:
dotenv.env['ENVIRONMENT'] == 'stage' ? stage.DefaultFirebaseOptions.currentPlatform :
prod.DefaultFirebaseOptions.currentPlatform);
Run Code Online (Sandbox Code Playgroud)
以下是main()全文:
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await dotenv.load(fileName: '.env');
try {
await Firebase.initializeApp(
options:
dotenv.env['ENVIRONMENT'] == 'stage' ? stage.DefaultFirebaseOptions.currentPlatform :
prod.DefaultFirebaseOptions.currentPlatform);
} catch(exception) {
if(exception is FirebaseException && exception.code == 'duplicate-app') {
debugPrint("Did you forget to recompile the Runner app, after changing environments?");
}
rethrow;
}
runApp(const MyApp());
}
Run Code Online (Sandbox Code Playgroud)
注意添加的try/catch/rethrow。我添加这个是因为当你改变环境时,你不能热启动。您需要重新编译运行器应用程序。如果您不这样做,然后更改环境,Firebase 会抛出如下错误:
Unhandled Exception: [core/duplicate-app] A Firebase App named "[DEFAULT]" already exists
Run Code Online (Sandbox Code Playgroud)
所以我想要一个简单的提醒我为什么会看到这个错误。
| 归档时间: |
|
| 查看次数: |
3662 次 |
| 最近记录: |