iOS推送:本地通知UILocalNotification

來源:互聯網
上載者:User

iOS推送:本地通知UILocalNotification

Notification是智能手機應用編程中非常常用的一種傳遞資訊的機制,而且可以非常好的節省資源,不用消耗資源來不停地檢查資訊狀態(Pooling),在iOS下應用分為兩種不同的Notification種類,本地和遠程。本地的Notification由iOS下NotificationManager統一管理,只需要將封裝好的本地Notification對象加入到系統Notification管理機制隊列中,系統會在指定的時間激發將本地Notification,應用只需設計好處理Notification的方法就完成了整個Notification流程了。

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

 

 

UILocalNotification的調度

其中fireDate、timeZone、repeatInterval和repeatCalendar是用於UILocalNotification的調度。fireDate是UILocalNotification的激發的確切時間。timeZone是UILocalNotification激發時間是否根據時區改變而改變,如果設定為nil的話,那麼UILocalNotification將在一段時候後被激發,而不是某一個確切時間被激發。 repeatInterval是UILocalNotification被重複激發之間的時間差,不過時間差是完全根據日曆單位(NSCalendarUnit)的,例如每周激發的單位,NSWeekCalendarUnit,如果不設定的話,將不會重複激發。 repeatCalendar是UILocalNotification重複激發所使用的日曆單位需要參考的日曆,如果不設定的話,系統預設的日曆將被作為參考日曆。

UILocalNotification的提醒內容

alertBody、alertAction、hasAction和alertLaunchImage是當應用不在運行時,系統處理

 

1、增加一個本地推送

//設定20秒之後

NSDate *date = [NSDate dateWithTimeIntervalSinceNow:20];

/*

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

[formatter setDateFormat:@"HH:mm:ss"];

NSDate *now = [formatter dateFromString:@"15:00:00"];//觸發通知的時間

*/

//chuagjian

一個本地推送

UILocalNotification *noti = [[[UILocalNotification alloc] init] autorelease];

if (noti) {

//設定推送時間

noti.fireDate = date;//=now

//設定時區

noti.timeZone = [NSTimeZone defaultTimeZone];

//設定重複間隔

noti.repeatInterval = NSWeekCalendarUnit;

//推送聲音

noti.soundName = UILocalNotificationDefaultSoundName;

//內容

noti.alertBody = @"推送內容";

//顯示在icon上的紅色圈中的數子

noti.applicationIconBadgeNumber = 1;

//設定userinfo 方便在之後需要撤銷的時候使用

NSDictionary *infoDic = [NSDictionary dictionaryWithObject:@"name" forKey:@"key"];

noti.userInfo = infoDic;

//添加推送到uiapplication

UIApplication *app = [UIApplication sharedApplication];

[app scheduleLocalNotification:noti];

}

 

2、程式運行時接收到本地推送訊息

 

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

{

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"接收到本地提醒 in app"

message:notification.alertBody

delegate:nil

cancelButtonTitle:@"確定"

otherButtonTitles:nil];

[alert show];

//這裡,你就可以通過notification的useinfo,幹一些你想做的事情了

application.applicationIconBadgeNumber -= 1;

}

 

3、取消一個本地推送

 

UIApplication *app = [UIApplication sharedApplication];

 

//擷取本地推送數組

NSArray *localArr = [app scheduledLocalNotifications];

 

//聲明本地通知對象

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;

}

}

}

 

//判斷是否找到已經存在的相同key的推送

if (!localNoti) {

//不存在 初始化

localNoti = [[UILocalNotification alloc] init];

}

 

if (localNoti && !state) {

//不推送 取消推送

[app cancelLocalNotification:localNoti];

[localNoti release];

return;

}

}

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

[[UIApplication sharedApplication] cancelLocalNotification:localNotification];

[[UIApplication sharedApplication] cancelAllLocalNotification];

5.iOS5的四種通知類型

 

5.1. 橫幅(Banner)

