はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】iOSにてgree/unity-webviewで表示している画像を長押ししてもメニュー(画像を保存したり共有したり)が開かないようにする方法

はじめに

今回はiOS(Safari)でgree/unity-webviewを利用して表示した画像に対して保存・共有といったことが可能にならないようにメニューを開かせないように設定する方法を紹介したいと思います。

github.com

やり方

-webkit-touch-calloutというcssを適応させることで実現できます。

developer.mozilla.org

どうやってやるのかというとgree/unity-webviewの場合はWebViewObject.EvaluateJSを利用します。
github.com

webViewObject.EvaluateJS("document.documentElement.style.webkitTouchCallout='none';")

ただしコンテンツが表示された後に実行しないといけないのに、WebViewObject.Initにて以下のように設定してあげる必要があります。

private void Start()
{
    var webViewObject = new GameObject("WebViewObject").AddComponent<WebViewObject>();

    // 初期化
    webViewObject.Init(
        // NOTE: iOSでUIWebViewではなくWKWebViewを利用する(現在はほぼ必須な設定項目だと思ってもらえれば)
        enableWKWebView: true,
        ld: x =>
            {
                // 長押しによるメニュー表示をさせないようにする
                webViewObject.EvaluateJS("document.documentElement.style.webkitTouchCallout='none';");
            });
        
    // URLを読み込みWebViewを表示する
    webViewObject.SetVisibility(true);
    webViewObject.LoadURL("https://www.google.co.jp/");
}

おまけ

仮に今回の対応をしなかった場合、iOS上で画像を保存しようとするとInfo.plistNSPhotoLibraryAddUsageDescriptionを記述しないとクラッシュしてしまいます。

NSPhotoLibraryAddUsageDescriptionを記述する

developer.apple.com

これを設定してあげると画像を保存しようとしたときに許可のダイアログが表示され、クラッシュしないようになります。