8.

Unity から Web ページを開く方法完全ガイド

編集
この記事の要点
  • Application.OpenURL("https://example.com") が標準的方法。iOS / Android / WebGL / Windows / Mac すべてで動作
  • 実行プラットフォームごとにデフォルトブラウザで開かれる。アプリ内で表示したいときは UniWebView 等のアセットを使う
  • WebGL ビルドでは新しいタブで開くため、ポップアップブロッカーに注意。クリックイベント由来でないとブロックされる
  • URL Scheme で他アプリを起動可能: twitter://user?screen_name=...mailto:tel: など
  • iOS のアプリ内ブラウザは SafariViewController ベースのアセットが推奨 (アプリ離脱なし)
  • ストアレビュー誘導は専用 URL Scheme + 各 OS のレビュー API (SKStoreReviewController) を併用

Application.OpenURL の基本

Unity 公式 API で最もシンプルに Web ページを開く方法。OS のデフォルトブラウザで指定 URL を開きます。

using UnityEngine;
using UnityEngine.UI;

public class WebOpener : MonoBehaviour {
    public Button openButton;

    void Start() {
        openButton.onClick.AddListener(() => {
            Application.OpenURL("https://example.com");
        });
    }
}

プラットフォーム別の挙動

プラットフォーム動作注意
Windows / macOSOS デフォルトブラウザで開く
iOSSafari (またはデフォルトブラウザ) で開く、アプリは背景化SafariViewController を使えばアプリ内表示
Androidデフォルトブラウザで開く、アプリは背景化Custom Tabs でアプリ内表示も
WebGL新しいタブで開く (target=_blank)ポップアップブロッカー注意
UWPEdge 等で開く

WebGL でのポップアップブロッカー対策

WebGL ビルドでは Application.OpenURL が JavaScript の window.open() に変換されます。ユーザのクリックイベント由来でない場合 (Update や Coroutine の途中) ポップアップブロッカーで止められます。

// ✗ ダメな例: ボタンクリックではなく自動で開く
void Start() {
    Application.OpenURL("https://example.com");  // ブロックされる
}

// ✓ OK な例: クリックイベント由来
public Button btn;
void Start() {
    btn.onClick.AddListener(() =>
        Application.OpenURL("https://example.com"));  // 通る
}

WebGL: 同じタブで開きたいとき

Application.OpenURL は新しいタブで開きますが、同じタブで遷移したいなら Application.ExternalEval で JS を直接実行します:

#if UNITY_WEBGL && !UNITY_EDITOR
    Application.ExternalEval("window.location.href = 'https://example.com';");
#else
    Application.OpenURL("https://example.com");
#endif

ExternalEval は非推奨化されつつあり、推奨は jslib プラグインを作って [DllImport("__Internal")] で呼ぶ方法です。

URL Scheme で他アプリを起動

HTTP/HTTPS 以外の URL でも OpenURL は使えます。これで他アプリを起動できます:

using UnityEngine;

public class Launcher : MonoBehaviour {
    public void OpenTwitter() {
        // インストール済なら Twitter アプリが起動、なければブラウザ
        Application.OpenURL("twitter://user?screen_name=unity3d");
    }

    public void SendMail() {
        Application.OpenURL("mailto:support@example.com?subject=お問い合わせ");
    }

    public void Call() {
        Application.OpenURL("tel:+819012345678");
    }

    public void OpenMap() {
        // iOS Apple Maps / Android Google Maps
        Application.OpenURL("https://maps.google.com/?q=Tokyo+Tower");
    }
}

ストアレビュー誘導

using UnityEngine;

public static class StoreReview {
    public static void OpenReview() {
#if UNITY_IOS
        // iOS App Store
        Application.OpenURL("itms-apps://itunes.apple.com/app/idXXXXXXXXX?action=write-review");
#elif UNITY_ANDROID
        // Google Play
        Application.OpenURL("market://details?id=com.example.game");
#else
        Application.OpenURL("https://example.com/download");
#endif
    }
}

iOS 10.3+ は SKStoreReviewController API でアプリ内レビューダイアログを出すのが推奨 (アプリ離脱なし、ただし表示頻度に制限あり)。

アプリ内ブラウザ (UniWebView)

Application.OpenURL はアプリを離脱してしまうため、UX 重視ならアプリ内 WebView を組み込みます。UniWebView は Unity Asset Store の人気アセット (有償):

using UnityEngine;

public class InAppBrowser : MonoBehaviour {
    private UniWebView webView;

    void Start() {
        webView = gameObject.AddComponent();
        webView.Frame = new Rect(0, 0, Screen.width, Screen.height);
        webView.OnPageFinished += (view, code, url) => {
            Debug.Log($"loaded: {url}");
        };
        webView.Load("https://example.com");
        webView.Show();
    }
}

無償の代替には Unity の WebView Foundation や、Vuplex Web View (有償) 等があります。Native の SafariViewController / Custom Tabs を Plugin で呼び出す自作も可能。

iOS / Android のディープリンクで戻ってくる

Web ページから自分のアプリに戻すには Universal Link (iOS) / App Link (Android) を設定し、Application.absoluteURL で受け取ります:

void Start() {
    Application.deepLinkActivated += OnDeepLink;

    // 起動時に既にディープリンク経由なら
    if (!string.IsNullOrEmpty(Application.absoluteURL)) {
        OnDeepLink(Application.absoluteURL);
    }
}

void OnDeepLink(string url) {
    Debug.Log($"deeplink: {url}");
    // myapp://room/abc を解析してシーン遷移など
}

セキュリティ注意点

  • ユーザ入力をそのまま OpenURL に渡さない — javascript: スキーム等で XSS 的な攻撃に
  • URL ホワイトリスト or プレフィックス検証 (StartsWith("https://")) を挟む
  • WebGL では iframe 埋め込み元と Origin が異なる場合、開けない URL がある

FAQ

Q: WebGL で同じタブで遷移したい
A: Application.ExternalEval("location.href=...") または jslib プラグイン。

Q: iOS でアプリを離脱させたくない
A: SafariViewController 系プラグイン (UniWebView 等) を使うか、Native Plugin を書く。

Q: Application.OpenURL が動かない
A: WebGL でクリックイベント外 / URL が javascript:〜 / Android のターゲット SDK 30+ で intent filter が必要、等を確認。

Q: クリックされた回数をトラッキングしたい
A: OpenURL の前に Analytics イベントを発火: Analytics.CustomEvent("url_clicked", ...)

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. スクリプトの作成と実行
  2. C# のクラス一覧
  3. シーンの移動方法
  4. オブジェクトの移動・回転
  5. キーボードの入力値を受け取る
  6. オブジェクトの取得とコンポーネントの取得
  7. 衝突時の処理
  8. Webページを開く
  9. コンポーネントの取得
  10. 処理を一定時間待つ
  11. コンソールへのログ出力方法
  12. 飛行機の加速と減速
  13. ジェットエンジンのエフェクトとオーディオ