Blazor 하이브리드의 플랫폼 기능 액세스

완료됨

.NET을 사용하여 하이브리드 앱을 빌드하고 있습니다. 즉, 모든 .NET 클래스 라이브러리에 액세스할 수 있습니다. 이러한 API 외에도 .NET MAUI로 Blazor 하이브리드 앱을 빌드하면 여러 플랫폼에 배포할 수 있을 뿐만 아니라 각 플랫폼의 네이티브 API에 액세스할 수도 있습니다. 즉, iOS, Android, macOS 또는 Windows의 플랫폼 기능을 통합해야 하는 경우 C#에서 모두 수행할 수 있습니다. Blazor 구성 요소에서 직접 이러한 API에 액세스하거나 공유 .NET MAUI 클래스 라이브러리를 만들 수 있습니다.

플랫폼 통합

.NET MAUI가 지원하는 각 플랫폼은 C#에서 액세스할 수 있는 플랫폼 API와 고유한 운영 체제를 제공합니다. .NET MAUI는 센서에 대한 액세스, 앱이 실행되고 있는 디바이스에 대한 정보 액세스, 네트워크 연결 확인, 안전한 데이터 저장 및 브라우저 기반 인증 흐름 시작 등 이 플랫폼 기능의 대부분에 액세스할 수 있는 플랫폼 간 API를 제공합니다.

.NET MAUI는 이러한 플랫폼 간 API를 다양한 기능 영역으로 구분합니다.

  • 애플리케이션 모델: 앱 작업, 애플리케이션 정보, 브라우저 열기, URI 열기, 맵 열기, 권한 처리 및 버전 추적을 포함한 앱 기능
  • 통신: 연락처, 메일, 네트워킹, 전화 걸기, sms 메시징 및 웹 인증에 대한 액세스
  • 디바이스 기능: 배터리, 디스플레이 정보, 장치 정보, 센서, 손전등, 지오코딩, 지리적 위치, 햅틱 피드백 및 진동에 대한 정보와 액세스
  • 미디어: 미디어 선택기, 스크린샷, 텍스트 음성 변환, 단위 변환기 포함
  • 공유: 클립보드에 대한 액세스 및 다른 애플리케이션에 대한 파일 또는 텍스트 공유 포함
  • 스토리지: 파일, 파일 시스템 도우미, 기본 설정 및 보안 스토리지를 선택하기 위한 API

애플리케이션이 디바이스에서 인터넷 액세스를 사용할 수 있는지 감지해야 하는 경우 Microsoft.Maui.NetworkingConnectivity API를 사용할 수 있습니다.

var accessType = Connectivity.Current.NetworkAccess;
if (accessType is NetworkAccess.Internet)
{
    // Connection to internet is available
}

액세스 플랫폼 API

.NET MAUI 플랫폼 관련 기능을 사용하면 특정 플랫폼에서만 사용할 수 있는 특정 기능을 사용할 수 있습니다. 자세한 내용은 Android 플랫폼 관련, iOS 플랫폼 관련Windows 플랫폼 관련을 참조하세요.

.NET MAUI가 특정 플랫폼 API에 액세스하기 위한 API를 제공하지 않는 경우 필요한 플랫폼 API에 액세스하기 위해 사용자 고유의 코드를 작성할 수 있습니다. 자세한 내용은 플랫폼 코드 호출을 참조하세요.

조건부 컴파일을 사용하여 여러 플랫폼을 대상으로 플랫폼 간 코드에서 플랫폼 코드를 호출할 수 있습니다.

다음 예에서는 디바이스의 방향을 지정하는 데 사용하는 DeviceOrientation 열거형을 보여줍니다.

namespace InvokePlatformCodeDemos.Services
{
    public enum DeviceOrientation
    {
        Undefined,
        Landscape,
        Portrait
    }
}

디바이스 방향을 검색하려면 플랫폼 코드를 작성해야 합니다. 이 작업은 조건부 컴파일을 통해 다른 플랫폼을 대상으로 하는 메서드를 작성하여 수행할 수 있습니다.

#if ANDROID
using Android.Content;
using Android.Views;
using Android.Runtime;
#elif IOS
using UIKit;
#endif

using InvokePlatformCodeDemos.Services;

namespace InvokePlatformCodeDemos.Services.ConditionalCompilation
{
    public class DeviceOrientationService
    {
        public DeviceOrientation GetOrientation()
        {
#if ANDROID
            IWindowManager windowManager = Android.App.Application.Context.GetSystemService(Context.WindowService).JavaCast<IWindowManager>();
            SurfaceOrientation orientation = windowManager.DefaultDisplay.Rotation;
            bool isLandscape = orientation == SurfaceOrientation.Rotation90 || orientation == SurfaceOrientation.Rotation270;
            return isLandscape ? DeviceOrientation.Landscape : DeviceOrientation.Portrait;
#elif IOS
            UIInterfaceOrientation orientation = UIApplication.SharedApplication.StatusBarOrientation;
            bool isPortrait = orientation == UIInterfaceOrientation.Portrait || orientation == UIInterfaceOrientation.PortraitUpsideDown;
            return isPortrait ? DeviceOrientation.Portrait : DeviceOrientation.Landscape;
#else
            return DeviceOrientation.Undefined;
#endif
        }
    }
}

.NET MAUI 앱 프로젝트에는 .NET MAUI가 대상으로 지정할 수 있는 플랫폼을 나타내는 각 자식 폴더가 있는 플랫폼 폴더가 포함되어 있습니다. 각 대상 플랫폼 폴더에는 각 플랫폼에서 앱을 시작하는 플랫폼 관련 코드와 사용자가 추가하는 기타 플랫폼 코드가 포함됩니다. 빌드 시 빌드 시스템에는 특정 플랫폼을 빌드할 때 각 폴더의 코드만 포함됩니다. 예를 들어 Android용으로 빌드할 때 플랫폼>Android 폴더의 파일은 앱 패키지에 빌드되지만 다른 플랫폼 폴더의 파일은 빌드되지 않습니다. 이 방법은 멀티 타기팅이라는 기능을 사용하여 단일 프로젝트의 여러 플랫폼을 대상으로 합니다. 멀티 타기팅을 partial 클래스 및 부분 메서드와 결합하여 플랫폼 간 코드에서 플랫폼 기능을 호출할 수 있습니다.

다음 연습에서는 .NET API와 .NET MAUI API의 조합을 사용하여 할 일 목록을 저장하고 로드합니다.