橫幅通知是在iOS5中出現的新特性,是顯示在螢幕頂部的橫條,幾秒鐘後會自動消失。一條橫幅通知會顯示程式的小表徵圖(低分屏下顯示29×29的表徵圖,高分屏顯示58×58的表徵圖),程式的名字和通知的內容。小表徵圖可以協助使用者一眼就看清楚是哪一個應用程式在提醒他們。

 

5.2. 提醒(Alert)

提醒通知不會自動消失,需要使用者與之互動才能關閉。設計師需要設計通知的具體內容,有時還要action button 設計title。整個提醒通知的背景樣式,包括裡面的按鈕的樣式都是不可變的,所以設計師和開發人員就不要在這裡發揮創意了。Android由於其開放性,我們是可以使用自己設計的控制項的,而iOS這樣做可能是為了保持UI風格一致性。

5.3. 標記(Badge)

標記通知是顯示在程式表徵圖的右上方的紅色橢圓形標記,裡面顯示的數字表示需要使用者處理的通知的數量。同樣地,標記的顏色和形狀、大小也是不可以更改的。App Store中有更新的應用程式的數量,Mail中收到的未讀郵件的數量都是用標記通知使用者的。

5.4. 聲音(Sound)

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

6.本地通知和推播通知

iOS應用程式會使用本地通知或推播通知來提醒使用者:

6.1. 本地通知

應用程式的本地通知是由使用者的iOS裝置產生並發布的,無論這個應用程式是否運行在前台。就像一個日曆應用,或者是一個to-do list應用,可以發出一條本地通知提醒使用者馬上有一個會議要開始了。

6.2. 推播通知

應用程式的推播通知是這樣發布的:該應用的遠程伺服器(Provider)先發出一條通知給蘋果的推播通知服務(Apple Push Notification service, APNS),蘋果的通知伺服器再把這個通知推送給所有安裝了這個應用的iOS裝置。

如果要使用推播通知,必須先在蘋果的推播通知服務裡註冊你要使用哪幾種類型的通知,就比如下面的一段代碼就表示同時註冊了標記和聲音兩種類型的通知:

- (void)applicationDidFinishLaunching:(UIApplication *)app {// other setup tasks here….

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound)];}

如何使用各種通知

使用本地通知的應用程式可以使用橫幅、提醒、標記、聲音,但是使用推播通知的應用程式需要先註冊要使用的通知類型。

在使用通知的時候需要注意以下幾點:

1. 保證標記的內容是最新的

2. 對同一事件不要發出多個通知

3. 通知內容不用包含應用程式的名稱

對於標記型通知,當所有的事項都解決後,標記會自動消失。

在橫幅和提醒中,以及頂部的通知中樞裡,iOS系統會自動在訊息裡顯示應用程式的名稱,所以在設計通知的內容時,就無需包含app的名稱了。

在設計通知的內容時,還需要注意:

1. 關注於資訊的表達,而不是使用者的動作。避免提示使用者去點哪一個按鈕或者是怎樣開啟app

2. 簡短,最好不超過兩行。長資訊難以快速閱讀,而且必然會有捲軸

3. 使用句式大寫(sentence-style capitalization,第一個單詞的首字母大寫)和合適的標點符號,結尾一般使用句號

關於“提醒”

一條提醒可能會包含一到兩個按鈕。對於有兩個按鈕的提醒,需要把關閉提醒的按鈕放在左邊,把action button放在右邊。

 

點左邊的按鈕會關閉提醒,點右邊的按鈕會關閉這條提醒並開啟應用。

如果只有一個按鈕,這個按鈕應該是一個確定按鈕。

 

點擊這個確定按鈕也只會關閉提醒,而不會開啟應用。

對於提醒通知,在設計action button的title的時候需要注意:

1. title能準確描述開啟應用的動作。比如點擊Play按鈕,就能夠開啟這個遊戲,使用者能夠立刻玩

2. 使用標題式大寫(title-style capitalization,每個單詞的首字母都大寫)

3. 足夠簡短



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.