Posted at

UnityとUniWebViewとAndroidのバックボタンと

More than 3 years have passed since last update.

最近のネイティブアプリによくあるお知らせ画面にWebViewを使うことは多々あると思います。

自分は$20(UniWebView2)を使っています。

最近AndroidのBackButtonとの連携で引っかかったのでメモ代わりに。

UniWebView2を使用している画面でバックボタンを押すと基本的には現在開いているWebページの前ページに遷移します。

ただ今回やりたいのはバックボタンを押すことでUniWebView2の終了かつ使用している画面も閉じるようにしたいということです。

結論から言うと、Assets/UniWebView/Scripts/UniWebView.csを修正しました。

この中にあるprivate void WebViewDone(string message)の中身を一旦コメントアウトして、

別途にこちらで使用しているメソッドを呼び出すようにしてます。


UniWebView.cs

    private void WebViewDone(string message) {

/*
// 一旦元のCodeをコメントアウト
bool destroy = true;
if (OnWebViewShouldClose != null) {
destroy = OnWebViewShouldClose(this);
}
if (destroy) {
Hide();
Destroy(this);
}
*/
#if UNITY_ANDROID
// 独自に用意したバックボタンハンドラ
BackHandler.Invoke();
#endif
}

この「WebViewDone」が呼び出されているタイミングはバックボタンが押された時のみにしか呼び出されている様子が無かったので今回はこういう対応で済ませました。

UniWebViewのPlugin側の挙動はソースコード読んでいる感じだと、

1.キーが押される

2.UniWebViewDialog.java内のOnKeyDownが呼ばれる

3.OnKeyDown内で押されたキーが「backkey」かどうかで処理を判断

4.backkey以外なら通常処理へ

5.backkeyならWebViewのCanGoback()を見て、GoBack()出来るようであればGoBack()させる

※GoBack():一つ前のページに戻る

6.GoBack()出来ないようであれば、Unity側のWebViewDone()がコールバックされる

という感じでした。

WebViewDone()がこの条件(BackKeyが押され+GoBack出来ない)でしか呼び出されないので、

とりあえずこの対応で問題ないかなと思います。


なかなかUniWebView2に関する記事が少ないので同じようなところでつまづいている人の役に立てれば…

そもそももっと使いやすく拡張しやすいWebViewをUnity側が用意s(ry