iOS開發中UILocalNotification本地通知實現簡單的提醒功能,uilocalnotification

來源:互聯網
上載者:User

iOS開發中UILocalNotification本地通知實現簡單的提醒功能,uilocalnotification

  這段時間項目要求做一個類似的鬧鐘提醒功能,對通知不太熟悉的我,決定先用到xcode內建的本地通知試試,最終成功的實現了功能,特整理分享下。

    它的表現特點:

     app關閉的時候也能接收和顯示通知。

     app處於背景時候能接收通知也能顯示。

     app處於前台的時候能接收,但不能顯示,但是會走應用程式delegate中的方法

    具體的建立方法:

     -》建立一個本地通知對象UILocalNotification

     -》設定fireDate,AlertBody,AlertAction,soundName,applicationBadgeNumber,repeatInterval,alertLanuchImage屬性 

     -》配置通知參數,userInfo。及通知的內容。我們可以在接收通知的方法中擷取該對象。

     -》調用通知,使用UIApplication的單例對象scheduleLocalNotificaiton按照計劃啟動通知

         此處需要注意的是自從iOS8之後需要徵求使用者的通知,如果同意則建立UIUerNotificationSettings,然後 registerUserNotificationSettings。對本地通知的數量限制,iOS最多允許最近本地通知數量是64個,超過限制的本地通知將被iOS忽略。

下面就是詳細的代碼:

 1.註冊通知 ,同樣也適用於iOS10

  在appdelegate的application:didFinishLaunchingWithOptions:中調用下面的方法

   

 

另外補充:為了適配iOS10,上面的代碼最好是換成下面的 

  

  2.本地通知的定義和使用

  在需要使用本地通知的控制器定義,這裡為了簡便直接定義一個5s之後的鬧鐘,可以改成任意一個時間點的,轉換成NSDate類型替換[NSDate dateWithTimeIntervalSinceNow:5]即可。

  

  為了區分不同的本地通知,可以在定義的同時定義下面的屬性

  //設定通知的相關資訊,這個很重要,可以添加一些標記性內容,方便以後區分和擷取通知的資訊
     NSDictionary *infoDic = [NSDictionary dictionaryWithObjectsAndKeys:LOCAL_NOTIFY_SCHEDULE_ID,@"id", nil];
    localNotification.userInfo = infoDic;

3.取消本地通知

  注意::在每次不需要或者重新重新整理所有的本地通知之前必須先取消所有的本地通知,不然會有重複的相同的通知。

  //取消某一個通知
     NSArray *notificaitons = [[UIApplication sharedApplication] scheduledLocalNotifications];
     //擷取當前所有的本地通知
     if (!notificaitons || notificaitons.count <= 0) {
         return;
     }
     for (UILocalNotification *notify in notificaitons) {
        if ([[notify.userInfo objectForKey:@"id"] isEqualToString:LOCAL_NOTIFY_SCHEDULE_ID]) {
            //取消一個特定的通知
            [[UIApplication sharedApplication] cancelLocalNotification:notify];
            break;
        }
    }
    
    //取消所有的本地通知
    [[UIApplication sharedApplication] cancelAllLocalNotifications];

4.本地通知的響應

  如果已經註冊了本地通知,當用戶端響應通知時:

    a、應用程式在背景時候,本地通知會給裝置送達一個和遠程通知一樣的提醒

    b、應用程式正在運行中,則裝置不會收到提醒,但是會走應用程式delegate中的方法:

  - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {  
  } 

  如果你想實現程式在後台時候的那種提醒效果,可以在上面這個方法中添加相關代碼

  if ([[notification.userInfo objectForKey:@"id"] isEqualToString:LOCAL_NOTIFY_SCHEDULE_ID]) {  
       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"test" message:notification.alertBody delegate:nil cancelButtonTitle:@"關閉" otherButtonTitles:notification.alertAction, nil nil];  
       [alert show];  
   }  

  需要注意的是,在情況a中,如果使用者點擊提醒進入應用程式,也會執行收到本地通知的回調方法,這種情況下如果你添加了上面那段代碼,則會出現連續出現兩次提示,為瞭解決這個問題,修改代碼如下:

  if ([[notification.userInfo objectForKey:@"id"] isEqualToString:LOCAL_NOTIFY_SCHEDULE_ID]) {  
         //判斷應用程式當前的運行狀態,如果是啟用狀態,則進行提醒,否則不提醒  
         if (application.applicationState == UIApplicationStateActive) {  
             UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:notification.alertBody delegate:nil cancelButtonTitle:@"關閉" otherButtonTitles:nil, nil];  
            [alert show];  
         }  
     } 

  如果適配了iOS10,則還應該加上下面的

  

  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.