博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
本地推送
阅读量:4077 次
发布时间:2019-05-25

本文共 3741 字,大约阅读时间需要 12 分钟。

步骤:

    1.    创建UILocalNotification。
    2.    设置处理通知的时间fireDate。
    3.    配置通知的内容:通知主体、通知声音、图标数字等。
    4.    配置通知传递的自定义数据参数userInfo(这一步可选)。
    5.    调用通知,可以使用scheduleLocalNotification:按计划调度一个通知,也可以使用presentLocalNotificationNow立即调用通知。
注意:
    •    在使用通知之前必须注册通知类型,如果用户不允许应用程序发送通知,则以后就无法发送通知,除非用户手动到iOS设置中打开通知。
    •    本地通知是由操作系统统一调度的,只有在应用退出到后台或者关闭才能收到通知。(注意:这一点对于后面的推送通知也是完全适用的。 )
    •    通知的声音是由iOS系统播放的,格式必须是Linear PCM、MA4(IMA/ADPCM)、µLaw、aLaw中的一种,并且播放时间必须在30s内,否则将被系统声音替换,同时自   定义声音文件必须放到main boundle中。
    •    本地通知的数量是有限制的,最近的本地通知最多只能有64个,超过这个数量将被系统忽略。
    •    如果想要移除本地通知可以调用UIApplication的cancelLocalNotification:或cancelAllLocalNotifications移除指定通知或所有通知。

#import "AppDelegate.h"

@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    application.applicationIconBadgeNumber = 0;
    
    //申请用户许可
    float version = [[[UIDevice currentDevice] systemVersion] floatValue];
    if (version >= 8.0) {
        UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeSound|UIUserNotificationTypeBadge|UIUserNotificationTypeAlert
                                                                                categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:setting];
    }
   
    
    UILocalNotification * localNotificaiton = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
    if (localNotificaiton != nil) {
        [self processLocalNotifiction:localNotificaiton];
    }
    
    return YES;
}
-(void)processLocalNotifiction:(UILocalNotification*)localNotification
{
    UIAlertView *alterView = [[UIAlertView alloc]initWithTitle:@"lanchApp" message:@"loc" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alterView show];
}
//注册设置提醒后,调用的代理方法
-(void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
    if (notificationSettings.types != UIUserNotificationTypeNone ) {
        //注册本地推送,首先生成UILocalNotification对象
        UILocalNotification *localNotifcation = [[UILocalNotification  alloc]init];
        //提示出发的时间
        localNotifcation.fireDate = [NSDate dateWithTimeIntervalSinceNow:10];
        //提示的内容
        localNotifcation.alertBody = @"这是一个测试";
        //制定消息到来时的播放的声音文件,一定要在bundle内,而且声音的持续时间不能超过30s
        localNotifcation.soundName = @"CAT2.WAV";
        
        //设置系统角标
        localNotifcation.applicationIconBadgeNumber = 1;
        
        //注册本地通知道系统中,这样系统道指定的时间会出发该通知
        [[UIApplication sharedApplication] scheduleLocalNotification:localNotifcation];
    }
}
//当程序运行在后台,或者程序没有启动,当注册的本地通知到达时。ios会弹框提示,并播放你设置的声音。
 //当应用程序运行在前台会调用该代理方法,不会播放声音,不会弹框
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    //判断应用程序状态来决定是否弹框
    if (application.applicationState == UIApplicationStateActive) {
        UIAlertView *alterView = [[UIAlertView alloc]initWithTitle:@"本地推送" message:notification.alertBody delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil];
        [alterView show];
    }else if (application.applicationState == UIApplicationStateInactive)
    {
        NSLog(@"UIApplicationStateInactive");
    }else{
        //background
        NSLog(@"UIApplicationStateBackground");
    }
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
    
    //取消所有的本地推送
    //[[UIApplication sharedApplication] cancelAllLocalNotifications];
    //取消某一个
    //[[UIApplication sharedApplication] cancelLocalNotification:<#(UILocalNotification *)#>];
    
    //所有调度道系统中的本地推送
    //[UIApplication sharedApplication].scheduledLocalNotifications;
    
}

转载地址:http://qcsni.baihongyu.com/

你可能感兴趣的文章
来解决一下putty 树莓派 remote side unexpectedly closed network connection
查看>>
[树莓派]Ubuntu MATE 18.04安装ROS环境
查看>>
回首我玩过DE1-SOC(2015) NUC(2017) 树莓派(2020)
查看>>
LeetCode 刷题之路(python版)
查看>>
我的T265 win10上手操作
查看>>
我解决VNC连不上,已经连上但灰屏,以及VNC的一些常用命令使用(ubuntu meta 18.04,树莓派3b+)
查看>>
这种解决bug的感觉很不错,真的,坚持去解决去做。就是这样,和当初做竞赛题一样。
查看>>
现在开始每天做三个leetcode吧
查看>>
ROS安装需要命令(树莓派 ubuntu meta 18.04)
查看>>
我发现有网站copy我的文章...
查看>>
今天装librealsense的一些命令行记录
查看>>
一些问题
查看>>
树莓派连接pixhawk(转载,这篇我觉得写得不错)
查看>>
不光要会,还要十分熟练,十分熟练就让人很有感觉了。
查看>>
考研就是在告诉你要唯物地做成事情,不要做梦,不要想当然。
查看>>
Pixhawk解锁常见错误
查看>>
T265的线似乎就是普通移动硬盘的线
查看>>
其实我感觉做项目就像做题,做有意思的项目就像做竞赛题。做项目和做题应该都算是对知识的一种训练
查看>>
推荐用这种螺母
查看>>
时间不多了,在准备找工作上面,我们就像考研后期一样,多刷真题吧,而不是依旧抱着书看了。
查看>>