iOS 推送通知分為本地推送和遠程推送通知,遠程推送通知就類似於我們平時使用微信時,即使鎖屏了,也能收到好友發送給我們的消息,然後在主屏幕顯示一個alertview,遠程推送需要遠程服務端的支持,比較復雜. 本地推送相對比較簡單,不需要服務端的支持。
本地通知是NSLocalNotification 實現的,通過實例化一個NSLocalNotification類型的通知,同時設置通知的fireDate 屬性,即通知的觸發時間;設置timeZone屬性,即時區;設置alertBody,顯示的內容;設置alertAction;設置soundName,即推送發生時的聲音;設置applicationIconBadgeNumber,即圖標上的數字;設置userInfo屬性,該屬性是一個NSDictionary類型的變量。然後在使用UIApplication 的 實例方法scheduleLocalNotification:或 presentLocalNotificationNow: 推送通知。
* 1、創建本地推送 *
// 創建一個本地推送
UILocalNotification *notification = [[[UILocalNotification alloc] init] autorelease];
//設置10秒之後
NSDate *pushDate = [NSDate dateWithTimeIntervalSinceNow:10];
if (notification != nil) {
// 設置推送時間
notification.fireDate = pushDate;
//推送時區設置:從網上搜到
//timeZone是UILocalNotification激發時間是否根據時區改變而改變,如果設置為nil的話,
//那麼UILocalNotification將在一段時候後被激發,而不是某一個確切時間被激發。
notification.timeZone = [NSTimeZone defaultTimeZone];
// 設置重復間隔,若不設置將只會推送1次
notification.repeatInterval = kCFCalendarUnitDay;
// 推送聲音,(若不設置的話系統推送時會無聲音)
notification.soundName = UILocalNotificationDefaultSoundName;
// 推送內容,(若不設置,推送中心中不顯示文字,有聲音提示前提是設置有聲音)
notification.alertBody = @推送內容;
//推送時小圖標的設置,PS:這個東西不知道還有啥用
notification.alertLaunchImage=[[NSBundle mainBundle]pathForResource:@3 ofType:@jpg];
//顯示在icon上的紅色圈中的數子
notification.applicationIconBadgeNumber = 1;
//設置userinfo 方便在之後需要撤銷的時候使用
NSDictionary *info = [NSDictionary dictionaryWithObject:@nameforKey:@key];
notification.userInfo = info;
//講推送設置以及信息加入
UIApplication* app=[UIApplication sharedApplication];
BOOL status=YES;
for (UILocalNotification* notification in app.scheduledLocalNotifications)
{
if ([notification.userInfo objectForKey:@key]) {
status=NO;
}
}
if (status) {
//加入推送(只能加入一次)
[app scheduleLocalNotification:notification];
}
}
* 2、接收本地推送 *
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification*)notification{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@iWeibo message:notification.alertBody delegate:nil cancelButtonTitle:@確定 otherButtonTitles:nil];
[alert show];
// 圖標上的數字減1
application.applicationIconBadgeNumber -= 1;
}
* 3、解除本地推送 *
// 獲得 UIApplication
UIApplication *app = [UIApplication sharedApplication];
//獲取本地推送數組
NSArray *localArray = [app scheduledLocalNotifications];
//聲明本地通知對象
UILocalNotification *localNotification;
if (localArray) {
for (UILocalNotification *noti in localArray) {
NSDictionary *dict = noti.userInfo;
if (dict) {
NSString *inKey = [dict objectForKey:@key];
if ([inKey isEqualToString:@對應的key值]) {
if (localNotification){
[localNotification release];
localNotification = nil;
}
localNotification = [noti retain];
break;
}
}
}
//判斷是否找到已經存在的相同key的推送
if (!localNotification) {
//不存在初始化
localNotification = [[UILocalNotification alloc] init];
}
if (localNotification) {
//不推送 取消推送
[app cancelLocalNotification:localNotification];
[localNotification release];
return;
}
}