iOS開發---本地通知(UILocalNotification)
阿新 • • 發佈:2019-01-10
iOS中通知機制又叫訊息機制,其包括兩類:一類是本地通知;另一類是推送通知,也叫遠端通知。
本地通知是由本地應用觸發的,它是基於時間行為的一種通知形式,例如鬧鐘定時、待辦事項提醒,又或者一個應用在一段時候後不使用通常會提示使用者使用此應用等都是本地通知。建立一個本地通知通常分為以下幾個步驟:
- 建立UILocalNotification。
- 設定處理通知的時間fireDate。
- 配置通知的內容:通知主體、通知聲音、圖示數字等。
- 配置通知傳遞的自定義資料引數userInfo(這一步可選)。
- 呼叫通知,可以使用scheduleLocalNotification:按計劃排程一個通知,也可以使用presentLocalNotificationNow立即呼叫通知。
簡單實現一個本地通知應用,具體程式碼如下:
AppDelegate中:
#import "AppDelegate.h"
#import "ViewController.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
_window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds ];
_window.backgroundColor = [UIColor colorWithRed:249/255.0 green:249/255.0 blue:249/255.0 alpha:1.0];
//設定全域性導航條風格和顏色
[[UINavigationBar appearance] setBarTintColor:[UIColor colorWithRed:23/255.0 green:180/255.0 blue:237/255.0 alpha:1]];
[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];
ViewController *VC = [[ViewController alloc]init];
_window.rootViewController = VC;
[_window makeKeyAndVisible];
//如果已經獲得傳送通知哦的授權則建立本地通知,否則請求授權(注意:如果不請求授權在設定中是沒有對應的通知設定項的,也就是說如果從來沒有傳送過請求,即使通過設定也打不開訊息允許設定)
if ([[UIApplication sharedApplication]currentUserNotificationSettings].types != UIUserNotificationTypeNone) {
[self addLocalNotification];
}else{
[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
}
return YES;
}
#pragma mark - **************** 呼叫過使用者註冊通知方法後執行(也就是呼叫完registerUserNotificationSettings:方法後執行)
-(void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings{
if (notificationSettings.types != UIUserNotificationTypeNone) {
[self addLocalNotification];
}
}
#pragma mark - **************** 進入前臺後設置訊息資訊
- (void)applicationWillEnterForeground:(UIApplication *)application {
[[UIApplication sharedApplication]setApplicationIconBadgeNumber:0];//進入前臺取消應用訊息圖示
}
#pragma mark - **************** 私有方法
//新增本地通知
-(void)addLocalNotification{
//定義本地通知物件
UILocalNotification *notification = [[UILocalNotification alloc]init];
//設定呼叫時間
notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:10.0];//通知觸發時間,10s之後
notification.repeatInterval = 2; //通知重複次數
//設定通知屬性
notification.alertBody = @"你要我怎樣---薛之謙,點選檢視-----";//通知主體
notification.applicationIconBadgeNumber = 1;//應用程式右上角顯示的未讀訊息數
notification.alertAction = @"開啟應用";//待機介面的滑動動作提示
notification.alertLaunchImage = @"Default";//通過點選通知開啟應用時的啟動圖片,這裡使用程式啟動圖片
//notification.soundName=UILocalNotificationDefaultSoundName;//收到通知時播放的聲音,預設訊息聲音
notification.soundName[email protected]"msg.caf";//通知聲音(需要真機才能聽到聲音)
//設定使用者資訊
notification.userInfo = @{@"id":@1,@"user":@"XF"};
//呼叫通知
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
}
#pragma mark - **************** 移除本地通知,在不需要此通知時記得移除
-(void)removeNotification{
[[UIApplication sharedApplication] cancelAllLocalNotifications];
}
@end
注意:
- 在使用通知之前必須註冊通知型別,如果使用者不允許應用程式傳送通知,則以後就無法傳送通知,除非使用者手動到iOS設定中開啟通知。
- 本地通知是有作業系統統一排程的,只有在應用退出到後臺或者關閉才能收到通知。
通知的聲音是由iOS系統播放的,格式必須是Linear PCM、MA4(IMA/ADPCM)、µLaw、aLaw中的一種,並且播放時間必須在30s內,否則將被系統聲音替換,同時自定義聲音檔案必須放到main boundle中。
- 本地通知的數量是有限制的,最近的本地通知最多隻能有64個,超過這個數量將被系統忽略。
- 如果想要移除本地通知可以呼叫UIApplication的cancelLocalNotification:或cancelAllLocalNotifications移除指定通知或所有通知。