iOS8 notification

本文详细介绍了iOS8中通知中心的新特性,包括直接在通知中心进行互动操作、创建自定义通知动作、不同类型的推送实现方式等。通过示例代码展示了如何实现本地、远程及地理位置推送。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  iOS8拥有了全新的通知中心,有全新的通知机制。当屏幕顶部收到推送时只需要往下拉,就能看到快速操作界面,并不需要进入该应用才能操作。在锁屏界面,对于推送项目也可以快速处理。基本上就是让用户尽量在不离开当前页面的前提下处理推送信息,再次提高处理效率。

     能够进行直接互动的短信、邮件、日历、提醒,第三方应用,可以让你不用进入程序就能进行快捷操作,并专注于手中正在做的事情。

  •  在通知横幅快速回复信息,不用进入短信程序;
  •  可直接拒绝或接受邮件邀请;
  •  可对提醒进行标记为完成或推迟;
  •  当第三方应用更新接口后便可直接对应用进行快速操作。



 

用户推送:

 

    //1.创建消息上面要添加的动作(按钮的形式显示出来)
        let firstAction: UIMutableUserNotificationAction = UIMutableUserNotificationAction()
        firstAction.identifier = "action";//按钮的标示
        firstAction.title = "Accept";//按钮的标题
        firstAction.activationMode = UIUserNotificationActivationMode.Foreground;//当点击的时候启动程序
        //    firstAction.authenticationRequired = true;
        //    firstAction.destructive = true;
        
        let secondAction: UIMutableUserNotificationAction = UIMutableUserNotificationAction()
        secondAction.identifier = "action2";
        secondAction.title = "Reject";
        secondAction.activationMode = UIUserNotificationActivationMode.Background;//当点击的时候不启动程序,在后台处理
        secondAction.authenticationRequired = true;//需要解锁才能处理,如果action.activationMode = UIUserNotificationActivationModeForeground;则这个属性被忽略;
        secondAction.destructive = true;
        
        
        //2.创建动作(按钮)的类别集合
        let category: UIMutableUserNotificationCategory = UIMutableUserNotificationCategory()
        category.identifier = "alert"
        category.setActions([firstAction, secondAction], forContext: UIUserNotificationActionContext.Minimal)
        
        //3.创建UIUserNotificationSettings,并设置消息的显示类类型
        let uns: UIUserNotificationSettings = UIUserNotificationSettings(forTypes: (UIUserNotificationType.Alert|UIUserNotificationType.Badge|UIUserNotificationType.Sound), categories: NSSet(object: category))
        
        //4.注册推送
        application.registerUserNotificationSettings(uns)


///////////////////////////////////////////////////////////////////
//    //5.发起本地推送消息

        UIApplication.sharedApplication().cancelAllLocalNotifications()
        let notification = UILocalNotification()
        
        let timeIntervalSinceNow = Double(seconds)
        notification.fireDate = NSDate(timeIntervalSinceNow:timeIntervalSinceNow);
        notification.soundName = UILocalNotificationDefaultSoundName;
        notification.timeZone = NSTimeZone.systemTimeZone();
        notification.alertBody = "计时完成!!!";
         notification.category = "alert";
        notification.userInfo = ["info":"开饭啦"]
        
        UIApplication.sharedApplication().scheduleLocalNotification(notification);

 

 

 

远程推送:

UserRequires call to registerUserNotificationSettings:• SilentInfo.plist UIBackgroundModes array contains remote-notification•
Can use both(一、用户需要调用注册用户推送registerUserNotificationSettings;二、在info.plist文件中UIBackgroundModes必须包含远程通知)

 

离线push数据包带上特定Category字段(字段内容需要前后台一起定义,必须要保持一致),手机端收到时,就能展示上述代码对应Category设置的按钮,和响应按钮事件。

// payload example:  {"aps":{"alert":"Incoming call", "sound":"default", "badge": 1, "category":"incomingCall"}}

重大修改: 离线push数据包之前能带的数据最多为256字节,现在APPLE将该数值放大到2KB。 这个应该是只针对IOS8的。

 

 

   [[UIApplication sharedApplication] registerForRemoteNotifications];//注册远程通知

 

 

 

地理位置推送:

这个推送是新的API才有的特性,必须配合CLLocation定位一起使用。(导入CoreLocation.framework

 

 

   //注册地理位置推送
        let locationMan:CLLocationManager = CLLocationManager()
        locationMan.delegate = self
        locationMan.requestWhenInUseAuthorization()
 

//地理位置推送通知
func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus){
let canUseLocationNotifications = (status == CLAuthorizationStatus.AuthorizedWhenInUse);
if (canUseLocationNotifications) {
startShowLocationNotification();
}

}



func startShowLocationNotification()
{
var local2D: CLLocationCoordinate2D = CLLocationCoordinate2DMake( 123.0, 123.0)
var locNotification: UILocalNotification = UILocalNotification();
locNotification.alertBody = "你接收到了";
locNotification.regionTriggersOnce = true;
locNotification.region = CLCircularRegion(center: local2D, radius: 45, identifier: "local-identity")
UIApplication.sharedApplication().scheduleLocalNotification(locNotification);
}

 

如果没有开启Core Location 那么上面的didReceiveLocalNotification不会被调用

 

 AppDelegate.m里面对通知结果进行处理:

    //本地推送通知
    func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings){
        
        //成功注册registerUserNotificationSettings:后,回调的方法
        println("%@",notificationSettings);
    }
    
    func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification){
        //收到本地推送消息后调用的方法
        println("%@",notification);
        
        
        let dict:[NSObject : AnyObject]? = notification.userInfo!;
        if ((dict) != nil) {
            let alert = UIAlertView()
            alert.title = "开饭啦"//String(dict!["info"])
            //            alert.message = "开饭啦"
            alert.addButtonWithTitle("OK")
            alert.show()
        }
        
        let region: CLRegion? = notification.region;
        if (region != nil) {
            let alert = UIAlertView()
            alert.title = "你的位置"//String(dict!["info"])
            //            alert.message = "开饭啦"
            alert.addButtonWithTitle("OK")
            alert.show()
        }
        
        
        
    }
    
    func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forLocalNotification notification: UILocalNotification, completionHandler: () -> Void){
        //在非本App界面时收到本地消息,下拉消息会有快捷回复的按钮,点击按钮后调用的方法,根据identifier来判断点击的哪个按钮,notification为消息内容
        println("%@----%@",identifier,notification);
        
        completionHandler();//处理完消息,最后一定要调用这个代码块
    }
    
    //远程推送通知
    func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData){
        //向APNS注册成功,收到返回的deviceToken
        var token: String = NSString(format: "%@", [deviceToken]);
        token = token.stringByReplacingOccurrencesOfString( "<", withString: "", options: nil, range: nil)
        token = token.stringByReplacingOccurrencesOfString( ">", withString: "", options: nil, range: nil)
        token = token.stringByReplacingOccurrencesOfString( " ", withString: "", options: nil, range: nil)
        println(token)
    }
    
    func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError){
        //向APNS注册失败,返回错误信息error
    }
    
    func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]){
        //收到远程推送通知消息
        
    }
    
    
    func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forRemoteNotification userInfo: [NSObject : AnyObject], completionHandler: () -> Void){
        //在没有启动本App时,收到服务器推送消息,下拉消息会有快捷回复的按钮,点击按钮后调用的方法,根据identifier来判断点击的哪个按钮
    }
    

 当app被kill后启动接收通知:

  let localNotify:  UILocalNotification? = launchOptions![UIApplicationLaunchOptionsLocalNotificationKey] as? UILocalNotification;
        if(localNotify != nil)
        {
        }
        
        let userInfo: AnyObject? = launchOptions![UIApplicationLaunchOptionsRemoteNotificationKey];
        if(userInfo != nil)
        {
        }

 感谢:http://blog.youkuaiyun.com/yujianxiang666/article/details/35260135

 

 

 

  • 大小: 179.8 KB
内容概要:本文深入探讨了Kotlin语言在函数式编程和跨平台开发方面的特性和优势,结合详细的代码案例,展示了Kotlin的核心技巧和应用场景。文章首先介绍了高阶函数和Lambda表达式的使用,解释了它们如何简化集合操作和回调函数处理。接着,详细讲解了Kotlin Multiplatform(KMP)的实现方式,包括共享模块的创建和平台特定模块的配置,展示了如何通过共享业务逻辑代码提高开发效率。最后,文章总结了Kotlin在Android开发、跨平台移动开发、后端开发和Web开发中的应用场景,并展望了其未来发展趋势,指出Kotlin将继续在函数式编程和跨平台开发领域不断完善和发展。; 适合人群:对函数式编程和跨平台开发感兴趣的开发者,尤其是有一定编程基础的Kotlin初学者和中级开发者。; 使用场景及目标:①理解Kotlin中高阶函数和Lambda表达式的使用方法及其在实际开发中的应用场景;②掌握Kotlin Multiplatform的实现方式,能够在多个平台上共享业务逻辑代码,提高开发效率;③了解Kotlin在不同开发领域的应用场景,为选择合适的技术栈提供参考。; 其他说明:本文不仅提供了理论知识,还结合了大量代码案例,帮助读者更好地理解和实践Kotlin的函数式编程特性和跨平台开发能力。建议读者在学习过程中动手实践代码案例,以加深理解和掌握。
内容概要:本文深入探讨了利用历史速度命令(HVC)增强仿射编队机动控制性能的方法。论文提出了HVC在仿射编队控制中的潜在价值,通过全面评估HVC对系统的影响,提出了易于测试的稳定性条件,并给出了延迟参数与跟踪误差关系的显式不等式。研究为两轮差动机器人(TWDRs)群提供了系统的协调编队机动控制方案,并通过9台TWDRs的仿真和实验验证了稳定性和综合性能改进。此外,文中还提供了详细的Python代码实现,涵盖仿射编队控制类、HVC增强、稳定性条件检查以及仿真实验。代码不仅实现了论文的核心思想,还扩展了邻居历史信息利用、动态拓扑优化和自适应控制等性能提升策略,更全面地反映了群体智能协作和性能优化思想。 适用人群:具备一定编程基础,对群体智能、机器人编队控制、时滞系统稳定性分析感兴趣的科研人员和工程师。 使用场景及目标:①理解HVC在仿射编队控制中的应用及其对系统性能的提升;②掌握仿射编队控制的具体实现方法,包括控制器设计、稳定性分析和仿真实验;③学习如何通过引入历史信息(如HVC)来优化群体智能系统的性能;④探索中性型时滞系统的稳定性条件及其在实际系统中的应用。 其他说明:此资源不仅提供了理论分析,还包括完整的Python代码实现,帮助读者从理论到实践全面掌握仿射编队控制技术。代码结构清晰,涵盖了从初始化配置、控制律设计到性能评估的各个环节,并提供了丰富的可视化工具,便于理解和分析系统性能。通过阅读和实践,读者可以深入了解HVC增强仿射编队控制的工作原理及其实际应用效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值