とあるプログラマの備忘録

都内某所に住むプログラマが自分用に備忘録を残すという趣旨のブログです。はてなダイアリーから移動しました!

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