美文网首页iOS事件响应机制
ios推送:本地通知UILocalNotification

ios推送:本地通知UILocalNotification

作者: 韩七夏 | 来源:发表于2016-04-05 19:02 被阅读981次

    //发送通知

    UILocalNotification *notification=[[UILocalNotification alloc] init];

    if (notification!=nil) {

    NSDate *now=[NSDate new];

    notification.fireDate=[now dateByAddingTimeInterval:10];//10秒后通知

    notification.repeatInterval=0;//循环次数,kCFCalendarUnitWeekday一周一次

    notification.timeZone=[NSTimeZone defaultTimeZone];

    notification.applicationIconBadgeNumber=1; //应用的红色数字

    notification.soundName= UILocalNotificationDefaultSoundName;//声音,可以换成alarm.soundName = @"myMusic.caf"

    //去掉下面2行就不会弹出提示框

    notification.alertBody=@"通知内容";//提示信息 弹出提示框

    notification.alertAction = @"打开";  //提示框按钮

    //notification.hasAction = NO; //是否显示额外的按钮,为no时alertAction消失

    // NSDictionary *infoDict = [NSDictionary dictionaryWithObject:@"someValue" forKey:@"someKey"];

    //notification.userInfo = infoDict; //添加额外的信息

    [[UIApplication sharedApplication] scheduleLocalNotification:notification];

    }

    [notification release];

    复制代码

    取消通知

    复制代码

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Override point for customization after application launch.

    application.applicationIconBadgeNumber = 0;

    // Add the view controller's view to the window and display.

    [window addSubview:viewController.view];

    [window makeKeyAndVisible];

    return YES;

    }

    - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {

    //点击提示框的打开

    application.applicationIconBadgeNumber = 0;

    }

    - (void)applicationDidBecomeActive:(UIApplication *)application {

    //当程序还在后台运行

    application.applicationIconBadgeNumber = 0;

    }

    ///////////////////////////////////////

    iOS 4.0之后,我们就多了一种推送选择,即本地推送,可以减轻一些服务器的压力。今天和大家简单分享下iOS4里的本地推送。

    1、增加一个本地推送

    //设置20秒之后

    NSDate *date = [NSDate dateWithTimeIntervalSinceNow:20];

    //chuagjian一个本地推送

    UILocalNotification *noti = [[[UILocalNotification alloc] init] autorelease];

    if (noti) {

    //设置推送时间

    noti.fireDate = date;

    //设置时区

    noti.timeZone = [NSTimeZone defaultTimeZone];

    //设置重复间隔

    noti.repeatInterval = NSWeekCalendarUnit;

    //推送声音

    noti.soundName = UILocalNotificationDefaultSoundName;

    //内容

    noti.alertBody = @"推送内容";

    //显示在icon上的红色圈中的数子

    noti.applicationIconBadgeNumber = 1;

    //设置userinfo 方便在之后需要撤销的时候使用

    NSDictionary *infoDic = [NSDictionary dictionaryWithObject:@"name" forKey:@"key"];

    noti.userInfo = infoDic;

    //添加推送到uiapplication

    UIApplication *app = [UIApplication sharedApplication];

    [app scheduleLocalNotification:noti];

    }

    2、程序运行时接收到本地推送消息

    - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification*)notification

    {

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"接收到本地提醒 in app"

    message:notification.alertBody

    delegate:nil

    cancelButtonTitle:@"确定"

    otherButtonTitles:nil];

    [alert show];

    //这里,你就可以通过notification的useinfo,干一些你想做的事情了

    application.applicationIconBadgeNumber -= 1;

    }

    3、取消一个本地推送

    UIApplication *app = [UIApplication sharedApplication];

    //获取本地推送数组

    NSArray *localArr = [app scheduledLocalNotifications];

    //声明本地通知对象

    UILocalNotification *localNoti;

    if (localArr) {

    for (UILocalNotification *noti in localArr) {

    NSDictionary *dict = noti.userInfo;

    if (dict) {

    NSString *inKey = [dict objectForKey:@"key"];

    if ([inKey isEqualToString:key]) {

    if (localNoti){

    [localNoti release];

    localNoti = nil;

    }

    localNoti = [noti retain];

    break;

    }

    }

    }

    //判断是否找到已经存在的相同key的推送

    if (!localNoti) {

    //不存在 初始化

    localNoti = [[UILocalNotification alloc] init];

    }

    if (localNoti && !state) {

    //不推送 取消推送

    [app cancelLocalNotification:localNoti];

    [localNoti release];

    return;

    }

    }

    01. 第一步:创建本地推送

    02. // 创建一个本地推送

    03. UILocalNotification *notification = [[[UILocalNotification alloc] init] autorelease];

    04. //设置10秒之后

    05. NSDate *pushDate = [NSDate dateWithTimeIntervalSinceNow:10];

    06. if (notification != nil) {

    07.     // 设置推送时间

    08.     notification.fireDate = pushDate;

    09.     // 设置时区

    10.     notification.timeZone = [NSTimeZone defaultTimeZone];

    11.     // 设置重复间隔

    12.     notification.repeatInterval = kCFCalendarUnitDay;

    13.     // 推送声音

    14.     notification.soundName = UILocalNotificationDefaultSoundName;

    15.     // 推送内容

    16.     notification.alertBody = @"推送内容";

    17.     //显示在icon上的红色圈中的数子

    18.     notification.applicationIconBadgeNumber = 1;

    19.     //设置userinfo 方便在之后需要撤销的时候使用

    20.     NSDictionary *info = [NSDictionary dictionaryWithObject:@"name"forKey:@"key"];

    21.     notification.userInfo = info;

    22.     //添加推送到UIApplication

    23.     UIApplication *app = [UIApplication sharedApplication];

    24.     [app scheduleLocalNotification:notification];

    25.

    26. }

    27.

    28. 第二步:接收本地推送

    29. - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification*)notification{

    30.     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"iWeibo" message:notification.alertBody delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];

    31.     [alert show];

    32.     // 图标上的数字减1

    33.     application.applicationIconBadgeNumber -= 1;

    34. }

    35.

    36. 第三步:解除本地推送

    37. // 获得 UIApplication

    38. UIApplication *app = [UIApplication sharedApplication];

    39. //获取本地推送数组

    40. NSArray *localArray = [app scheduledLocalNotifications];

    41. //声明本地通知对象

    42. UILocalNotification *localNotification;

    43. if (localArray) {

    44.     for (UILocalNotification *noti in localArray) {

    45.         NSDictionary *dict = noti.userInfo;

    46.         if (dict) {

    47.             NSString *inKey = [dict objectForKey:@"key"];

    48.             if ([inKey isEqualToString:@"对应的key值"]) {

    49.                 if (localNotification){

    50.                     [localNotification release];

    51.                     localNotification = nil;

    52.                 }

    53.                 localNotification = [noti retain];

    54.                 break;

    55.             }

    56.         }

    57.     }

    58.

    59.     //判断是否找到已经存在的相同key的推送

    60.     if (!localNotification) {

    61.         //不存在初始化

    62.         localNotification = [[UILocalNotification alloc] init];

    63.     }

    64.

    65.     if (localNotification) {

    66.         //不推送 取消推送

    67.         [app cancelLocalNotification:localNotification];

    68.         [localNotification release];

    69.         return;

    70.     }

    71. }

    相关文章

      网友评论

        本文标题:ios推送:本地通知UILocalNotification

        本文链接:https://www.haomeiwen.com/subject/xtbplttx.html