この記事について
UnityでiOSアプリを開発していると、外部リンク(Safari・Twitter・LINEなど)を開きたい場面があります。
その際に使うのが Application.OpenURL() ですが、実はこれだけでは不十分なケースがあります。
この記事では、iOSのネイティブ機能を使って「Safari」「Twitter」などを自然に開けるようにするネイティブプラグイン実装手順を紹介します。
この記事で分かること
- UnityのApplication.OpenURL()を使わない理由
- iOSのネイティブ機能を利用するプラグインの導入方法
- .mmファイルの作成方法(コピペOK)
- Unityからネイティブ関数を呼び出すC#コード(そのまま使えます)
なぜUnityのOpenURLでは不十分?
Unity標準の Application.OpenURL() でもURLを開くことは可能です。
しかし、次のような制限があります。
制限内容 | 詳細 |
---|---|
アプリ連携不可 | TwitterやLINEなどのアプリ起動ができない |
フォールバック処理なし | アプリが未インストールでもエラーハンドリングができない |
対応ブラウザが限定的 | 基本的にSafariしか開けない |
本投稿を実装しているアプリが以下の「Cube Linkage」です。

iOSのURL操作を実現するネイティブプラグインの作成
Objective-Cの「.mm」ファイルの保存場所
ネイティブプラグインを使用するためにはObject-Cで書く必要があります。
以下の場所に「.mm」ファイルを作成して、保存すると自動的に読み込まれるので作成していきましょう。
・「Assets」→「Plugins」→「iOS」

Objective-Cの「.mm」ファイルを作成(Safari・Twitter対応)
以下のコードを「.mm」ファイルとして保存します。
ファイル名は自由ですが、例として OpenURLPlugin.mm とします。
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
extern "C" {
// Safariを開く
void OpenSafari(const char* url) {
NSString *nsUrl = [NSString stringWithUTF8String:url];
NSURL *nsURL = [NSURL URLWithString:nsUrl];
if ([[UIApplication sharedApplication] canOpenURL:nsURL]) {
[[UIApplication sharedApplication] openURL:nsURL options:@{} completionHandler:nil];
}
}
// Twitterアプリを開く(フォールバックでSafari)
void OpenTwitter(const char* username) {
NSString *twitterURL = [NSString stringWithFormat:@"twitter://user?screen_name=%@", [NSString stringWithUTF8String:username]];
NSString *safariURL = [NSString stringWithFormat:@"https://twitter.com/%@", [NSString stringWithUTF8String:username]];
NSURL *appURL = [NSURL URLWithString:twitterURL];
NSURL *webURL = [NSURL URLWithString:safariURL];
if ([[UIApplication sharedApplication] canOpenURL:appURL]) {
[[UIApplication sharedApplication] openURL:appURL options:@{} completionHandler:nil];
} else {
[[UIApplication sharedApplication] openURL:webURL options:@{} completionHandler:nil];
}
}
}
Unityからネイティブプラグインを呼び出す方法(C#側)
以下のスクリプトは「.mm」ファイルのプラグインに対してUnity側での制御を行っていきます。保存場所は任意の場所です。
using System.Runtime.InteropServices;
using UnityEngine;
public class OpenURLPlugin : MonoBehaviour
{
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
private static extern void OpenSafari(string url);
[DllImport("__Internal")]
private static extern void OpenTwitter(string username);
#endif
public static void OpenInSafari(string url)
{
#if UNITY_IOS && !UNITY_EDITOR
OpenSafari(url);
#else
Application.OpenURL(url); // 他のプラットフォームは普通に開く
#endif
}
public static void OpenTwitterProfile(string username)
{
#if UNITY_IOS && !UNITY_EDITOR
OpenTwitter(username);
#else
Application.OpenURL($"https://twitter.com/{username}");
#endif
}
}
スクリプトをボタンにアタッチして実装
まずは、1つの空のGameObjectと2つのButtonを用意します。GameObjectにOpenURLPluginをアタッチして、2つのButtonのOnClickに設定します。
※今回はTwitterボタンでネイティブアプリをSafariで本ブログの紹介ページを開いてみます。



実行してみると、Safariとネイティブアプリでそれぞれ開けることがわかりましたね。
投稿者はホームページをSafari、Twitterをネイティブアプリで開くようにしています。
まとめ
方法 | 対応 | 特徴 |
---|---|---|
Application.OpenURL() | Safariのみ | 簡単だが制限あり |
.mm + C# 連携 | Safari + 各アプリ対応 | ネイティブ連携で自然な動作 |
canOpenURL() | アプリ有無をチェック | UXの高いフォールバック対応 |