隨著公司APP開(kāi)發(fā)的相繼完善,大家總有一天會(huì)接觸到推送.
推送分兩種:
1.本地推送
2.遠(yuǎn)程推送
---------------一條華麗的分割線--------------------------
本地推送
這篇給大家講的是有關(guān)本地推送的最基礎(chǔ)的用法.(因?yàn)闃侵饕仓欢c(diǎn)皮毛.#)
本地推送,市面上許多APP都有用到.
正常都用在提醒用戶來(lái)使用該APP的.
好久沒(méi)用某APP的時(shí)候,通知中心就會(huì)跳出"客官,您已經(jīng)一星期沒(méi)玩我了,快來(lái)玩玩我吧!"之類的一些`牛盲~通知.(捂臉狀)
Like this??
C20AE574-7616-43CB-AC25-5EB140C66716.png
整理下發(fā)型,直接上代碼.
這篇本地推送寫的那是相當(dāng)的詳細(xì)~.
請(qǐng)各位客官盡情的command+c+v吧.
首先~控制器里創(chuàng)建本地推送的代碼.
(其實(shí)只需要1,2,3,4就可發(fā)送一則推送通知,其他都是廢話0.0)
- (void)messageClick2:(UIBarButtonItem *)btn
{
// 1.創(chuàng)建本地通知
UILocalNotification *note = [[UILocalNotification alloc]init];
// 2.設(shè)置通知的消息
note.alertBody = @"客官,您已經(jīng)一個(gè)星期沒(méi)玩我了,快來(lái)玩玩我吧!";
// 3.設(shè)置時(shí)間
// note.fireDate = [NSDate dateWithTimeIntervalSince1970:3*60*60+7*60];// 每日提醒的時(shí)間是從早上8點(diǎn)開(kāi)始的
note.fireDate = [NSDate dateWithTimeIntervalSinceNow:2];// 從現(xiàn)在起 兩秒鐘之后
// 4.添加通知 添加 通知,不是直接發(fā)出通知
[[UIApplication sharedApplication] scheduleLocalNotification:note];
// 這邊以上即可發(fā)送一則本地推送通知,下面只是完善.
/***********************一條華麗的分割線************************/
// 時(shí)區(qū)
note.timeZone = [NSTimeZone defaultTimeZone];
// 重復(fù)
note.repeatInterval = kCFCalendarUnitDay;// 每日 ,當(dāng)然也可以調(diào)成每小時(shí)之類的.也可填數(shù)字,重復(fù)次數(shù).
// 角標(biāo)
note.applicationIconBadgeNumber = 1;
// 設(shè)置當(dāng)點(diǎn)擊通知進(jìn)程序的時(shí)候 啟動(dòng),啟動(dòng)屏幕 如果圖片找不到會(huì)顯示默認(rèn)的啟動(dòng)圖片.但是好像ios9.0以后就失效了.
note.alertLaunchImage = @"圖片名稱";
// 這個(gè)鎖屏狀態(tài)是不會(huì)顯示的,只對(duì)通知中心有效.ios8.2之后有效!!!
note.alertTitle = @"MYAPP";
// 滑動(dòng)的時(shí)候 顯示的字
note.alertAction = @"回復(fù)";
//這個(gè)是控制上面的顯示不顯示的 正常就是默認(rèn)狀態(tài),一般不用改
note.hasAction = YES;
// 本地化通知的音效
note.soundName= UILocalNotificationDefaultSoundName;
// 或
note.soundName = @".aac.MP3應(yīng)該都行";
// 設(shè)置 通知攜帶的信息
note.userInfo = @{@"name":@"ksang"};
// 5 有直接發(fā)出通知的 **********
// [[UIApplication sharedApplication]presentLocalNotificationNow:note];
}
// 取消本地通知
- (void)cancelNote
{
UIApplication *app = [UIApplication sharedApplication];
// 打印現(xiàn)有通知的個(gè)數(shù)
NSLog(@"%ld",app.scheduledLocalNotifications.count);
// 打印出現(xiàn)有的 Notification
NSLog(@"currentUserNotificationSettings --------- %@",app.scheduledLocalNotifications);
// 移除所有本地通知
[[UIApplication sharedApplication]cancelAllLocalNotifications];
}
各位客官請(qǐng)注意 iOS8.0 之后本地通知需要注冊(cè),發(fā)送才有效.
正常寫在 代理 的didFinishLaunching里.
下面是~AppDelegate.mm中的代碼
didFinishLaunching 里面可以根據(jù) launchOptions 中的note 判斷是否是從icon進(jìn)來(lái)的,還是通過(guò)推送進(jìn)來(lái)的
// didFinishLaunching
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 注冊(cè)本地通知
[self registerUserNotification];
// 創(chuàng)建一個(gè)推送。。來(lái)接受launchOptions 字典中的[]
UILocalNotification *note =launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
if (note)
{
// NSLog(@"是從通知進(jìn)來(lái)的");
// NSLog(@"%@",note.userInfo);
}
else
{
// NSLog(@"直接點(diǎn)擊icon進(jìn)來(lái)的");
}
return YES;
}
// 注冊(cè)通知
- (void)registerUserNotification
{
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_8_0
// iOS8注冊(cè)通知
UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:types categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
#else
#endif
}
// 程序進(jìn)入前臺(tái)的時(shí)候調(diào)用的方法
- (void)applicationDidBecomeActive:(UIApplication *)application {
// 改變appicon右上角的角標(biāo) 具體后面再定 是直接設(shè)為0還是-1; 并且這句話的位置也得做相應(yīng)的更改.
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
}
// 從推送 進(jìn)入程序
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
// self.window.rootViewController.view
// 據(jù)說(shuō)可以拿到VC 如果能拿到,客官就可以為所欲為了@^.^@
}
如果有什么不對(duì)的,請(qǐng)大神們及時(shí)糾正.并且請(qǐng)大爺賞個(gè) ?? 吧muamua~