개발노트

16. [.NET MAUI] SecureStorage 사용하기(기기에 Key 값 저장) 본문

앱 개발/.NET MAUI

16. [.NET MAUI] SecureStorage 사용하기(기기에 Key 값 저장)

mroh1226 2022. 4. 26. 15:59
반응형

SecureStorage 를 사용하면 App 종료 후, 다시 실행했을 때 값을 다시 불러올 수 있다.

데이터 베이스를 거치지않고 값을 불러올 수 있기 때문에 다양한 기능들을 구현 할 수 있다.

 

- 참고링크: https://docs.microsoft.com/en-us/dotnet/api/xamarin.essentials.securestorage?view=xamarin-essentials 

 

SecureStorage Class (Xamarin.Essentials)

Provides simple secure storage for key/value pairs.

docs.microsoft.com

 

위와 같이 자마린에서는 Xamarin.Essentials를 참조하여 가능하고, MAUI에서는 Microsoft.maui.Essentials 참조로 기능을 사용할 수 있다.

MAUI 참조

 

SecureStorage로 App이 종료된 뒤, 다시 실행했을 때, 전에 입력한 Entry Text 값을 확인하는 버튼을 구현해본다.


1. ViewModel에 아래와 같이 커맨드를 작성해준다.

 

- btn_Submit은 버튼을 클릭했을 때, SecureStorage에 키를 저장하는 Command

- btn_Show는 버튼을 클릭했을 때, SecureStorage의 키에 저장된 값을 불러오는 Command

 

Page30_ViewModel.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using AppMaui.Services;
using Microsoft.Maui;


namespace AppMaui.ViewModels
{
    internal class Page30_ViewModel : Notify
    {
        public ICommand btn_Submit { get; set; }
        public ICommand btn_Show { get; set; }
        public string _Answer { get; set; }
        public Page30_ViewModel()
        {

        }
        public Page30_ViewModel(INavigation navigation)
        {
            
            btn_Submit = new Command(async() =>
            {
                //SecureStorage에 "answer"라는 Key 저장
                await SecureStorage.SetAsync("answer", Answer);
            }, 
            () =>
            {
                return true;
            });

            btn_Show = new Command(async () =>
            {
                //SecureStorage의 "answer"라는 Key의 값을 불러옴
                string s = await SecureStorage.GetAsync("answer");
                await App.Current.MainPage.DisplayAlert("이전답변", s ,"OK");
            },
            () =>
            {
                return true;
            });
        }



        public string Answer
        {
            get => _Answer;
            set
            {
                if(_Answer != value)
                {
                    _Answer = value;
                    OnPropertyChanged("Answer");
                }
            }
        }

        
    }
}

1) SecureStorage에 값 저장하기

await SecureStorage.SetAsync("키 이름", "저장 값");

 

2) SecurStorage에 저장된 값 불러오기

await SecureStorage.GetAsync("키 이름");

 


2. 마크업 소스에는 특별히 설명할게 없다.

Page30.xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="AppMaui.Page30"
             Title="Page30"
             BackgroundColor="White">

    <NavigationPage.TitleView>
        <Label Text="Page30"/>
    </NavigationPage.TitleView>
    
    <StackLayout>
        <Label Text="1 + 1 =?" FontSize="Title"
                VerticalOptions="CenterAndExpand" 
                HorizontalOptions="CenterAndExpand" />
        
        <Entry x:Name="Entry1" HorizontalOptions="CenterAndExpand" 
               VerticalOptions="StartAndExpand" Text="{Binding Answer}" Scale="5"/>
        
        <Button Command="{Binding btn_Submit}" Text="답안 제출"/>
        <Button Command="{Binding btn_Show}" Text="이전 답안"/>
    </StackLayout>
</ContentPage>

 


3. View와 ViewModel를 바인딩해준다.

Page.xaml.cs
using AppMaui.ViewModels;
namespace AppMaui;

public partial class Page30 : ContentPage
{
	public Page30()
	{
		InitializeComponent();
		BindingContext = new Page30_ViewModel(Navigation);
	}
}

4. 빌드된 모습

App 재실행 후 테스트

 

반응형
Comments