dart - 遵循最佳实践在 flutter 中存储 API key 的正确方法

标签 dart flutter

如果我想在 github 上推送代码,在 flutter 中添加 secret API key 的正确方法是(最佳实践)。我制作了一个使用 API 的简单应用程序,但我以粗鲁的方式使用 key 只是为了测试应用程序是否正常工作。通常根据我在后端开发应用程序的经验, key 存储在某个地方和不同的文件中,然后只需将其导入需要 API_KEY 的所需文件并排除 中的文件。 .gitignore 文件。

到目前为止,我也实现了这种方法:

文件夹树

-lib
  -auth
    -keys.dart
    -secrets.json 

secrets.json

我将在此处添加 KEY 并在 .gitignore 中指定此文件,以便在我推送时从添加到 github 中排除我的代码。

//Add API KEY HERE
{
  "api_key": "ee4444444a095fc613c5189b2"
}

keys.dart

import 'dart:async' show Future;
import 'dart:convert' show json;
import 'package:flutter/services.dart' show rootBundle;


class Secret {
  final String apikey;

  Secret({this.apikey=""});

  factory Secret.fromJson(Map<String, dynamic>jsonMap){
    return new Secret(apikey:jsonMap["api_key"]);
  }
}


class SecretLoader {
  final String secretPath;

  SecretLoader({this.secretPath});
  Future<Secret> load() {
    return rootBundle.loadStructuredData<Secret>(this.secretPath,
            (jsonStr) async {
          final secret = Secret.fromJson(json.decode(jsonStr));
          return secret;

        });
  }
}

我觉得这种方法太过分了。我想得到更好的方法的建议。

最佳答案

编辑:看看下面 J. Saw 的评论。

编辑 2:底部描述的问题已在 firebase-config 19.0.2 中得到修复。

使用 Firebase Remote Config. 在 Firebase 控制台的菜单中,向下滚动到 Grow,然后是 Remote Config。在这里您可以添加一个带值的参数。完成后不要忘记发布更改。这有点微妙。

enter image description here

现在安装 firebase_remote_config对于 flutter 。

导入所有内容后,您可以使用以下代码检索您的值:

RemoteConfig remoteConfig = await RemoteConfig.instance;
await remoteConfig.fetch(expiration: Duration(hours: 1));
await remoteConfig.activateFetched();

remoteConfig.getValue('key').asString();

这样,API key 或 token 永远不会成为您应用程序的一部分。

注意:目前有一个 issue您会收到一条警告,说明未设置应用程序的名称,但这不会影响功能。

关于dart - 遵循最佳实践在 flutter 中存储 API key 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51895194/

相关文章:

android - Flutter 应用程序中 firebase 数据库上的 ValueEventListener

list - Flutter动态更新日期和时间

dart - 无法添加 audio_service 包。需要指导

android - 提取Json后无法刷新ListView

firebase - 我们如何在 Firebase/firestore 上运行多个查询来获取 flutter 中的过滤数据?

Dart 流 : get next value without duplication

flutter - 如何在 flutter quill 编辑器中设置字符限制

专栏中的 Flutter 2 Streambuilder

dart - 如何编写返回字符串的内联函数?

testing - Flutter Mockito 验证传递给小部件的回调被调用