iOS 2-本地推送

随着公司APP开发的相继完善,大家总有一天会接触到推送.

推送分两种:
1.本地推送
2.远程推送
---------------一条华丽的分割线--------------------------

本地推送

这篇给大家讲的是有关本地推送的最基础的用法.(因为楼主也只懂点皮毛.#)
本地推送,市面上许多APP都有用到.
正常都用在提醒用户来使用该APP的.
好久没用某APP的时候,通知中心就会跳出"客官,您已经一星期没玩我了,快来玩玩我吧!"之类的一些`牛盲~通知.(捂脸状)

Like this⬇️
iOS 2-本地推送_第1张图片
C20AE574-7616-43CB-AC25-5EB140C66716.png

整理下发型,直接上代码.

这篇本地推送写的那细~.
请各位客官尽情的command+c+v吧.

首先~控制器里创建本地推送的代码.
(其实只需要1,2,3,4就可发送一则推送通知,其他都是废话0.0)

- (void)messageClick2:(UIBarButtonItem *)btn
{
    // 1.创建本地通知
    UILocalNotification *note = [[UILocalNotification alloc]init];
    // 2.设置通知的消息
    note.alertBody = @"客官,您已经一个星期没玩我了,快来玩玩我吧!";
    // 3.设置时间
    //    note.fireDate =  [NSDate dateWithTimeIntervalSince1970:3*60*60+7*60];// 每日提醒的时间是从早上8点开始的
    note.fireDate = [NSDate dateWithTimeIntervalSinceNow:2];// 从现在起 两秒钟之后
    // 4.添加通知    添加 通知,不是直接发出通知
    [[UIApplication sharedApplication] scheduleLocalNotification:note];
    
    // 这边以上即可发送一则本地推送通知,下面只是完善.

    /***********************一条华丽的分割线************************/
    // 时区
    note.timeZone = [NSTimeZone defaultTimeZone];
    // 重复
    note.repeatInterval = kCFCalendarUnitDay;// 每日 ,当然也可以调成每小时之类的.也可填数字,重复次数.
    // 角标
    note.applicationIconBadgeNumber = 1;
    // 设置当点击通知进程序的时候 启动,启动屏幕 如果图片找不到会显示默认的启动图片.但是好像ios9.0以后就失效了.
    note.alertLaunchImage = @"图片名称";
    // 这个锁屏状态是不会显示的,只对通知中心有效.ios8.2之后有效!!!
    note.alertTitle = @"MYAPP";
    // 滑动的时候 显示的字
    note.alertAction = @"回复";
    //这个是控制上面的显示不显示的 正常就是默认状态,一般不用改
    note.hasAction = YES;
    // 本地化通知的音效
    note.soundName= UILocalNotificationDefaultSoundName;
    // 或
    note.soundName = @".aac.MP3应该都行";
    // 设置  通知携带的信息
    note.userInfo = @{@"name":@"ksang"};
    // 5  有直接发出通知的   **********
//    [[UIApplication sharedApplication]presentLocalNotificationNow:note];
}

// 取消本地通知
- (void)cancelNote
{
    UIApplication *app  = [UIApplication sharedApplication];
    // 打印现有通知的个数
    NSLog(@"%ld",app.scheduledLocalNotifications.count);
    // 打印出现有的  Notification
    NSLog(@"currentUserNotificationSettings --------- %@",app.scheduledLocalNotifications);
    // 移除所有本地通知
    [[UIApplication sharedApplication]cancelAllLocalNotifications];
}

各位客官请注意 iOS8.0 之后本地通知需要注册,发送才有效.

正常写在 代理 的didFinishLaunching里.

下面是~AppDelegate.mm中的代码

didFinishLaunching 里面可以根据 launchOptions 中的note 判断是否是从icon进来的,还是通过推送进来的
// didFinishLaunching
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // 注册本地通知
    [self registerUserNotification];

//   创建一个推送。。来接受launchOptions 字典中的[]
    UILocalNotification *note  =launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
    if (note)
    {
//        NSLog(@"是从通知进来的");
//        NSLog(@"%@",note.userInfo);
    }
    else
    {
//        NSLog(@"直接点击icon进来的");
    }
    return YES;

}
// 注册通知
- (void)registerUserNotification
{
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_8_0
    // iOS8注册通知
    UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:types categories:nil];
    [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
#else
#endif
}

// 程序进入前台的时候调用的方法
- (void)applicationDidBecomeActive:(UIApplication *)application {
    // 改变appicon右上角的角标 具体后面再定 是直接设为0还是-1; 并且这句话的位置也得做相应的更改.
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
}

// 从推送 进入程序
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    // self.window.rootViewController.view
    // 据说可以拿到VC 如果能拿到,客官就可以为所欲为了@^.^@
}

如果有什么不对的,请大神们及时纠正.并且请大爷赏个 吧muamua~

你可能感兴趣的:(iOS 2-本地推送)