Unity 時間指定ローカルプッシュ通知処理を書いてみた iOS編

raharu(仮名)(プログラマー)
これがダイバージェンス1%の先の世界か。。。

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

http://starzero.hatenablog.com/entry/2014/02/24/182646 http://blog.be-style.jpn.com/article/105428992.html http://marunouchi-tech.i-studio.co.jp/707/ http://tech.basicinc.jp/Unity/2013/08/06/unity_ios_native/ http://qiita.com/enpel/items/56f4e0f90d6bd27d026b