欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS推送之本地通知UILocalNotification

 更新時(shí)間:2016年09月21日 14:31:17   作者:u010079532  
這篇文章主要為大家詳細(xì)介紹了iOS本地通知UILocalNotification,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

摘要: Notification是智能手機(jī)應(yīng)用編程中非常常用的一種傳遞信息的機(jī)制,而且可以非常好的節(jié)省資源,不用消耗資源來(lái)不停地檢查信息狀態(tài)(Pooling),在iOS下應(yīng)用分為兩種不同的Notification種類,本地和遠(yuǎn)程。本地的Notification由iOS下NotificationManager統(tǒng)一管理,只需要將封裝好的本地Notification對(duì)象加入到系統(tǒng)Notification管理機(jī)制隊(duì)列中,系統(tǒng)會(huì)在指定的時(shí)間激發(fā)將本地Notification,應(yīng)用只需設(shè)計(jì)好處理Notification的方法就完成了整個(gè)Notification流程了。
Notification是智能手機(jī)應(yīng)用編程中非常常用的一種傳遞信息的機(jī)制,而且可以非常好的節(jié)省資源,不用消耗資源來(lái)不停地檢查信息狀態(tài)(Pooling),在iOS下應(yīng)用分為兩種不同的Notification種類,本地和遠(yuǎn)程。本地的Notification由iOS下NotificationManager統(tǒng)一管理,只需要將封裝好的本地Notification對(duì)象加入到系統(tǒng)Notification管理機(jī)制隊(duì)列中,系統(tǒng)會(huì)在指定的時(shí)間激發(fā)將本地Notification,應(yīng)用只需設(shè)計(jì)好處理Notification的方法就完成了整個(gè)Notification流程了。

本地Notification所使用的對(duì)象是UILocalNotification,UILocalNotification的屬性涵蓋了所有處理Notification需要的內(nèi)容。UILocalNotification的屬性有fireDate、timeZone、repeatInterval、repeatCalendar、alertBody、 alertAction、hasAction、alertLaunchImage、applicationIconBadgeNumber、 soundName和userInfo。

UILocalNotification的調(diào)度

其中fireDate、timeZone、repeatInterval和repeatCalendar是用于UILocalNotification的調(diào)度。fireDate是UILocalNotification的激發(fā)的確切時(shí)間。timeZone是UILocalNotification激發(fā)時(shí)間是否根據(jù)時(shí)區(qū)改變而改變,如果設(shè)置為nil的話,那么UILocalNotification將在一段時(shí)候后被激發(fā),而不是某一個(gè)確切時(shí)間被激發(fā)。 repeatInterval是UILocalNotification被重復(fù)激發(fā)之間的時(shí)間差,不過(guò)時(shí)間差是完全根據(jù)日歷單位(NSCalendarUnit)的,例如每周激發(fā)的單位,NSWeekCalendarUnit,如果不設(shè)置的話,將不會(huì)重復(fù)激發(fā)。 repeatCalendar是UILocalNotification重復(fù)激發(fā)所使用的日歷單位需要參考的日歷,如果不設(shè)置的話,系統(tǒng)默認(rèn)的日歷將被作為參考日歷。

UILocalNotification的提醒內(nèi)容

alertBody、alertAction、hasAction和alertLaunchImage是當(dāng)應(yīng)用不在運(yùn)行時(shí),系統(tǒng)處理

1、增加一個(gè)本地推送

//設(shè)置20秒之后 
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:20];
/*
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"HH:mm:ss"]; 
NSDate *now = [formatter dateFromString:@"15:00:00"];//觸發(fā)通知的時(shí)間
*/
 //chuagjian
一個(gè)本地推送
 UILocalNotification *noti = [[[UILocalNotification alloc] init] autorelease];
 if (noti) {
  //設(shè)置推送時(shí)間
  noti.fireDate = date;//=now
  //設(shè)置時(shí)區(qū)
  noti.timeZone = [NSTimeZone defaultTimeZone];
  //設(shè)置重復(fù)間隔
  noti.repeatInterval = NSWeekCalendarUnit;
  //推送聲音
  noti.soundName = UILocalNotificationDefaultSoundName;
  //內(nèi)容
  noti.alertBody = @"推送內(nèi)容";
  //顯示在icon上的紅色圈中的數(shù)子
  noti.applicationIconBadgeNumber = 1;
  //設(shè)置userinfo 方便在之后需要撤銷的時(shí)候使用
  NSDictionary *infoDic = [NSDictionary dictionaryWithObject:@"name" forKey:@"key"];
  noti.userInfo = infoDic;
  //添加推送到uiapplication  
  UIApplication *app = [UIApplication sharedApplication];
  [app scheduleLocalNotification:noti]; 
 }

