UILocalNotificationローカル通知(16年5月末最新テスト)

4359 ワード

プロジェクトではローカル通知機能を使って、ネット上で検索して、いろいろな言い方をして、自分の検証を経て、以下のように整理しました.
まず説明するのはIOSの最大許可最近のローカル通知数は64個で、制限を超えたローカル通知は無視され、テストを経て、ローカル通知はまったく制限されていません.以前は制限があったかもしれませんが、今は数量を制限していません.次にiOS 8以降は通知を送信する前に登録する必要があるので、ローカル通知機能を使用する前に登録する必要があります.次の使い方を説明します.

1.登録通知(iOS 8以降)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsメソッドに登録コードを追加
if([[UIDevice currentDevice].systemVersion doubleValue]>=8.0){//8.0 
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
        [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
    }else{
        [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
    }

2.UILocalNotificationの構築

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

3.UILocalNotificationの構成


3.1属性
  • トリガ時間(fireDate,timeZone,repeatInterval(繰り返し)、repeatCalendar)/送信通知方式が即時送信であれば無意味
  • を構成する
    //10秒後通知NSDate * now = [[NSDate alloc] init]; notification.fireDate=[now dateByAddingTimeInterval:10];//ローカルタイムゾーンnotification.timeZone=[NSTimeZone defaultTimeZone];の使用
    //繰り返しの設定notification.repeatInterval = kCFCalendarUnitSecond;
  • 通知動作(alertAction,hasAction)notification.alertAction=NSLocalizedString(@" , ", nil);
  • トリガ通知時の起動画面(alertLaunchImage)
  • 通知の本文内容(alertTitle,alertBody)notification.alertBody=@" ";
  • 通知の音声(soundName)notification.soundName = UILocalNotificationDefaultSoundName;
  • 通知メッセージ数の表示(applicationIconBadgeNumber)Appアイコン左上隅の赤い数字notification.applicationIconBadgeNumber = 1;//0
  • と表示されません.
  • その他(userInfo)は、通知の処理に必要な追加情報をバインドすることができる.

  • この通知にkeyを追加するとキャンセルしやすいです.
    NSDictionary *dict =[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:notificationtag],@"akey",nil];
    [notification setUserInfo:dict];
    

    3.2送信方式- (void)presentLocalNotificationNow:(UILocalNotification *)notification//即時送信- (void)scheduleLocalNotification:(UILocalNotification *)notification//構成時間別送信
    3.3キャンセル方式- (void)cancelLocalNotification:(UILocalNotification *)notification//通知をキャンセル- (void)cancelAllLocalNotifications//すべての通知をキャンセル
    //    
    NSArray *localNotifications = [UIApplication sharedApplication].scheduledLocalNotifications;  
        
    for (UILocalNotification *notification in localNotifications) {  
        NSDictionary *userInfo = notification.userInfo;  
        if (userInfo) {  
          //  key   
          NSString *info = userInfo[@"akey"];  
            
          //  ,   
          if (info != nil) {  
            [[UIApplication sharedApplication] cancelLocalNotification:notification];  
            break;  
          }  
        }  
      }  
    

    4.処理通知


    AppDelegateでmファイルにおける- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notificationメソッドの追加
    //    
    NSString *message = [notification.userInfo objectForKey:@"akey"];  
    // 
    NSLog(@"%@",message);
    //    
      NSInteger badge = [UIApplication sharedApplication].applicationIconBadgeNumber;  
      badge--;// , 1  
      badge = badge >= 0 ? badge : 0;  
      [UIApplication sharedApplication].applicationIconBadgeNumber = badge;// 。。。
    

    一般的にAppに入った後、小さな赤い点をクリアし、- (void)applicationDidBecomeActive:(UIApplication *)applicationの方法に[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];を追加すればよい.
    ここまでで全部終わってしまうので、簡単ではないでしょうか.実は私达はふだんそれを使って1つの弾枠のような注意の机能を行って、登录して、送信して、いくつかのコードは解决しました.の

    本文はCrazy Stevenのオリジナルの出品で、転載を歓迎して、転載する時出典を明記してください!