iOS推送通知
注意:這里說的推送通知跟NSNotification有所區(qū)別
NSNotification是抽象的,不可見的
推送通知是可見的(能用肉眼看到)
-
iOS中提供了2種推送通知
本地推送通知(Local Notification)
遠程推送通知(Remote Notification)
-
推送通知的作用
- 讓app不在前臺時,告示用戶App的最新情況
-
推送通知的呈現(xiàn)方式
- 在屏幕頂部一塊橫幅
- 在屏幕中間彈出UIAlertView
- 同時可以播放音效
- 鎖屏時展示
- App圖標右上角額數(shù)字提示
-
本地推送通知(具體實現(xiàn))
- 本地通知的作用:清理App緩存,記賬,買衣服,看電影,玩游戲等
發(fā)送本地通知
/**
創(chuàng)建本地通知對象
*/
UILocalNotification *localnotification = [[UILocalNotification alloc]init];
/**
* 設置推送的相關(guān)屬性
*/
localnotification.fireDate = [NSDate dateWithTimeInterval:5.0 sinceDate:[NSDate date]];//通知觸發(fā)時間
localnotification.alertBody = @"明天放假啦";//通知具體內(nèi)容
localnotification.alertTitle = @"房租";//誰發(fā)出的通知
localnotification.soundName = @"buyao.wav";//通知時的音效
localnotification.applicationIconBadgeNumber = 1;
localnotification.alertAction = @"查看更多精彩內(nèi)容";//默認為 滑動來 +查看;鎖屏時顯示底部提示
/**
* 調(diào)度本地通知,通知會在特定時間發(fā)出
*/
[[UIApplication sharedApplication] scheduleLocalNotification:localnotification];
[[UIApplication sharedApplication] presentLocalNotificationNow:localnotification];//立即發(fā)出本通知
-
點擊本地通知,會自動打開app
- 當用戶點擊本地推送通知,會自動打開app,這里有2種情況
- app并沒有關(guān)閉,一直隱藏在后臺
讓app進入前臺,并會調(diào)用AppDelegate的下面方法(并非重新啟動app)
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification;
- app已經(jīng)被關(guān)閉(進程已死)
啟動app,啟動完畢會調(diào)用AppDelegate的下面方法
//launchOptions參數(shù)通過UIApplicationLaunchOptionsLocalNotificationKey取出本地推送通知對象
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
-
具體代碼如下:(要注意iOS8之后,需要獲取用戶授權(quán))
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//授權(quán)
if ([[UIDevice currentDevice].systemVersion floatValue]>=8.0) {
/**
* iOS8注冊授權(quán),設置本地通知模式
*/
/*
UIUserNotificationTypeNone = 0, 不發(fā)出通知
UIUserNotificationTypeBadge = 1 << 0, 改變應用程序圖標右上角的數(shù)字
UIUserNotificationTypeSound = 1 << 1, 播放音效
UIUserNotificationTypeAlert = 1 << 2, 是否運行顯示橫幅
*/
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound |UIUserNotificationTypeAlert categories:nil];
/**
* 然后注冊通知
*/
[application registerUserNotificationSettings:settings];
}
/**
* 如果程序正常啟動(冷啟動),launchOptions的參數(shù)為null
* 如果程序非正常啟動(熱啟動),launchOptions的參數(shù)時有值的
*/
if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {
NSLog(@"%@",launchOptions);
[self jumpToSession];
}
return YES;
}
/**
* 該方法,接收到本地通知執(zhí)行,如果應用程序在前臺,依然收到通知,但不應該執(zhí)行跳轉(zhuǎn);
如果應用程序在后臺,收到通知,點擊通知,執(zhí)行跳轉(zhuǎn)代碼;
應用程序被關(guān)閉,收到通知,但不能執(zhí)行跳轉(zhuǎn)代碼,(需要在didFinishLaunchingWithOptions方法中執(zhí)行)
*
*/
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
NSLog(@"收到本地通知");
[application setApplicationIconBadgeNumber:0];
if (application.applicationState == UIApplicationStateActive) {
return;
}else if (application.applicationState == UIApplicationStateInactive)
{
[self jumpToSession];
}else if(application.applicationState == UIApplicationStateBackground){
/**
* 不會執(zhí)行該代碼
*/
NSLog(@"在后臺");
}
}
- (void)jumpToSession
{
NSLog(@"執(zhí)行跳轉(zhuǎn)頁面");
UIView *redView = [[UIView alloc]init];
redView.backgroundColor = [UIColor redColor];
redView.frame = CGRectMake(100, 100, 100, 100);
[self.window.rootViewController.view addSubview:redView];
}
- 遠程推送請看下一篇內(nèi)容
- 發(fā)現(xiàn)錯誤請各位多多指正,謝謝.