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:@"name"forKey:@"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; } }
閱讀參考鏈接。
參考鏈接
本地推送
遠程推送: