iOS 2-本地推送

隨著公司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~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,242評(píng)論 25 708
  • 點(diǎn)擊查看原文 Web SDK 開(kāi)發(fā)手冊(cè) SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個(gè)完善的 IM 系統(tǒng)...
    layjoy閱讀 13,914評(píng)論 0 15
  • 極光推送: 1.JPush當(dāng)前版本是1.8.2,其SDK的開(kāi)發(fā)除了正常的功能完善和擴(kuò)展外也緊隨蘋果官方的步伐,SD...
    Isspace閱讀 6,778評(píng)論 10 16
  • 想愛(ài)一個(gè)人總是那么難,我們或許真的是過(guò)了那個(gè)為愛(ài)奮不顧身的年紀(jì)。朋友C小姐說(shuō):曾經(jīng)我喜歡一個(gè)人,我就想告訴全世界。...
    rebacaa閱讀 536評(píng)論 0 1
  • 高個(gè)子名為郭勇,是王雁的二弟子,為人耿直率性,平時(shí)最得王雁的寵愛(ài)。如今王雁被害,最為傷心的就是他了,他決心定要找出...
    語(yǔ)旅閱讀 444評(píng)論 0 2