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 |
---|---|---|
PreferredToolbarColor (iOS, Android)
ツールバーの色を設定することができます。以下の例は、ツールバーの色を Blue に設定したときのものです。
iOS | Android |
---|---|
PreferredControlColor (iOS のみ)
コントロールの色を指定することができます。以下の例は、赤を設定したときの例です。
読んでみよう
Browser のコードを読んでプラットフォーム固有の処理を見ていきます。
iOS
アプリ内部でブラウザを起動する場合は、SFSafariViewController
のオブジェクトを作って、UIViewController.PresentViewControllerAsync
に渡しています。アプリ外部でブラウザを起動する場合は、Launcher を利用していることが分かります。
Android
アプリ内部でブラウザを起動する場合は、CustomTabsIntent
を利用して、LaunchUrl
を呼び出してブラウザを起動してます。アプリ外部でブラウザを起動する場合には、Launcher と同等の処理を実行しています。(スクリーンショットは省略)
UWP
Windows.System.Launcher
クラスの LaunchUriAsync
メソッドを利用して URL を開いていることが分かります。
まとめ
- Xamarin.Essentials の Browser は、文字通りブラウザを開くための API
- アプリ内部と外部で開くことができる(UWP は外部ブラウザのみ)
- アプリ内部
- アプリ外部
- Launcher とほぼ同等の処理