見出し画像

UnityでiOSのアプリ設定画面へ飛ぶ方法

UnityでIOSのアプリ設定画面へ飛ぶ方法になります。
ネイティブコードを書く必要があり少し苦戦したのでメモ。

1. プラグインの作成

まず、Objective-Cのプラグインを作成して、このプラグインからiOSの設定画面を開く必要があります。

1.1 iOS Plugin フォルダの作成
UnityプロジェクトのAssetsフォルダ内に、Plugins/iOSというフォルダを作成します。

1.2 Objective-C ++ファイルの作成

Plugins/iOSフォルダ内に、.hおよび.mmファイルを作成してください。今回はNotificationSettingsOpener.hおよびNotificationSettingsOpener.mmというファイルを作成しました。スクリプトの中身は以下です。

NotificationSettingsOpener.h

#import <Foundation/Foundation.h>

@interface NotificationSettingsOpener : NSObject

+ (void)openSettings;

@end

NotificationSettingsOpener.mm

#import "NotificationSettingsOpener.h"
#import <UIKit/UIKit.h>
#import <UserNotifications/UserNotifications.h>

@implementation NotificationSettingsOpener

+ (void)openSettings {
     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{} completionHandler:nil];    
}

@end

extern "C" {
    void openSettings() {
        [NotificationSettingsOpener openSettings];
    }
}

2. Unityからプラグインを呼び出す

UnityのC#スクリプトから先ほど作成したプラグインのメソッドを呼び出します。

using System;
using UnityEngine;
using System.Runtime.InteropServices;
using UnityEngine.UI;

public class ExampleScript : MonoBehaviour
{
#if UNITY_IOS && !UNITY_EDITOR
    [DllImport("__Internal")]
    private static extern void openSettings();
#endif

    public void OpenNotificationSettings()
    {
#if UNITY_IOS && !UNITY_EDITOR
        openSettings();
#endif
    }
}

OpenNotificationSettings関数をボタンのイベントに登録して、このメソッドを呼び出すと無事、アプリの設定画面に飛ぶ事が確認できました。

3.トラブルシューティング

始め、このメソッドを呼び出したとき、IOSの全体の設定画面に飛んでしまいアプリ自体の設定画面に飛ぶ事ができませんでした。

どうやら、info.plistにカメラや位置情報などの設定が存在しない場合は設定項目が存在しないため全体の設定画面に飛ぶ仕様になっているようです。
試しにカメラの使用を許可したところ、無事設定画面に飛ぶことができました。

今回の記事は以上になります。


この記事が気に入ったらサポートをしてみませんか?