iOS8 notification

来源:互联网 发布:线切割快走丝编程软件 编辑:程序博客网 时间:2024/06/07 06:46

  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.csdn.net/yujianxiang666/article/details/35260135

 

 

 

  • 大小: 179.8 KB
  • CounterXib.zip (111.5 KB)
  • 描述: demo下载
  • 下载次数: 5
  • 查看图片附件
原创粉丝点击