使用環境
・Unity Editor:2021.3.18f1
この記事でわかること
- UnityアプリからiOSの設定アプリ(自アプリの設定画面)を開く
- ユーザーに設定変更を促す導線をつくれる
iOSの「設定」アプリを開く方法とは?
ピッグダディ
ユーザーが通知やBluetoothの設定をオフにしていると、アプリの機能が使えないときってあるよね。そういうときに「設定アプリを直接開かせたい!」って思ったこと、あるかな?
ピッグボーイ
それめっちゃあります!
通知が届かなくて「設定でオンにしてね」って毎回伝えるのめんどくさい。
ピッグガール
iOSって勝手に設定アプリ開けないんじゃないんですか?
Unityだと余計に難しそう…
ピッグダディ
実はObjective-Cで用意されてる専用のURLスキームを使えば、Unityアプリからでも設定アプリを開けるんだ。この記事ではコピペOKのコード付きで、誰でも簡単に実装できる方法を紹介するよ!
UIApplicationOpenSettingsURLString
iOSのネイティブ機能として、下記のように設定画面への遷移が提供されています
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
※UnityではこのObjective-Cコードを[DllImport]経由で呼び出す必要があります。
Unityでの実装方法
まずは、Plugins/iOSフォルダ内に Objective-Cファイルを作成し、以下を記述します。
ファイル名:OpenSettings.mm
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
extern "C" {
void OpenAppSettings() {
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
}
}
}
Unity側の呼び出しコード
次に、Unity C#側からこの関数を呼び出します
using System.Runtime.InteropServices;
using UnityEngine;
public class OpenSettings : MonoBehaviour
{
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
private static extern void OpenAppSettings();
#endif
public void OpenSettingsApp()
{
#if UNITY_IOS && !UNITY_EDITOR
OpenAppSettings();
#else
Debug.Log("iOSでのみ動作します。");
#endif
}
}
注意点
- 実機でしか動作確認ができません(Editorでは呼び出し不可)
- iOS 8.0以降でのみ利用可能
- App Storeの審査で特定の用途に限り制限される可能性があります
こんな場面で活用
- 通知許可をユーザーが拒否したときに設定を開かせる
- 位置情報がオフの場合に設定を開かせる
- Bluetooth設定を促したい場合など
まとめ
Unityからでも、iOSのネイティブ機能を使えば「設定」アプリを開くことができます。ユーザー体験の向上のためにも、必要なタイミングで設定画面に誘導できるようにしましょう!