如果我想将代码推送到github上,这是在flutter中添加秘密API密钥的正确方法(最佳实践)。我已经制作了一个使用API的简单应用程序,但是我以粗鲁的方式使用了该密钥,只是为了测试该应用程序是否正常工作。通常,根据我在后端开发应用程序的经验,密钥存储在某个位置和其他文件中,然后将其简单地导入到需要的所需文件中,API_KEY并将文件中的.gitignore文件排除在外。
到目前为止,我还实现了这种方法:
-lib
-auth
-keys.dart
-secrets.json
Run Code Online (Sandbox Code Playgroud)
在这里,我将添加,KEY并.gitignore在推送代码时指定此文件被排除在github中之外。
//Add API KEY HERE
{
"api_key": "ee4444444a095fc613c5189b2"
}
Run Code Online (Sandbox Code Playgroud)
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;
});
}
}
Run Code Online (Sandbox Code Playgroud)
我觉得这种方法太多了。我希望获得更好方法的建议。
Noo*_*les 14
编辑:看看下面 J. Saw 的评论。
编辑 2:底部描述的问题已在firebase-config 19.0.2.
使用在 Firebase 控制台内的菜单内,向下滚动到Firebase Remote Config. Grow,然后Remote Config。您可以在此处添加带有值的参数。完成后不要忘记发布更改。这有点微妙。
现在为 Flutter安装firebase_remote_config。
导入所有内容后,您可以使用以下代码检索您的值:
RemoteConfig remoteConfig = await RemoteConfig.instance;
await remoteConfig.fetch(expiration: Duration(hours: 1));
await remoteConfig.activateFetched();
remoteConfig.getValue('key').asString();
Run Code Online (Sandbox Code Playgroud)
这样,API 密钥或令牌永远不会成为您的应用程序的一部分。
注意:当前存在一个问题,您会收到一条警告,指出未设置应用程序的名称,但这不会影响功能。
如前所述,如果密钥是秘密并且您想保护它,那么就不要将其放在客户端应用程序中。该应用程序可以被反编译,并且可以为愿意瞄准您的客户的人提取密钥。
我会将与此 API 通信的任务委托给您的应用程序服务器。您可以将密钥放入服务器中,让服务器与此外部 API 进行通信,并将响应转发给客户端。
编辑:另一种不太安全但更方便的方法是使用 proguard 之类的东西来混淆代码。有关 android 应用程序上的 flutter 指令,请参阅此页面:https://flutter.io/android-release/
| 归档时间: |
|
| 查看次数: |
3769 次 |
| 最近记录: |