Xamarin.Forms セキュリティで保護されたストレージに値を保存

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();

タイトルとURLをコピーしました