iOS対応

【Unity×iOS】URLを開くネイティブプラグインの作り方|Safari・Twitter対応【コピペでOK】

UnityでiOSアプリを作っていると、SafariでWebページを開いたり、Twitterのプロフィールに飛ばしたりしたくなる場面は多いですよね。
この記事では、コピペで簡単に使えるiOSネイティブプラグインのコード付きで、UnityからURLを開く方法を完全解説します!

この記事で分かること

  • UnityのApplication.OpenURL()を使わない理由
  • iOSのネイティブ機能を利用するプラグインの導入方法
  • .mmファイルの作成方法(コピペOK)
  • Unityからネイティブ関数を呼び出すC#コード(そのまま使えます)

なぜUnityのOpenURLでは不十分?

Unity標準のApplication.OpenURL()でもURLを開けますが、次のような制限があります:

  • TwitterやLINEなどのアプリ起動ができない
  • アプリの有無チェックやフォールバック処理ができない
  • 開けるのは基本Safariのみ

iOSユーザーに自然な体験を提供したいなら、ネイティブコードでの対応がベストです。

本投稿を実装しているアプリが以下の「Cube Linkage」です。

Cube Linkage
Cube Linkage
開発元:Wamutai
posted withアプリーチ

UnityでiOSのURL操作を実現するネイティブプラグインの作成

Objective-C++の.mmファイルの保存場所

この構成にすれば、UnityがiOSビルド時に自動でネイティブコードを取り込んでくれます。
※ 投稿者はmmファイルの作成時にメモ帳で作成し、そのあとに拡張子を変更しています。この画面と同じアイコンになっていないとうまくいっていない可能性があるので注意してください。

【コピペOK】Objective-C++の.mmファイルを作成してURLを開く

OpenURLPlugin.mm(Safari・Twitter対応)

このコードはそのままコピペで使用可能。SafariとTwitterのURLオープンに両対応しています。

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

extern "C" {

// SafariでURLを開く
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#側)

OpenURLPlugin.cs(コピペで使える)

このスクリプトの保存場所はScriptフォルダで問題ありません。

using UnityEngine;

public class URLClick : MonoBehaviour
{
    public void URL_Click(string URL)
    {
        OpenURLPlugin.OpenInSafari(URL);
    }

    public void Twitter(string TwitterUsername)
    {
        OpenURLPlugin.OpenTwitterProfile(TwitterUsername);
    }
}

このスクリプトを作成したら後は、ButtonのOnClick等で呼び出すことができます。

まとめ

  • Unity標準のOpenURL()はSafariしか開けない
  • iOSのネイティブコードを使えばTwitterなどのアプリ起動やフォールバック処理が可能
  • 本記事のコードは全部コピペでそのまま使える構成

iOSでのURL連携は、ユーザー体験向上に直結する重要な要素です。
ぜひこの記事を参考に、UnityとiOSの強力な連携を実現してみてください!