APIキーをソース管理にチェックインせずに構成ファイルに保存し、UWPアプリのデータを読み取りたいと思います。
一般的な解決策は、キーを.configファイルに保存することです(app.config
またはweb.config
)次のようにアクセスします。
var apiKey = ConfigurationManager.AppSettings.Get("apiKey");
私はユニバーサルWindows(UWP)アプリで作業していますが、ConfigurationManager
を保持するSystem.Configuration名前空間にアクセスできません。
UWPアプリでAppSettingsにアクセスするにはどうすればよいですか?または、UWPアプリで構成データにアクセスする最良の方法は何ですか?
特定のユースケースでは、ソース管理によって追跡されない外部ファイルを使用する必要がありました。リソースまたは構成ファイルからデータにアクセスするには、2つの方法があります。
1つは、構成ファイルを開いて解析することです。与えられたファイルsample.txt
Build ActionContent
(出力ディレクトリにコピーは重要ではありません)、私たちはそれを読むことができます
var uri = new System.Uri("ms-appx:///sample.txt");
var sampleFile = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(uri);
または
var packageFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
var sampleFile = await packageFolder.GetFileAsync("sample.txt");
に続く
var contents = await Windows.Storage.FileIO.ReadTextAsync(sampleFile);
または、Resourcesを使用できます。 resourcesFile.resw
という新しいリソースアイテムをプロジェクトに追加します。データにアクセスするには、次を使用します。
var resources = new Windows.ApplicationModel.Resources.ResourceLoader("resourcesFile");
var token = resources.GetString("secret");
ブログの投稿でより詳細な回答を書きました WPのカスタムリソースファイル
「ApiKey」と呼ぶものは、APIがアクセストークンを生成するために提供する静的キーであると考えています。この場合、おそらくこれを達成するための最良の方法は、ソースコントロールから、その値を含む静的クラスを作成することです。
public static class MyCredentials
{
public static string MyApiKey = "apiKey";
}
次に、コードからその値に簡単にアクセスします。
var myApiKey = MyCredentials.MyApiKey;
代わりにプレーンテキストファイルに値を保存する場合は、StorageFile
およびFileIO
クラスを使用して手動で値を読み書きする必要があります。
代わりに、「ApiKey」がダイナミックアクセストークンを意味する場合、最適なソリューションはストラテバーが言うようにApplicationDataContainer
を使用することです。
それは古い質問ですが、ここで私の解決策:
-> #if DEBUG/#else/#endifを使用してデバッグ/リリースから切り替え-> Githubからexclude Config.partial.csを使用してリポジトリにインポートしない
コンパイルされてリポジトリにないようになりました。また、Config.csのデフォルト(シークレットではない)データに設定することもできます。
Config.cs:
public partial class Config
{
public Config()
{
Init();
}
partial void Init();
public string ApiKey{ get; private set; }= "DefaultValueAPIKEY";
}
Config.partial.cs
public partial class Config
{
partial void Init()
{
#if DEBUG
this.ApiKey = "DebugAPIKEY";
#else
this.ApiKey = "ReleaseAPIKEY";
#endif
}
}