[Xamarin] Microsoft Graph를 Xamarin.Forms에 추가하기

2016. 10. 28. 13:33Mobile/Xamarin

이 포스트는 https://blog.xamarin.com/using-graph-sdk-xamarin-forms-mobile-apps/를 번역한 자료입니다. 이 자료를 활용함으로써 발생하는 모든 책임은 본인에게 있으며 원저작자에 의해 언제든지 내용이 수정되거나 삭제될 수 있음을 알려드립니다.

Microsoft Graph는 메일, 연락처, 캘린더, 파일 등 다양한 서비스를 위한 통합된 API End Point를 제공합니다.
Microsoft Graph의 사용을 가능한한 쉽게하기 위해서 Microsoft는 Graph SDK를 공개하였습니다.

이전 포스트에서 HttpClient를 통해 Microsoft Graph를 사용하는 모바일 앱개발에 대해 다루었습니다. Microsoft Graph SDK를 통해 Microsoft Graph에 상호작용하는 모바일 앱 개발에 대해 배워보도록 하겠습니다.

Step1: Register App

일단 개발자는 Azure Portal에 모바일 앱을 등록하는 것이 필요합니다. 지난 업데이트와 함께  https://apps.dev.microsoft.com에서 앱을 등록하는 것이 가능해졌습니다. App an app을 클릭하신 후 앱이름을 입력하고 Create application을 클릭해주세요.

앱이 생성되면 App ID를 기록해두세요. 이제 사용자와 우리의 앱을 위해 권한을 요청할 시간입니다. 이 샘플에서는 사용자에게 권한을 부여하는 절차에 대해 초점을 맞추겠습니다.

Step2: Authenticate

Activie Dictory에 대해 사용자를 인증하기 위해 Microsoft Authentication Library (MSAL)을 사용하도록 하겠습니다. 먼저 Scope 등 필요한 변수들을 App.cs에 선언함하도록 합시다.

public static PublicClientApplication IdentityClientApp = null;
public static string ClientID = "3b1def2e-5b4e-413d-9a96-b8d8e9776029";
public static string[] Scopes = {
                        "https://graph.microsoft.com/Calendars.Read",
                        "https://graph.microsoft.com/Contacts.Read",
                        "https://graph.microsoft.com/User.Read"
                         };
public App()
{
   IdentityClientApp = new PublicClientApplication(ClientID);
   MainPage = new HomePage();
}

AuthenticationHelper.cs는 AccessToken을 조회하여 요청을 인증하는 Helper Class입니다.

graphClient = new GraphServiceClient(
         "https://graph.microsoft.com/v1.0",
         new DelegateAuthenticationProvider(
         async (requestMessage) =>
         {
            var token = await GetTokenForUserAsync();
            requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", token);
          }));
return graphClient;

Step3: Graph API사용하기

Graph SDK를 이용하는 것은 상당히 직관적입니다. 아래코드는 캘린더와 연락처를 포함한 사용자의 정보를 조회하는 코드입니다.

var graphClient = AuthenticationHelper.GetAuthenticatedClient();
 
var me = await graphClient.Me.Request().GetAsync();
UserName.Text = me.DisplayName;
UserRole.Text = me.JobTitle;
UserOffice.Text = me.OfficeLocation;
 
var calendar = await graphClient.Me.Calendar.Events.Request().GetAsync();
var evnt = calendar.FirstOrDefault();
EventsTitle.Text = evnt.Subject;
EventDate.Text = evnt.Start.DateTime.ToString();
 
var contacts = await graphClient.Me.Contacts.Request().GetAsync();
var contact = contacts.FirstOrDefault();
ContactName.Text = contact.DisplayName;
ContactEmail.Text = contact.EmailAddresses.FirstOrDefault().Address;

각 플랫폼마다 인증을 진행하는 사용자 경험이 다르지만 CustomRendere를 통하면 IPlatformParameters를 각각 전달할 수 있을 것입니다.

Wrapping Up

Microsoft Graph SDK는 .NET Application에서 Graph API를 쉽게 이용할 수 있도록 해줍니다. Microsoft Graph SDK를 통해서 이메일, 연락처, 캘린더, 파일 등의 사용자 정보를 우리의 앱에 보다 쉽게 추가할 수 있도록 도와줍니다. 완전한 샘플내용은 여기에서 확인하실 수 있으며, SDK는 여기에서 확인하실 수 있습니다.