Microsoft Intune 앱 SDK Xamarin 바인딩
중요
Xamarin.Forms는 .NET MAUI(다중 플랫폼 앱 UI)로 발전했습니다. 기존 Xamarin 프로젝트는 .NET MAUI로 마이그레이션해야 합니다. Xamarin 프로젝트를 .NET으로 업그레이드하는 방법에 대한 자세한 내용은 Xamarin에서 .NET으로 업그레이드 & .NET MAUI 설명서를 참조하세요.
Xamarin 지원은 Xamarin.Forms 및 Intune 앱 SDK Xamarin 바인딩을 포함한 모든 Xamarin SDK에 대해 2024년 5월 1일 현재 종료되었습니다. Android 및 iOS 플랫폼에서의 Intune 지원은 .NET MAUI용 Intune 앱 SDK - Android및 MAUI.iOS용 Microsoft Intune 앱 SDK를 참조하세요.
개요
Intune 앱 SDK Xamarin 바인딩을 사용하면 xamarin으로 빌드된 iOS 및 Android 앱에서 Intune 앱 보호 정책을 사용할 수 있습니다. 이 바인딩을 통해 개발자는 Intune 앱 보호 기능을 Xamarin 기반 앱에 쉽게 빌드할 수 있습니다.
Microsoft Intune 앱 SDK Xamarin 바인딩을 사용하면 Intune 앱 보호 정책(APP 또는 MAM 정책이라고도 함)을 Xamarin으로 개발된 앱에 통합할 수 있습니다. MAM 지원 애플리케이션은 Intune 앱 SDK와 통합된 애플리케이션입니다. IT 관리자는 Intune에서 앱을 적극적으로 관리할 때 모바일 앱에 앱 보호 정책을 배포할 수 있습니다.
지원되는 항목은 무엇인가요?
개발자 컴퓨터
- Windows(Visual Studio 버전 15.7 이상)
- macOS
모바일 앱 플랫폼
- Android
- iOS
Intune 모바일 애플리케이션 관리 시나리오
- Intune MAM
- Intune MDM 등록 디바이스
- 타사 EMM 등록 디바이스
Intune 앱 SDK Xamarin 바인딩으로 빌드된 Xamarin 앱은 이제 Intune MDM(모바일 디바이스 관리) 등록된 디바이스와 등록되지 않은 디바이스 모두에서 Intune 앱 보호 정책을 받을 수 있습니다.
필수 구성 요소
사용 조건을 검토합니다. 레코드에 대한 사용 조건의 복사본을 인쇄하고 유지합니다. Intune 앱 SDK Xamarin 바인딩을 다운로드하고 사용하면 이러한 사용 조건에 동의합니다. 동의하지 않는 경우 소프트웨어를 사용하지 마세요.
Intune SDK는 Microsoft Entra ID로 앱을 구성해야 하는 인증 및 조건부 시작 시나리오에 MSAL(Microsoft 인증 라이브러리)을 사용합니다.
애플리케이션이 이미 MSAL을 사용하도록 구성되어 있고 Microsoft Entra ID로 인증하는 데 사용되는 고유한 사용자 지정 클라이언트 ID가 있는 경우 Xamarin 앱에 MAM(모바일 애플리케이션 관리) 서비스에 대한 권한을 부여하는 단계가 수행되는지 확인합니다. Intune SDK 시작 가이드의 "앱에 Intune 모바일 앱 관리 서비스에 대한 액세스 권한 부여" 섹션의 지침을 사용합니다.
보안 고려 사항
잠재적인 스푸핑, 정보 공개 및 권한 상승 공격을 방지하려면 다음을 수행합니다.
- 보안 워크 스테이션에서 Xamarin 앱 개발이 수행되는지 확인합니다.
- 바인딩이 유효한 Microsoft 원본인지 확인합니다.
- MS Intune 앱 SDK NuGet 프로필
- Intune 앱 SDK Xamarin GitHub 리포지토리
- 프로젝트가 서명되고 수정되지 않은 NuGet 패키지를 신뢰하도록 NuGet 구성을 구성합니다. 자세한 내용은 서명된 패키지 설치 를 참조하세요.
- Xamarin 앱이 포함된 출력 디렉터리를 보호합니다. 출력에 사용자 수준 디렉터리를 사용하는 것이 좋습니다.
iOS 모바일 앱에서 Intune 앱 보호 정책 사용
중요
Intune은 Intune 앱 SDK에 대한 업데이트를 정기적으로 릴리스합니다. 정기적으로 Intune 앱 SDK Xamarin 바인딩에서 업데이트를 확인하고 소프트웨어 개발 릴리스 주기에 통합하여 앱이 최신 앱 보호 정책 설정을 지원하는지 확인합니다.
Microsoft.Intune.MAM.Xamarin.iOS NuGet 패키지를 Xamarin.iOS 프로젝트에 추가합니다.
Intune 앱 SDK를 iOS 모바일 앱에 통합하는 데 필요한 일반적인 단계를 따릅니다. iOS용 Intune 앱 SDK 개발자 가이드에서 통합 지침의 3단계로 시작할 수 있습니다. 이 도구는 Microsoft.Intune.MAM.Xamarin.iOS 패키지에 포함되어 있으며 빌드 시 자동으로 실행되므로 IntuneMAMConfigurator 실행의 해당 섹션에서 마지막 단계를 건너뛸 수 있습니다. 중요: 앱에 대해 키 집합 공유를 사용하도록 설정하는 것은 Visual Studio에서 Xcode와 약간 다릅니다. 앱의 권한 plist를 열고 "키 집합 사용" 옵션이 활성화되어 있고 해당 섹션에 적절한 키 집합 공유 그룹이 추가되었는지 확인합니다. 그런 다음, 모든 적절한 구성/플랫폼 조합에 대한 프로젝트의 "iOS 번들 서명" 옵션의 "사용자 지정 권한" 필드에 권한 plist가 지정되어 있는지 확인합니다.
바인딩이 추가되고 앱이 제대로 구성되면 앱에서 Intune SDK의 API 사용을 시작할 수 있습니다. 이렇게 하려면 다음 네임스페이스를 포함해야 합니다.
using Microsoft.Intune.MAM;
앱 보호 정책 수신을 시작하려면 앱이 Intune MAM 서비스에 등록해야 합니다. 앱이 MSAL( Microsoft 인증 라이브러리 )을 사용하여 사용자를 인증하지 않고 Intune SDK가 인증을 처리하도록 하려면 앱에서 사용자의 UPN을 IntuneMAMEnrollmentManager의 LoginAndEnrollAccount 메서드에 제공해야 합니다.
IntuneMAMEnrollmentManager.Instance.LoginAndEnrollAccount([NullAllowed] string identity);
호출 시 사용자의 UPN을 알 수 없는 경우 앱이 null로 전달될 수 있습니다. 이 경우 사용자에게 전자 메일 주소와 암호를 모두 입력하라는 메시지가 표시됩니다.
앱이 이미 MSAL을 사용하여 사용자를 인증하는 경우 앱과 Intune SDK 간에 SSO(Single Sign-On) 환경을 구성할 수 있습니다. 먼저 Intune SDK에서 사용하는 기본 Microsoft Entra 설정을 앱의 설정으로 재정의해야 합니다. iOS용 Intune 앱 SDK 개발자 가이드에 설명된 대로 앱의 Info.plist에서 IntuneMAMSettings 사전을 통해 수행하거나 IntuneMAMSettings 클래스의 Microsoft Entra ID 재정의 속성을 통해 코드에서 수행할 수 있습니다. Info.plist 접근 방식은 MSAL 설정이 정적인 애플리케이션에 권장되는 반면, 런타임에 해당 값을 결정하는 애플리케이션에는 재정의 속성이 권장됩니다. 모든 SSO 설정이 구성되면 앱은 성공적으로 인증된 후 사용자의 UPN을 IntuneMAMEnrollmentManager의 RegisterAndEnrollAccount 메서드에 제공해야 합니다.
IntuneMAMEnrollmentManager.Instance.RegisterAndEnrollAccount(string identity);
앱은 IntuneMAMEnrollmentDelegate의 하위 클래스에서 EnrollmentRequestWithStatus 메서드를 구현하고 IntuneMAMEnrollmentManager의 Delegate 속성을 해당 클래스의 인스턴스로 설정하여 등록 시도의 결과를 확인할 수 있습니다.
성공적으로 등록되면 앱은 다음 속성을 쿼리하여 등록된 계정의 UPN(이전에 알 수 없는 경우)을 확인할 수 있습니다.
string enrolledAccount = IntuneMAMEnrollmentManager.Instance.EnrolledAccount;
Android 모바일 앱에서 Intune 앱 보호 정책 사용
-
Microsoft.Intune.MAM.Xamarin.Android NuGet 패키지를 Xamarin.Android 프로젝트에 추가합니다.
- Xamarin.Forms 앱의 경우 Microsoft.Intune.MAM.Remapper.Tasks NuGet 패키지를 Xamarin.Android 프로젝트에도 추가합니다.
- 자세한 내용은 이 문서를 참조 하는 동안 Intune 앱 SDK 를 Android 모바일 앱에 통합하는 데 필요한 일반적인 단계를 수행합니다.
Xamarin.Android 통합
Intune 앱 SDK 통합에 대한 전체 개요는 Android용 Microsoft Intune 앱 SDK 개발자 가이드에서 찾을 수 있습니다. 가이드를 읽고 Intune 앱 SDK를 Xamarin 앱과 통합할 때 다음 섹션은 Java에서 개발된 네이티브 Android 앱의 구현과 C#에서 개발된 Xamarin 앱 간의 차이점을 강조하기 위한 것입니다. 이러한 섹션은 보완 섹션으로 취급되어야 하며 가이드 전체를 읽는 대신 사용할 수 없습니다.
다시 매핑
1.4428.1 릴리스 Microsoft.Intune.MAM.Remapper
부터 패키지를 빌드 도구 로 Xamarin.Android 애플리케이션에 추가하여 MAM 클래스, 메서드 및 시스템 서비스 교체를 수행할 수 있습니다. Remapper가 포함된 경우 이름이 바뀐 메서드 및 MAM 애플리케이션 섹션의 MAM 동등한 대체 부분은 애플리케이션이 빌드될 때 자동으로 수행됩니다.
Remapper에서 MAM 통합에서 클래스를 제외하려면 프로젝트 .csproj
파일에 다음 속성을 추가할 수 있습니다.
<PropertyGroup>
<ExcludeClasses>Semicolon separated list of relative class paths to exclude from MAM-ification</ExcludeClasses>
</PropertyGroup>
참고
Remapper는 현재 Xamarin.Android 앱에서 디버깅을 방지합니다. 애플리케이션을 디버그하려면 수동 통합을 사용하는 것이 좋습니다.
이름이 바뀐 메서드
대부분의 경우 Android 클래스에서 사용할 수 있는 메서드가 MAM 대체 클래스에서 최종으로 표시되었습니다. 이 경우 MAM 대체 클래스는 대신 재정의해야 하는 유사한 이름의 메서드(접미사가 MAM
붙는)를 제공합니다. 예를 들어 에서 MAMActivity
파생되는 경우 를 재정의하고 호출 base.OnCreate()
Activity
하는 OnCreate()
대신 를 재정 OnMAMCreate()
의하고 를 호출base.OnMAMCreate()
해야 합니다.
MAM 애플리케이션
앱에서 클래스를 Android.App.Application
정의해야 합니다. MAM을 수동으로 통합하는 경우 에서 MAMApplication
상속해야 합니다. 서브클래스가 특성으로 [Application]
올바르게 데코레이트되고 생성자를 재정의 (IntPtr, JniHandleOwnership)
하는지 확인합니다.
[Application]
class TaskrApp : MAMApplication
{
public TaskrApp(IntPtr handle, JniHandleOwnership transfer)
: base(handle, transfer) { }
참고
MAM Xamarin 바인딩과 관련된 문제로 인해 디버그 모드로 배포할 때 애플리케이션이 충돌할 수 있습니다. 해결 방법으로 특성을 클래스에 Debuggable=false
Application
추가해야 하며 android:debuggable="true"
수동으로 설정된 경우 매니페스트에서 플래그를 제거해야 합니다.
앱 참여가 필요한 기능 사용
예: 앱에 PIN이 필요한지 확인
MAMPolicyManager.GetPolicy(currentActivity).IsPinRequired;
예: 기본 Intune 사용자 확인
IMAMUserInfo info = MAMComponents.Get<IMAMUserInfo>();
return info?.PrimaryUser;
예: 디바이스 또는 클라우드 스토리지에 저장이 허용되는지 확인
MAMPolicyManager.GetPolicy(currentActivity).GetIsSaveToLocationAllowed(SaveLocation service, String username);
SDK에서 알림 등록
앱을 만들고 MAMNotificationReceiver
에 등록하여 SDK에서 알림을 등록 MAMNotificationReceiverRegistry
해야 합니다. 이 작업은 아래 예제와 같이 수신자와 에서 App.OnMAMCreate
원하는 알림 유형을 제공하여 수행됩니다.
public override void OnMAMCreate()
{
// Register the notification receivers
IMAMNotificationReceiverRegistry registry = MAMComponents.Get<IMAMNotificationReceiverRegistry>();
foreach (MAMNotificationType notification in MAMNotificationType.Values())
{
registry.RegisterReceiver(new ToastNotificationReceiver(this), notification);
}
...
MAM 등록 관리자
IMAMEnrollmentManager mgr = MAMComponents.Get<IMAMEnrollmentManager>();
Xamarin.Forms 통합
애플리케이션의 경우 Xamarin.Forms
패키지는 Microsoft.Intune.MAM.Remapper
일반적으로 사용되는 Xamarin.Forms
클래스의 클래스 계층 구조에 클래스를 삽입하여 MAM
MAM 클래스 교체를 자동으로 수행합니다.
참고
Xamarin.Forms 통합은 위에서 자세히 설명한 Xamarin.Android 통합 외에도 수행해야 합니다. Remapper는 Xamarin.Forms 앱에 대해 다르게 작동하므로 수동 MAM 교체는 계속 수행해야 합니다.
프로젝트에 Remapper가 추가되면 MAM 동등한 대체를 수행해야 합니다. 예를 들어 및 FormsAppCompatActivity
FormsApplicationActivity
는 및 에 대한 재정 OnCreate
의를 제공된 애플리케이션에서 계속 사용할 수 있으며 OnResume
각각 MAM 등가물 OnMAMCreate
및 OnMAMResume
로 바뀝니다.
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnMAMCreate(Bundle savedInstanceState)
{
base.OnMAMCreate(savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App());
}
교체를 수행하지 않으면 교체를 수행할 때까지 다음과 같은 컴파일 오류가 발생할 수 있습니다.
-
컴파일러 오류 CS0239. 이 오류는 일반적으로 이 형식
'MainActivity.OnCreate(Bundle)': cannot override inherited member 'MAMAppCompatActivityBase.OnCreate(Bundle)' because it is sealed
으로 표시됩니다. 이는 Remapper가 Xamarin 클래스의 상속을 수정할 때 특정 함수가 만들어sealed
지고 대신 재정의하기 위해 새 MAM 변형이 추가되기 때문입니다. -
컴파일러 오류 CS0507: 이 오류는 일반적으로 이 형식
'MyActivity.OnRequestPermissionsResult()' cannot change access modifiers when overriding 'public' inherited member ...
으로 표시됩니다. Remapper가 일부 Xamarin 클래스의 상속을 변경하면 특정 멤버 함수가 로public
변경됩니다. 이러한 함수를 재정의하는 경우 해당 재정의에 대한 액세스 한정자도 변경해야 합니다public
.
참고
Remapper는 Visual Studio에서 IntelliSense 자동 완성에 사용하는 종속성을 다시 작성합니다. 따라서 변경 내용을 올바르게 인식하려면 IntelliSense에 대한 Remapper가 추가될 때 프로젝트를 다시 로드하고 다시 빌드해야 할 수 있습니다.
문제 해결
- 시작 시 애플리케이션에서 빈 흰색 화면이 발생하면 기본 스레드에서 탐색 호출을 강제로 실행해야 할 수 있습니다.
- Intune SDK Xamarin 바인딩은 MvvmCross와 Intune MAM 클래스 간의 충돌로 인해 MvvmCross와 같은 플랫폼 간 프레임워크를 사용하는 앱을 지원하지 않습니다. 일부 고객은 앱을 일반 Xamarin.Forms로 이동한 후 통합에 성공했을 수 있지만 MvvmCross를 사용하는 앱 개발자를 위한 명시적 지침이나 플러그 인은 제공하지 않습니다.
회사 포털 앱
Intune SDK Xamarin 바인딩은 앱 보호 정책을 사용하도록 설정하기 위해 디바이스에 회사 포털 Android 앱이 있는지를 사용합니다. 회사 포털은 Intune 서비스에서 앱 보호 정책을 검색합니다. 앱이 초기화되면 정책 및 코드를 로드하여 회사 포털에서 해당 정책을 적용합니다. 사용자가 로그인할 필요가 없습니다.
참고
회사 포털 앱이 Android 디바이스에 없는 경우 Intune 관리 앱은 Intune 앱 보호 정책을 지원하지 않는 일반 앱과 동일하게 작동합니다.
디바이스 등록이 없는 앱 보호의 경우 사용자는 회사 포털 앱을 사용하여 디바이스를 등록할 필요가 없습니다 .
지원
조직이 기존 Intune 고객인 경우 Microsoft 지원 담당자와 협력하여 지원 티켓을 열고 GitHub 문제 페이지에서 문제를 만드세요. 우리는 가능한 한 빨리 도울 것입니다.