Xamarin OneDriveからテキストファイルを取得する

参考ページ https://docs.microsoft.com/ja-jp/graph/tutorials/xamarin

Microsoft Graph 用のアプリの登録

アプリの登録

  • 「Azure Active Directory 管理センター」を開く
  • サイドメニューの「Azure Active Directory」をクリック
  • 「既定のディレクトリ」のサイドメニュー「アプリの登録」をクリック
  • 「新規登録」をクリック
  • 名前を付ける
  • 「サポートされているアカウントの種類」で以下をチェック
    任意の組織ディレクトリ内のアカウント (任意の Azure AD ディレクトリ – マルチテナント) と個人の Microsoft アカウント (Skype、Xbox など)
  • 登録をクリック

リダイレクト URI を追加

  • 「リダイレクト URI を追加する」→「+プラットフォームを追加」
  • 「モバイル アプリケーションとデスクトップ アプリケーション」
  • 「 リダイレクト URI 」の「 msal{Your Apprication Client ID}://auth (MSAL のみ) 」をチェック

アプリケーション (クライアント) ID の取得

  • 登録したアプリの「アプリケーション (クライアント) ID」をコピーする

Microsoft Graphの認証(GraphClientを使用)

  • 「モバイル アプリ(Xamarin.Forms)」プロジェクトを作成する

NuGetで以下のパッケージをインストールする
 Microsoft.Identity.Client
 Microsoft.Graph

  • フィールドの作成(例:MainPage)
private GraphServiceClient graphClient;
// UIParent used by Android version of the app
public static object AuthUIParent = null;
 

GraphClientの取得

ApplicationIdの部分にコピーした「アプリケーション (クライアント) ID」を入力する

var builder = PublicClientApplicationBuilder.Create(ApplicationId);
IPublicClientApplication PCA = builder.Build();

string[] Scopes = new string[] {"Files.ReadWrite" };

try
{
    var accounts = await PCA.GetAccountsAsync();
    var silentAuthResult = await PCA
        .AcquireTokenSilent(Scopes, accounts.FirstOrDefault())
        .ExecuteAsync();
}
catch (MsalUiRequiredException msalEx)
{
    var interactiveRequest = PCA.AcquireTokenInteractive(Scopes);
    if (AuthUIParent != null)
    {
        interactiveRequest = interactiveRequest
            .WithParentActivityOrWindow(AuthUIParent);
    }
    var interactiveAuthResult = await interactiveRequest.ExecuteAsync();
}
catch (Exception ex)
{
    //
}

var currentAccounts = await PCA.GetAccountsAsync();
graphClient = new GraphServiceClient(new DelegateAuthenticationProvider(
    async (requestMessage) =>
    {
        var result = await PCA.AcquireTokenSilent(Scopes, currentAccounts.FirstOrDefault())
            .ExecuteAsync();

        requestMessage.Headers.Authorization =
            new AuthenticationHeaderValue("Bearer", result.AccessToken);
    }));
 

Androidアプリの調整

AndroidManifest.xmlの修正

  • ソリューションエクスプローラーで「アンドロイドプロジェクト」の「Properties」にある「AndroidManifest.xml」を開く
  • <application>ノードの子要素として以下のコードを追加する
    YOUR_APP_ID_HEREの部分を「アプリケーション (クライアント) ID」に書き換える
<activity android:name="microsoft.identity.client.BrowserTabActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="msalYOUR_APP_ID_HERE" android:host="auth" />
    </intent-filter>
</activity>
 
  • 「Android」プロジェクトの「MainActivity.cs」を開き、次のコードを追加する
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
    base.OnActivityResult(requestCode, resultCode, data);
    AuthenticationContinuationHelper
        .SetAuthenticationContinuationEventArgs(requestCode, resultCode, data);
}
 
  • 「Android」プロジェクト「MainActivity.cs」のOnCreateの末尾に次のコードを追加する
    (LoadApplication(new App());の後)
    ※ MainPageにAuthUIParent フィールドを作成した場合
MainPage.AuthUIParent = this;
 

OneDrive内のテキストファイルを取得する

string filePath = "/Documents/MyData/test.txt";
var stream = await GraphClient
                    .Me
                    .Drive
                    .Root
                    .ItemWithPath(filePath)
                    .Content
                    .Request()
                    .GetAsync();
string value = "";
using (var reader = new StreamReader(stream))
{
    value = reader.ReadToEnd();
}
 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください