• iOS本地推送


    iOS的本地通知服务需要使用NSLocalNotification,处理基于时间行为的通知。比如定时通知用户该学习了。
    使用NSLocalNotification一般需要考虑三个方面:
    scheduled time:时间周期,用来指定iOS系统发送通知的日期和时间;
    notification type:通知类型(包括警告信息,动作按钮的标题,应用图标上的badge(数字标记)和播放的声音);
    自定义数据,本地通知可以包含一个dictionary类型的本地数据。
    对本地通知的数量限制,iOS最多允许最近本地通知数量是64个,超过限制的本地通知将被iOS忽略。
    使用示例:

    //发送
    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];      
        }

    //取消

    - (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;
    }

    //other

    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;

            }

    }

  • 相关阅读:
    RabbitMqBase消息队列小结
    PtrSwap不仅仅是原地交换两个数
    InterfaceSummary接口小结
    InterfaceDesign接口设计原则
    InitOrder初始化执行顺序
    golang面向对象编程思想
    golang之工厂模式
    golang之方法
    golang之结构体使用注意事项和细节
    golang之匿名函数结合defer
  • 原文地址:https://www.cnblogs.com/weiboyuan/p/3765619.html
Copyright © 2020-2023  润新知