Unity×iOS

【Unity×iOS】アプリから「設定」アプリを開く方法|通知やBluetooth誘導に便利な実装ガイド

使用環境

・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のネイティブ機能を使えば「設定」アプリを開くことができます。ユーザー体験の向上のためにも、必要なタイミングで設定画面に誘導できるようにしましょう!