IOS8 通知中心(Notification Center)新特性

 

 苹果keynote展示push通知的一些优化,特别的允许用户能够直接在push上进行交互,这么牛逼的功能,当然第一时间研究。

下面看看具体的产品细节和技术实现:

 

产品细节:

 

以下都是使用本地push测试的:(离线push效果一样)

 

1、状态栏、锁屏状态下和通知中心中的效果如下:(这里最多只能设置两个按键)

     


    


    


2、通知展示设置为Alert模式时,点击Options,会弹出操作选项如下:( 除去launch和close,这里最多能够设置四个选项)

 

      


     

 

Apple只提供了两种按钮点击后的响应模式:

1、    点击后应用在后台被唤醒  像赞这种轻操作则可以使用这种模式

2、    点击后应用被唤醒到前台  评论回复这些需要用户进一步操作的,适合这种情况。

 

在WWDC keynote我们看到的短信push演示视频中,收到短信push后能直接播放语音,且能够在当前屏幕直接录音回复的高大上操作,Apple还是木有开放给普通应用使用。(目前在API文档中,只提供了上述的两种操作模式)

 

 

 

技术实现细节:

 

一、注册User Notification

 

1、注册API改变

原来注册离线push的API

- (void)registerForRemoteNotificationTypes:(UIRemoteNotificationType)types 

已经废弃。

 

转为使用:

- (void)registerForRemoteNotificationsNS_AVAILABLE_IOS(8_0);

 

 

 

2、增加注册UserNotification (用户可操作的push)的API,用于注册PUSH中展示的按钮和按钮响应事件。

 

3、增加注册UserNotification成功的回调。原来注册离线成功和失败的回调没有改变

 

 

二、设置push中的操作按钮信息

 

1、注册单个按钮的title、identifier和按钮模式等信息

 

 

按钮的activationMode有以下两种模式:

UIUserNotificationActivationModeForeground:点击按钮后,会呼起APP

UIUserNotificationActivationModeBackground:点击按钮后,APP在后台运行

 

 

2、多个按钮组合成一个Category。用于在一条push中展示多个操作按钮。Category也有identifier,可以注册多个Category,不同的push类型可以使用不同的Category。实现不同push类型中展示不同操作按钮。

 

每种Category的按钮有两种展示情况:

一个是默认模式(对于Alert模式时,弹出的操作选项,最多四个按钮)

一个是最少展示模式(对应状态栏、锁屏状态下和通知中心中展示的按钮,最多两个按钮)。

 

 

3、注册UserNotification时,设置NotificationType和Categories

NotificationType 包括应用图标上的数字、push声音、和push弹框三种

 

 

4、后台触发离线push字段需增加字段和离线包大小修改

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

 

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

 

5、按钮点击事件回调

用户点击push上的按钮后,APP就能收到如下回调事件,在该回调里响应按钮事件。原来收到push的点击回调事件没有改变。

 

 

 

 

三、新增Location Notification

 

当用户进入或者离开某个在应用中注册的区域时,应用能收到通知。

   


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS 10及以上版本,可以使用`UNUserNotificationCenterDelegate`协议的`userNotificationCenter(_:didReceive:withCompletionHandler:)`方法来接收到新通知。如果您想要在接收到新通知时删除以前发送的通知,可以使用`UNUserNotificationCenter`类提供的`removeDeliveredNotifications(withIdentifiers:)`方法。 具体实现如下: 1. 在您的`AppDelegate`类,将`UNUserNotificationCenterDelegate`设置为应用的通知中心的代理: ``` class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { let center = UNUserNotificationCenter.current() center.delegate = self // ... return true } } ``` 2. 实现`UNUserNotificationCenterDelegate`协议的`userNotificationCenter(_:didReceive:withCompletionHandler:)`方法: ``` func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { let notificationIdentifier = response.notification.request.identifier let center = UNUserNotificationCenter.current() center.removeDeliveredNotifications(withIdentifiers: [notificationIdentifier]) completionHandler() } ``` 在这个方法,获取到`response`参数通知的唯一标识符,并使用`UNUserNotificationCenter`类的`removeDeliveredNotifications(withIdentifiers:)`方法来删除以前发送的通知。最后,一定要调用`completionHandler()`方法来告诉系统已经处理完通知了。 注意:这个方法只会在用户点击通知时被调用,如果用户直接在通知中心清除了通知,这个方法并不会被调用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值