//也能夠參考http://www.cnblogs.com/kenshincui/p/4168532.html 崔江濤講的 很不錯哦html
推送通知和NSNotification是有區別的:服務器
NSNotification:是看不到的微信
推送通知:是能夠看到的app
IOS中提供了兩種推送通知ui
本地推送通知:(Local Notification):手機應用自己的通知,好比:鬧鈴atom
遠程推送通知:(Remote Notification)從服務器發送過來的通知spa
推送通知的做用:讓不在前臺運行的App,告知用戶App內部發生了什麼事情.好比咱們正在聊微信,忽然界面上面出現了黑色半透明橫幅(QQ好友給你發送的消息)這就是一個推送通知.htm
推送通知的呈現效果:對象
1:在屏幕頂部顯示一塊橫幅(顯示具體內容)blog
2:在屏幕中間彈出一個UIAlertView(顯示具體內容)
3:還能夠在呈現推送通知的同時播放音效(提醒做用)
4:屏幕鎖屏時也照樣呈現(顯示具體內容)
5:呈現推送通知的同時,還能夠更新App圖標右上角的數字(說明新內容的數量)
6:用戶接收的推送通知,都會展現在通知中心(手指從屏幕頂部往下拉的窗口)(顯示具體的內容)
推送通知的使用細節:
StartFragment
1:發出推送通知時,若是當前程序正運行在前臺,那麼推送通知就不會被呈現出來
2:點擊推送通知後,默認會自動打開發出推送通知的app
3:無論app打開仍是關閉,推送通知都能如期發出
什麼是本地推送通知:
顧名思義,就是不須要聯網的就能發出的推送通知(不須要服務器的支持)
本地推送通知的使用場景:
經常使用來定時提醒用戶完成一些任務,好比:清理垃圾,記帳,購物,買衣服,看電影
如何發出本地推送通知:
步驟:
1:註冊通知類型(IOS8之後)
2:建立本地推送通知對象
3:定製一個通知
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//1 :IOS8之後須要註冊通知類型,包含哪些(聲音,圖標文字,)信息,
/*
UIUserNotificationTypeNone = 0
UIUserNotificationTypeBadge = 1 << 0 包含圖標文字(左上角的數字)0001
UIUserNotificationTypeSound = 1 << 1 聲音 ----------------->0010
UIUserNotificationTypeAlert = 1 << 2 主題內容--------------->0100
目前是:0111,這個值是數值,下面的|||之間的內容至關於數值
*/
// |:位移運算符
UIUserNotificationSettings *seting=[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];
[[UIApplication sharedApplication]registerUserNotificationSettings:seting];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
//告訴它有一個本地通知
//2:建立一個本地推送通知對象
UILocalNotification*local=[[UILocalNotification alloc]init];
/*
// timer-based scheduling 特定的時間發出通知
@property(nonatomic,copy) NSDate *fireDate;觸發時間
@property(nonatomic,copy) NSTimeZone *timeZone;時區
@property(nonatomic) NSCalendarUnit repeatInterval;重複間隔
@property(nonatomic,copy) NSCalendar *repeatCalendar;重複間隔
@property(nonatomic,copy) CLRegion *region NS_AVAILABLE_IOS(8_0);區域
@property(nonatomic,assign) BOOL regionTriggersOnce NS_AVAILABLE_IOS(8_0);決定區域的一個BOOL值
// alerts警告
@property(nonatomic,copy) NSString *alertBody; 提醒的主題
@property(nonatomic) BOOL hasAction; NO不顯示滑動解鎖按鈕 反之顯示
@property(nonatomic,copy) NSString *alertAction; 滑動解鎖的文字
@property(nonatomic,copy) NSString *alertLaunchImage; 點擊通知橫幅的時候啓動程序的啓動 圖片
@property(nonatomic,copy) NSString *alertTitle 提示的標題文字NS_AVAILABLE_IOS(8_2);
// sound
@property(nonatomic,copy) NSString *soundName; 伴隨的聲音,默認的是UILocalNotificationDefaultSoundName
// badge
@property(nonatomic) NSInteger applicationIconBadgeNumber;圖標右上角的數字
// user info
@property(nonatomic,copy) NSDictionary *userInfo;用戶指定的攜帶參數,轉換成鍵值對放在字典裏面
@property (nonatomic, copy) NSString *category NS_AVAILABLE_IOS(8_0);分類
*/
//給這些屬性賦值才能讓通知有特定的內容
local.alertBody=@"女神:在嗎?";
//特定的時間讓顯示出來(從如今5秒後顯示出來)
local.fireDate=[NSDate dateWithTimeIntervalSinceNow:5];
//滑動解鎖的文字(在推送通知信息的下面一小行字)
local.alertAction =@"約";
//有聲音給聲音,沒聲音用默認的
local.soundName=@"UILocalNotificationDefaultSoundName";
//設置圖標右上角數字
local.applicationIconBadgeNumber=19;
//用戶信息
local.userInfo=@{@"name":@"女神",@"content":@"在不",@"time":@"20180101"};
//3:定製一個通知
[[UIApplication sharedApplication]scheduleLocalNotification:local];
}
@end
什麼是遠程推送?
遠程:從遠程服務器推送給客戶端的通知(須要聯網)
一、應用程序註冊APNS消息推送。
二、iOS從APNS Server獲取devicetoken,應用程序接收device token。
三、應用程序將device token發送給程序的PUSH服務端程序。
四、服務端程序向APNS服務發送消息。
五、APNS服務將消息發送給iPhone應用程序。
參考
http://www.cocoachina.com/industry/20130321/5862.html