Xamarin.Formsでセキュリティで保護されたストレージに値を保存する方法についてです。
Xamarin.Essentialsを使うことで実現できます。
手順は以下のとおりです
1.「Xamarin.Essentials」がパッケージにインストールされていない場合は共通プロジェクト、Androidプロジェクト、iOSプロジェクトそれぞれにnugetから追加
2.Androidプロジェクト内、AndroidManifest.xmlをソースコードエディタで開き、下記のようにバックアップ設定の無効化を追加
<manifest ... >
...
<application android:allowBackup="false" ... >
...
</application>
</manifest>
アプリ全体のバックアップ設定を無効化したくない場合は
<manifest ... >
...
<application ...
android:fullBackupContent="@xml/auto_backup_rules">
</application>
</manifest>
と、auto_backup_rules.xmlという名前の新しいXmlファイルをResources/xmlディレクトリに作成し、
<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
<include domain="sharedpref" path="."/>
<exclude domain="sharedpref" path="${applicationId}.xamarinessentials.xml"/>
</full-backup-content>
作成後ファイルを右クリック>ビルドアクションからAndroidResourceを選択
3.iOSプロジェクト内のEntitlements.plistを開き、「Keychainを有効にする」にチェック
4.iOSのプロジェクトフォルダを選択し、VisualStudioのメニューのプロジェクト>[プロジェクト名].iOSオプション> [iOS バンドル署名] で、[カスタムエンタイトルメント]をEntitlements.plistに設定
5.usingを追加
using Xamarin.Essentials;
6.保存処理
try
{
await SecureStorage.SetAsync("key", "value");
}
catch (Exception ex)
{
// デバイスがSecureStorage未サポート
}
7.値取得処理
try
{
var value = await SecureStorage.GetAsync("key");
}
catch (Exception ex)
{
// デバイスがSecureStorage未サポート
}
特定のキーの値を削除するには
SecureStorage.Remove("key");
全てのキーの値を削除するには
SecureStorage.RemoveAll();