AppDelegate.swiftにあるapplication()関数に以下のようなコードを書く。
//AppDelegate.swiftの起動時に呼ばれる関数
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
//現在の通知を削除
UIApplication.sharedApplication().cancelAllLocalNotifications();
//通知登録前のおまじない
//これがないとpermissionエラーが発生する
application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes:
[UIUserNotificationType.Sound,
UIUserNotificationType.Alert,
UIUserNotificationType.Badge],
categories: nil))
//通知の設定
let notification:UILocalNotification = UILocalNotification()
notification.fireDate = NSDate(timeIntervalSinceNow: 10)
notification.timeZone = NSTimeZone.defaultTimeZone()
notification.alertBody = "10秒たちました"
notification.alertAction = "はい"
notification.soundName = UILocalNotificationDefaultSoundName
//通知登録
UIApplication.sharedApplication().scheduleLocalNotification(notification)
return true
}
通知の設定以下〜return trueの前までは、べつにAppDelegate内に書かなくてもいいので、普通のViewController.swiftなどのしかるべきところに書いてもいい。
「アプリを切り替えてアクティブじゃなくなったら10秒後に通知」とかもできる。
上記のコードでは音を鳴らすようにしているが、soundNameをコメントアウトすれば鳴らない。
上記のコードでは音を鳴らすようにしているが、soundNameをコメントアウトすれば鳴らない。
通知のダイアログ(iOSの個々の設定次第で出方が変わる)をタップすると、勝手に自分のアプリをアクティブにしてくれる。
通知をタップした時の処理
単にアプリをアクティブにしたのではなく、「通知をタップしてアクティブになった時」に処理をする場合は以下の関数で。
引数notification.alertActionで、上で設定したalertAction(はい)が取り出せる。
(使用不推奨のUIAlertViewを使ってるのはAppDelegate.swift内ではUIAlertControllerだとうまくいかなかったから。ま、気にすんな)
//LocalNotificationがタップされた時に実行される
func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification) {
let alert = UIAlertView();
alert.title = "受け取りました";
alert.message = notification.alertBody;
alert.addButtonWithTitle(notification.alertAction!);
alert.show();
}
0 件のコメント:
コメントを投稿