AndroidのTWebBrowser(WebView)で基本認証(Basic Authentification、ベーシック認証)のWEBサイトを表示する ~Delphiでお手軽プログラミング
Delphiを起動して新規作成を行う
Delphiを起動し、ファイル→新規作成→マルチデバイスアプリケーションをクリックし、 空のアプリケーションを選択してOKボタンを押してプロジェクトを作成します。TButtonとTWebBrowserをフォームにドラッグ&ドロップします。
ターゲットプラットフォームをAndroid(実機をUSB接続している場合は実機)に切り替えます。
(以下の画像ではPixel 3a XLをダブルクリック)
すべて保存を押して、プロジェクトフォルダを作成してプロジェクトとユニットを保存します。

FMX.WebBrowser.Android.pasファイルをプロジェクトフォルダ内にコピーする
C:\Program Files (x86)\Embarcadero\Studio\20.0\source\fmx\FMX.WebBrowser.Android.pasファイルを、上記で保存したプロジェクトファイルと同じフォルダ内にコピーします。
FMX.WebBrowser.Android.pasファイルをプロジェクトに追加
プロジェクトに追加(Shift+F11)を押して、プロジェクトフォルダ内にコピーした「FMX.WebBrowser.Android.pas」ファイルを選択し、 [開く]ボタンを押します。ソースコードを記述する
Button1をダブルクリックしてソースコードを記述します。
procedure TForm1.Button1Click(Sender: TObject);
begin
WebBrowser1.Navigate('ベーシック認証があるURL');
end;
(例)WebBrowser1.Navigate('https://mam-mam.net/sec/');
参考:
AndroidのWebViewは、基本的にhttps(SSL/TLSが有効な)サイトを開くのが通常のようです。
http(SSL/TLS無効な)サイトを開く場合は、プロジェクトフォルダ内にある
AndroidManifest.template.xml
ファイルを編集して以下の赤文字の行を追加しましょう。
<application android:persistent="%persistent%"
android:restoreAnyVersion="%restoreAnyVersion%"
android:label="%label%"
android:debuggable="%debuggable%"
android:largeHeap="%largeHeap%"
android:icon="%icon%"
android:theme="%theme%"
android:hardwareAccelerated="%hardwareAccelerated%"
android:usesCleartextTraffic="true"
android:resizeableActivity="false">
FMX.WebBrowser.Android.pasの編集
実行ボタンを押して実機転送して実行して、Button1を押してもUnauthorizedエラーが発生するだけなので、 プロジェクトフォルダ内にコピーしたFMX.WebBrowser.Android.pasファイルを編集します。20行目のusesに, System.NetEncodingを追加します。
uses
System.Classes, System.Types, System.StrUtils, System.SysUtils, System.RTLConsts, Androidapi.JNI.Webkit,
AndroidApi.JNI.App, Androidapi.JNI.Embarcadero, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes,
Androidapi.JNIBridge, Androidapi.JNI.Os, Androidapi.JNI.Net, Androidapi.Helpers, Androidapi.JNI.Widget, FMX.Forms,
FMX.Helpers.Android, FMX.Graphics, FMX.Surfaces, FMX.ZOrder.Android, FMX.Platform, FMX.Platform.Android, FMX.WebBrowser, FMX.Types
, System.NetEncoding;
314行目あたりにあるTAndroidWebBrowserService.DoNavigate(const AURL: string)関数を編集します。
procedure TAndroidWebBrowserService.DoNavigate(const AURL: string); var NewURL: string; LFile: string; hm: JHashMap; hd:JMap; ba:string; begin NewURL := AURL; if Pos(TWebBrowser.FilesPref, AURL) <> 0 then begin LFile := Copy(AURL, length(TWebBrowser.FilesPref) + 1, length(AURL)); if not FileExists(LFile) then raise EFileNotFoundException.Create(SSpecifiedFileNotFound); NewURL := ReplaceStr(NewURL, TWebBrowser.FilesPref, TWebBrowser.FilesPref + '/'); end else if Pos('http', AURL) = 0 then Insert('http://', NewURL, 0); ba:='基本認証ユーザー名'+':'+'基本認証パスワード'; ba:=TNetEncoding.Base64.Encode(ba); hm:=TJHashmap.Create; hm.put( StringToJString('Authorization'), StringToJString('Basic '+ba) ); hd:=TJMap.Wrap((hm as ILocalObject).getObjectID); FWebView.loadUrl(StringToJString(NewURL),hd); ShouldStartLoading(NewURL); UpdateContentFromControl; end;(上記ba変数代入の例)ba:='user'+':'+'pass';

実行
実行ボタンを押すと、アプリが実機に転送され、アプリが実行されます。アプリが起動したら、Button1をタップすると、基本認証が設定されたページが開きます
