Unity ローカルプッシュ通知処理を書いてみた iOS編
iOS8からローカルプッシュ通知にもユーザー許可が必要になりました。
今迄のやり方だとローカル通知が遅れなくなってしまったので
起動時に認証ダイアログを表示させるようにします。
まずはAssets/Plugin/iOS以下に
LocalNotificationController.mmを作成します。
ソースはこんな感じで書きます
#import "iPhone_target_Prefix.pch" #import "UnityAppController.h" @interface LocalNotificationController : UnityAppController +(void)load; @end @implementation LocalNotificationController +(void)load { extern const char* AppControllerClassName; AppControllerClassName = "LocalNotificationController"; } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions { [super application:application didFinishLaunchingWithOptions:launchOptions]; float version = [[[UIDevice currentDevice] systemVersion] floatValue]; if (version >= 8.0) { if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) { UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeSound categories:nil]; [application registerUserNotificationSettings:settings]; } } return YES; } @end
これで実機起動すれば認証ダイアログが出てくるはずです。(iOS8以上)
実際に通知を送ってみます。
using UnityEngine; using System.Collections; public class LocalNotifyScript : MonoBehaviour { void Start () { addLocalPush (); } void addLocalPush () { Debug.Log ("ローカル通知が走ります"); #if UNITY_EDITOR #elif UNITY_ANDROID #else addLocalPushiOS(); #endif } void addLocalPushiOS() { LocalNotification l = new LocalNotification(); l.applicationIconBadgeNumber = 1; l.fireDate = System.DateTime.Now.AddSeconds(10); l.alertBody = "通知テストだよ!"; NotificationServices.ScheduleLocalNotification(l); } }
これを適当なGameObjectにアタッチします。
なかなか資料が見つからず四苦八苦しました。。。
安西先生、ネイティブ連携をサクサク書けるようになりたいです。。
参考にさせていただきましたm( )m
UnityのiOSでAppDelegateに処理を追加する - ほげほげ(仮)
[Unity] iOS8でローカル通知が動かない: ものづくりログ
Unityで作ったiOSアプリにObj-CでPush通知を載せてみた | 丸ノ内テックブログ
UnityでiOSのネイティブコードを呼び出す最も簡単でシンプルな方法 - C# → Objective-C
[備忘録]AppController.mmあたりをいじっている時のUnity4.1.5迄からUnity4.2以上に上げる時の注意 - Qiita