2、程序運(yùn)行時(shí)接收到本地推送消息

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification*)notification
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"接收到本地提醒 in app"
message:notification.alertBody
 delegate:nil
 cancelButtonTitle:@"確定"
 otherButtonTitles:nil];
[alert show];
//這里,你就可以通過(guò)notification的useinfo,干一些你想做的事情了
application.applicationIconBadgeNumber -= 1;

}

3、取消一個(gè)本地推送

UIApplication *app = [UIApplication sharedApplication];
 //獲取本地推送數(shù)組
 NSArray *localArr = [app scheduledLocalNotifications];
 
 //聲明本地通知對(duì)象
 UILocalNotification *localNoti; 
 if (localArr) {
  for (UILocalNotification *noti in localArr) {
   NSDictionary *dict = noti.userInfo;
   if (dict) {
    NSString *inKey = [dict objectForKey:@"key"];
    if ([inKey isEqualToString:key]) {
     if (localNoti){
      [localNoti release];
      localNoti = nil;
     }
     localNoti = [noti retain];
     break;
    }
   }
  }
  
  //判斷是否找到已經(jīng)存在的相同key的推送
  if (!localNoti) {
   //不存在 初始化
   localNoti = [[UILocalNotification alloc] init];
  }

  

  if (localNoti && !state) {
   //不推送 取消推送
   [app cancelLocalNotification:localNoti];
   [localNoti release];
   return;
  }

}

4.兩種方式取消注冊(cè)的本地通知,一種是取消指定的通知,第二種是取消所有的注冊(cè)通知:

[[UIApplication sharedApplication] cancelLocalNotification:localNotification]; 
[[UIApplication sharedApplication] cancelAllLocalNotification]; 

5.iOS5的四種通知類型

5.1. 橫幅(Banner)

橫幅通知是在iOS5中出現(xiàn)的新特性,是顯示在屏幕頂部的橫條,幾秒鐘后會(huì)自動(dòng)消失。一條橫幅通知會(huì)顯示程序的小圖標(biāo)(低分屏下顯示29×29的圖標(biāo),高分屏顯示58×58的圖標(biāo)),程序的名字和通知的內(nèi)容。小圖標(biāo)可以幫助用戶一眼就看清楚是哪一個(gè)應(yīng)用程序在提醒他們。

5.2. 提醒(Alert)

提醒通知不會(huì)自動(dòng)消失,需要用戶與之交互才能關(guān)閉。設(shè)計(jì)師需要設(shè)計(jì)通知的具體內(nèi)容,有時(shí)還要action button 設(shè)計(jì)title。整個(gè)提醒通知的背景樣式,包括里面的按鈕的樣式都是不可變的,所以設(shè)計(jì)師和開(kāi)發(fā)者就不要在這里發(fā)揮創(chuàng)意了。Android由于其開(kāi)放性,我們是可以使用自己設(shè)計(jì)的控件的,而iOS這樣做可能是為了保持UI風(fēng)格一致性。

5.3. 標(biāo)記(Badge)

標(biāo)記通知是顯示在程序圖標(biāo)的右上角的紅色橢圓形標(biāo)記,里面顯示的數(shù)字表示需要用戶處理的通知的數(shù)量。同樣地,標(biāo)記的顏色和形狀、大小也是不可以更改的。App Store中有更新的應(yīng)用程序的數(shù)量,Mail中收到的未讀郵件的數(shù)量都是用標(biāo)記通知用戶的。

5.4. 聲音(Sound)

聲音提示也是iOS的一種通知方式,支持自定義,可以與前面三種通知類型搭配使用。

6.本地通知和推送通知

iOS應(yīng)用程序會(huì)使用本地通知或推送通知來(lái)提醒用戶:

6.1. 本地通知

應(yīng)用程序的本地通知是由用戶的iOS設(shè)備生成并發(fā)布的,無(wú)論這個(gè)應(yīng)用程序是否運(yùn)行在前臺(tái)。就像一個(gè)日歷應(yīng)用,或者是一個(gè)to-do list應(yīng)用,可以發(fā)出一條本地通知提醒用戶馬上有一個(gè)會(huì)議要開(kāi)始了。

6.2. 推送通知

應(yīng)用程序的推送通知是這樣發(fā)布的:該應(yīng)用的遠(yuǎn)程服務(wù)器(Provider)先發(fā)出一條通知給蘋果的推送通知服務(wù)(Apple Push Notification service, APNS),蘋果的通知服務(wù)器再把這個(gè)通知推送給所有安裝了這個(gè)應(yīng)用的iOS設(shè)備。

如果要使用推送通知,必須先在蘋果的推送通知服務(wù)里注冊(cè)你要使用哪幾種類型的通知,就比如下面的一段代碼就表示同時(shí)注冊(cè)了標(biāo)記和聲音兩種類型的通知:

- (void)applicationDidFinishLaunching:(UIApplication *)app {// other setup tasks here….
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound)];}

