tafuji's blog

C#, Xamarin, Azure DevOps を中心に書いています。

Xamarin.Essentials 入門 - #5 ブラウザ

はじめに

Xamarin.Essentials のブラウザを開く機能について記載します。この API を利用することで、アプリケーションから Web のリンクを開くことができるようになります。

使ってみよう

使い方

Xamarin.Essentials のブラウザを開く機能は、Browser クラスで提供されており、文字通りブラウザーを起動することができます。

// ブラウザ起動モードを指定して、起動する
await Browser.OpenAsync(uri, BrowserLaunchMode.SystemPreferred);

// オプションを指定指定して、起動する
await Browser.OpenAsync(uri, new BrowserLaunchOptions
{
    LaunchMode = BrowserLaunchMode.SystemPreferred,
    TitleMode = BrowserTitleMode.Show,
    PreferredToolbarColor = Color.AliceBlue,
    PreferredControlColor = Color.Violet
});

BrowserLaunchMode の挙動の違いは、以下の通りです。UWP ではこの列挙体を指定しても、既定のブラウザがアプリ外で起動します。

# プラットフォーム SystemPreferred External
1 iOS SFSafariViewController を利用してアプリ内でブラウザを開く 既定のブラウザをアプリ外で起動する
2 Android Chrome Custome Tabs を利用して、アプリ内でブラウザを開く 既定のブラウザをアプリ外で起動する
3 UWP 既定のブラウザがアプリの外側で起動する 既定のブラウザがアプリの外側で起動する

BrowserLaunchOptions を利用する場合、起動モードが、SystemPreferred のときのみ有効になるのですが、ブラウザを開くときのオプションを指定することができます。

await Browser.OpenAsync(uri, new BrowserLaunchOptions
{
    LaunchMode = BrowserLaunchMode.SystemPreferred,
    TitleMode = BrowserTitleMode.Show,
    PreferredToolbarColor = Color.AliceBlue,
    PreferredControlColor = Color.Violet
});

オプションは、プラットフォームによってはサポートされない場合があります。

# プロパティ 説明 iOS Android UWP
1 TitleMode タイトルを表示するかどうかを指定する。BrowserTitleMode 列挙値(Default, Show, Hide) No Yes No
2 PreferredToolbarColor ツールバーの色を指定する Yes Yes No
3 PreferredControlColor コントロールの色を指定する Yes No No

それぞれのオプションの値の説明を次に記載します。

TitleMode (Android のみ)

ページのタイトルの表示、非表示を設定します。TitleMode による表示の違いは以下の通りです。

Default Show Hide
Default Show Hide

PreferredToolbarColor (iOS, Android)

ツールバーの色を設定することができます。以下の例は、ツールバーの色を Blue に設定したときのものです。

iOS Android
PreferredToolbarColor-iOS PreferredToolbarColor-Android

PreferredControlColor (iOS のみ)

コントロールの色を指定することができます。以下の例は、赤を設定したときの例です。

PreferredControlColor

読んでみよう

Browser のコードを読んでプラットフォーム固有の処理を見ていきます。

iOS

アプリ内部でブラウザを起動する場合は、SFSafariViewController のオブジェクトを作って、UIViewController.PresentViewControllerAsync に渡しています。アプリ外部でブラウザを起動する場合は、Launcher を利用していることが分かります。

OpenBrowser-iOS

Android

アプリ内部でブラウザを起動する場合は、CustomTabsIntent を利用して、LaunchUrl を呼び出してブラウザを起動してます。アプリ外部でブラウザを起動する場合には、Launcher と同等の処理を実行しています。(スクリーンショットは省略)

OpenBrowser-Android

UWP

Windows.System.Launcher クラスの LaunchUriAsync メソッドを利用して URL を開いていることが分かります。

OpenBrowser-UWP

まとめ

  • Xamarin.Essentials の Browser は、文字通りブラウザを開くための API
  • アプリ内部と外部で開くことができる(UWP は外部ブラウザのみ)
  • アプリ内部
    • iOS
      • SFSafariViewController を利用して、ブラウザ起動時のオプション指定
      • UIViewController. PresentViewControllerAsync で開く
    • Android
      • CustomTabsIntent でオプションの設定をして、LaunchUrl を起動する
      • CustomTabsIntent クラスは、deprecated
  • アプリ外部
    • Launcher とほぼ同等の処理

参考