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

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

iOS8からローカルプッシュ通知にもユーザー許可が必要になりました。
今迄のやり方だとローカル通知が遅れなくなってしまったので
起動時に認証ダイアログを表示させるようにします。

まずはAssets/Plugin/iOS以下に
LocalNotificationController.mmを作成します。
ソースはこんな感じで書きます

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#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以上)

実際に通知を送ってみます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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