如何使用各種通知

使用本地通知的應(yīng)用程序可以使用橫幅、提醒、標(biāo)記、聲音,但是使用推送通知的應(yīng)用程序需要先注冊(cè)要使用的通知類型。

在使用通知的時(shí)候需要注意以下幾點(diǎn):

1. 保證標(biāo)記的內(nèi)容是最新的

2. 對(duì)同一事件不要發(fā)出多個(gè)通知

3. 通知內(nèi)容不用包含應(yīng)用程序的名稱

對(duì)于標(biāo)記型通知,當(dāng)所有的事項(xiàng)都解決后,標(biāo)記會(huì)自動(dòng)消失。

在橫幅和提醒中,以及頂部的通知中心里,iOS系統(tǒng)會(huì)自動(dòng)在消息里顯示應(yīng)用程序的名稱,所以在設(shè)計(jì)通知的內(nèi)容時(shí),就無(wú)需包含app的名稱了。

在設(shè)計(jì)通知的內(nèi)容時(shí),還需要注意:

1. 關(guān)注于信息的表達(dá),而不是用戶的動(dòng)作。避免提示用戶去點(diǎn)哪一個(gè)按鈕或者是怎樣打開(kāi)app

2. 簡(jiǎn)短,最好不超過(guò)兩行。長(zhǎng)信息難以快速閱讀,而且必然會(huì)有滾動(dòng)條

3. 使用句式大寫(xiě)(sentence-style capitalization,第一個(gè)單詞的首字母大寫(xiě))和合適的標(biāo)點(diǎn)符號(hào),結(jié)尾一般使用句號(hào)

關(guān)于“提醒”

一條提醒可能會(huì)包含一到兩個(gè)按鈕。對(duì)于有兩個(gè)按鈕的提醒,需要把關(guān)閉提醒的按鈕放在左邊,把a(bǔ)ction button放在右邊。

點(diǎn)左邊的按鈕會(huì)關(guān)閉提醒,點(diǎn)右邊的按鈕會(huì)關(guān)閉這條提醒并打開(kāi)應(yīng)用。

如果只有一個(gè)按鈕,這個(gè)按鈕應(yīng)該是一個(gè)確定按鈕。

點(diǎn)擊這個(gè)確定按鈕也只會(huì)關(guān)閉提醒,而不會(huì)打開(kāi)應(yīng)用。

對(duì)于提醒通知,在設(shè)計(jì)action button的title的時(shí)候需要注意:

1. title能準(zhǔn)確描述打開(kāi)應(yīng)用的動(dòng)作。比如點(diǎn)擊Play按鈕,就能夠打開(kāi)這個(gè)游戲,用戶能夠立刻玩

2. 使用標(biāo)題式大寫(xiě)(title-style capitalization,每個(gè)單詞的首字母都大寫(xiě))

3. 足夠簡(jiǎn)短

在鎖屏狀態(tài)的時(shí)候收到新提醒通知,會(huì)把a(bǔ)ction button的title顯示到“slide to view”的信息里,替換掉“view”這個(gè)詞,并且將所有字母都轉(zhuǎn)化為小寫(xiě)。

關(guān)于“聲音”

對(duì)于聲音提示,用戶沒(méi)有使用手機(jī)的時(shí)候聲音可以吸引他們的注意力,這可以避免用戶遺漏重要信息。

我們可以使用系統(tǒng)內(nèi)置的聲音,也可以自定義聲音。如果使用自定義的聲音,應(yīng)該保證它足夠簡(jiǎn)短,而且是精心制作的。

關(guān)于“通知欄”

只要不是鎖屏狀態(tài),都可以從屏幕頂部向下滑打開(kāi)通知中心。

如果是在游戲里面,比如水果忍者這種游戲,為了避免手指不小心滑到屏幕外而打開(kāi)了通知中心,iOS5提高了打開(kāi)通知中心的難度:先從屏幕頂部下拉出現(xiàn)有類似防滑紋的下拉條,出現(xiàn)下拉條后再次向下拖拽,才可打開(kāi)通知中心,否則幾秒鐘后下拉條會(huì)自動(dòng)收起。此處帶防滑紋下拉條的設(shè)計(jì)可以幫助新用戶迅速建立下拉打開(kāi)通知中心的心智模型。

OS5對(duì)下拉通知欄里的通知進(jìn)行了組織,同一個(gè)app的通知根據(jù)時(shí)間先后順序組合在一起。刪除某個(gè)app的通知消息需要先點(diǎn)右邊的“X”按鈕,“X”按鈕變?yōu)椤扒宄保脩粼俅吸c(diǎn)擊清除才能移除這個(gè)app下的所有通知。兩步操作降低誤刪幾率,而且其交互形式也比常見(jiàn)的彈出二次確認(rèn)的模態(tài)窗口友好得多。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論