| この記事の要点 |
|
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 / macOS | OS デフォルトブラウザで開く | — |
| iOS | Safari (またはデフォルトブラウザ) で開く、アプリは背景化 | SafariViewController を使えばアプリ内表示 |
| Android | デフォルトブラウザで開く、アプリは背景化 | Custom Tabs でアプリ内表示も |
| WebGL | 新しいタブで開く (target=_blank) | ポップアップブロッカー注意 |
| UWP | Edge 等で開く | — |
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<UniWebView>();
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", ...)。
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09