2015年

6月

23日

Objective-C LocalNotification ローカル通知

”Local Notification” ローカル通知について
アプリケーションが実行中でなくても、ユーザーに対して情報、メッセージを通知する事が出来るシステムです。
iOS3.0から導入された"Push Notification"と出来る事はほぼ同等ですが、"Push Notification"リモート通知はサーバーを介して通知され、”Local Notification”ローカル通知は、アプリケーションによってスケジューリングされます。

AppDelegate.mの記述
2つの記述を付加しています。
1)iOS8 ローカル通知を動作させる許可を得る記述。
  iOS8以上には必須でこの記述が無いと動作しません。
2)アプリが非Activeになりバックグランド実行になった際に呼び出されるようにしている。

AppDelegate.m

#import "AppDelegate.h"


@implementation AppDelegate


// はじめての起動時に呼び出される

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

    // Override point for customization after application launch.

    

    // iOS8 ローカル通知を動作させる許可を得る必要

    if ([UIApplication

        instancesRespondToSelector:@selector(registerUserNotificationSettings:)]) {

        [[UIApplication sharedApplication]

         registerUserNotificationSettings:[UIUserNotificationSettings                                         

         settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeSound

                                           categories:nil]];

    }

    

    return YES;

}


// アプリが終了する場合

- (void)applicationWillResignActive:(UIApplication *)application

{

  

}


// アプリが非Activeになりバックグランド実行になった際に呼び出される

- (void)applicationDidEnterBackground:(UIApplication *)application

{

    

    [[UIApplication sharedApplication] cancelAllLocalNotifications];

    

    UILocalNotification *localNotif = [[UILocalNotification alloc] init];

    localNotif.fireDate = [NSDate dateWithTimeInterval:10.0 sinceDate:[NSDate date]];

    localNotif.timeZone = [NSTimeZone defaultTimeZone];

    localNotif.alertBody = @"もとのアプリに戻りますか?";

    localNotif.alertAction = @"OK";

    localNotif.soundName = UILocalNotificationDefaultSoundName;

    // バッジ表示

    localNotif.applicationIconBadgeNumber = -1; // 1 -10に戻る

    localNotif.userInfo = @{@"test": @YES};

    

    [[UIApplication sharedApplication] scheduleLocalNotification:localNotif];

}


// アプリが2回目の起動の場合

- (void)applicationWillEnterForeground:(UIApplication *)application

{

    

}


// アプリがアクティブになった際に呼び出される

- (void)applicationDidBecomeActive:(UIApplication *)application

{

    

}


// システムからのアプリ終了の際に呼び出される

- (void)applicationWillTerminate:(UIApplication *)application

{

    

}


@end

ViewController.m

#import "ViewController.h"


@interface ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad

{

    [super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

}


- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


/*

 <各設定の説明>

 fireDate:起動日時

 timeZone:タイムゾーン

 hasAction:アクションの有無

 alertBody:アラートの内容

 alertAction:ボタンのタイトル

 soundName:サウンドネーム

 applicationIconBadgeNumber:数字バッジの数

 */



// [ローカル通知]ボタンを押した時

- (IBAction)doNotification:(id)sender {

    

    // 通知

    UILocalNotification *notify = [[UILocalNotification alloc] init];

    

    // 通知時刻 5

    notify.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];

    

    // タイムゾーン

    notify.timeZone = [NSTimeZone defaultTimeZone];

    

    // アクションの有無

    notify.hasAction = YES;

    

    // アラートの内容

    notify.alertBody = @"時間になりました";

    

    // ボタンのタイトル

    notify.alertAction = @"起動";

    

    // サウンドネーム

    notify.soundName = UILocalNotificationDefaultSoundName;

    

    //スケジュールに追加登録します

    [[UIApplication sharedApplication] scheduleLocalNotification:notify]; // 通知する

    

}


@end

▫️参考ページ


  

目 次