推送通知就是向用戶推送一條信息來通知用戶某件事情,它可以在APP退到后臺或者關(guān)閉時仍可推送一條消息告訴用戶某件事.
本地推送通知
本地即使在不聯(lián)網(wǎng)的情況下也可以推送消息
通知發(fā)送方: 開發(fā)人員負責在APP內(nèi)發(fā)送
應用場景: 確定知道未來某個時間點提醒用戶什么
遠程推送通知
遠程則必須在聯(lián)網(wǎng)的情況下才能向用戶推送消息
遠程推送服務, 又稱為 APNs(Apple Push Notification Services)
通知發(fā)送方: 服務器
應用場景: 不確定未來某個時間點去提醒用戶或當APP徹底退出時也想繼續(xù)讓用戶獲得一些消息
當發(fā)送通知時, 如果當前程序正在前臺運行, 那么推送通知就不會被呈現(xiàn).
本地通知
// 發(fā)送本地通知
- (IBAction)sendNotification:(UIButton *)sender
{
// 請求通知授權(quán)
[[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (!error)
{
NSLog(@"推送授權(quán)成功");
}
}];
// 創(chuàng)建通知內(nèi)容
UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
content.title = @"推送標題";
content.subtitle = @"推送副標題";
content.body = @"這是推送內(nèi)容,長一點長一點長一點長一點長一點長一點長一點長一點長一點長一點長一點長一點長一點長一點長一點長一點長一點";
content.badge = @1; // 應用圖標提醒數(shù)字
// x秒鐘后提醒
UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:10 repeats:NO];
/**
//每周日早上十點提醒
NSDateComponents *components = [[NSDateComponents alloc] init];
components.weekday = 1;
components.hour = 10;
UNCalendarNotificationTrigger *trigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:components repeats:YES];
*/
// 通知標識符
NSString *requestIdentifier = @"sampleRequest";
// 創(chuàng)建通知
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:requestIdentifier content:content trigger:trigger];
// 發(fā)送通知
[[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
if (error) {
NSLog(@"發(fā)送通知錯誤 %@", error);
}
}];
}
// 查看通知
- (IBAction)viewNotification:(UIButton *)sender
{
// 查看通知設置
[[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
NSLog(@"通知設置: %@",settings);
}];
}
iOS10以后通知就使用 UNUserNotificationCenter 這個類, 而不是 UILocalNotification.
遠程通知
使用極光SDK即可 https://www.jiguang.cn/
極光的文檔 http://docs.jiguang.cn/jpush/client/iOS/ios_sdk/