iOS 玩转推送通知

简介:

前言


推送通知,想必大家都很熟悉,关于原理之类的,这里就不过多阐述。在这里我们主要介绍下iOS8及iOS9之后关于推送的新功能。大家可能见过听说过,但可能有一些朋友并没有上手做过。这篇文章便给大家详细介绍推送中的快捷按钮及快捷回复等功能的实现。


快捷点赞,如微博点赞功能


效果图大家可以先看下:

首先先说如何为自己的推送添加快捷功能,该Demo中的动作 “赞”,代码如下:


//创建消息上面要添加的动作
     UIMutableUserNotificationAction *action1 = [[UIMutableUserNotificationAction alloc] init];
     action1.identifier = kNotificationActionIdentifileStar;
     action1.title = @ "赞" ;
     //当点击的时候不启动程序,在后台处理
     action1.activationMode = UIUserNotificationActivationModeBackground;
     //需要解锁才能处理(意思就是如果在锁屏界面收到通知,并且iPhone设置了屏幕锁,点击了赞不会直接进入我们的回调进行处理,而是需要输入屏幕锁密码之后才进入我们的回调),如果action.activationMode = UIUserNotificationActivationModeForeground;则这个属性被忽略;
     action1.authenticationRequired = YES;
     /*
      destructive属性设置后,在通知栏或锁屏界面左划,按钮颜色会变为红色
      如果两个按钮均设置为YES,则均为红色(略难看)
      如果两个按钮均设置为NO,即默认值,则第一个为蓝色,第二个为浅灰色
      如果一个YES一个NO,则都显示对应的颜色,即红蓝双色 (CP色)。
      */
     action1.destructive = NO;


关于参数的意思,上方代码中已经有详细的解释了,那么该动作按钮创建完之后,我们需要的就是创建动作集合,并进行注册,代码如下:


//创建动作(按钮)的类别集合
     UIMutableUserNotificationCategory *category = [[UIMutableUserNotificationCategory alloc] init];
     //这组动作的唯一标示(kNotificationCategoryIdentifile为我定义的一个宏,可自行定义)
     category.identifier = kNotificationCategoryIdentifile;
     //最多支持两个,如果添加更多的话,后面的将被忽略
     [category setActions:@[action1, action2] forContext:(UIUserNotificationActionContextMinimal)];
     //创建UIUserNotificationSettings,并设置消息的显示类类型
     UIUserNotificationSettings *uns = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound) categories:[NSSet setWithObject:category]];
     [[UIApplication sharedApplication] registerUserNotificationSettings:uns];


到这里便能实现推送中快捷点赞的功能了。当然我们还会注意到iPhone中短信有快捷回复功能,这个是怎么实现的呢。 客官请往下继续看。


快捷回复,如短信中下拉快捷回复功能


老规矩,还是先上效果图,如下:


这个评论的动作和上面的“赞“只是多了一个属性的设置,即”behavior“。代码如下:


//第二个动作
     UIMutableUserNotificationAction *action2 = [[UIMutableUserNotificationAction alloc] init];
     action2.identifier = kNotificationActionIdentifileComment;
     action2.title = @ "评论" ;
     //当点击的时候不启动程序,在后台处理
     action2.activationMode = UIUserNotificationActivationModeBackground;
     //设置了behavior属性为 UIUserNotificationActionBehaviorTextInput 的话,则点击了该按钮会出现输入框供输入
     action2.behavior = UIUserNotificationActionBehaviorTextInput;


细心的朋友可能注意到我在快捷回复输入内容时候,输入框右边的按钮名字和短信的快捷回复按钮名字并不一样(短信的为”发送“,该Demo为”评论“),这个按钮我们也是可以进行自定义的,代码如下:


//这个字典定义了当点击了评论按钮后,输入框右侧的按钮名称,如果不设置该字典,则右侧按钮名称默认为 “发送”
     action2.parameters = @{UIUserNotificationTextInputActionButtonTitleKey: @ "评论" };


到这里,该Demo的基本功能就已经差不多完全实现了。剩下的就是回调了,回调走的函数便是AppDelegate中的代理方法了,如下:


// 本地通知回调函数,当应用程序在前台时调用
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification;
//在非本App界面时收到本地消息,下拉消息会有快捷回复的按钮,点击按钮后调用的方法,根据identifier来判断点击的哪个按钮,notification为消息内容
- (void)application:(UIApplication *)application handleActionWithIdentifier:(nullable NSString *)identifier forLocalNotification:(UILocalNotification *)notification withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void(^)())completionHandler;


结束语


1:以上代码是只注册了本地推送的,远程推送和本地推送类似,推送消息如果要触发快捷动作,则需要在消息本体中含有上面category的identifier标志。如 


//这个"Identifile"的需要和你在代码中设置的kNotificationCategoryIdentifile保持一致
{ "aps" :{ "Identifile" : "test remote notification" "sound" : "default" "badge" : 1,  "category" : "category" }}


2:在码代码时候如果需要兼容低版本的话,请注意在代码中进行版本的判断。

3:最后奉上Demo地址。


目录
相关文章
|
iOS开发
IOS - iOS 12 的“隐式推送”功能怎么用?
IOS - iOS 12 的“隐式推送”功能怎么用?
406 0
IOS - iOS 12 的“隐式推送”功能怎么用?
|
iOS开发
iOS的推送通知,DeviceToken
iOS的推送通知,DeviceToken
223 2
|
消息中间件 存储 API
iOS小技能:队列管理推送通知,解决收款到账并发语音播报问题。
需求:收款到账语音提醒功能 NSE是比Voip更优雅的解决方案,完成迁移后,总体代码量也比Voip方案少了不少。
293 0
iOS小技能:队列管理推送通知,解决收款到账并发语音播报问题。
|
缓存 应用服务中间件 API
iOS 推送通知(下)
iOS 推送通知
253 0
iOS 推送通知(下)
|
存储 调度 iOS开发
iOS 推送通知(上)
iOS 推送通知(上)
680 0
iOS 推送通知(上)
|
传感器 iOS开发
iOS 14.2正式版推送,多项改进,建议更新
近日苹果推送了iOS/iPadOS 14.2的正式版,虽然更新包只有700多兆,但内容还是非常丰富的。
135 0
iOS 14.2正式版推送,多项改进,建议更新
|
开发工具 iOS开发 开发者
iOS13即将到来,iOS推送Device Token适配详解
关于提前适配iOS13 苹果推送DeviceToken的通知 随着苹果iOS13系统即将发布,个推提前推出DeviceToken适配方案,以确保新版本的兼容与APP推送服务的正常使用。iOS13的一个重要变化是"[deviceTokendescription]" 会受不同运行环境及系统的影响而发生变化,如果未及时做好适配工作,会导致SDK绑定到错误的DeviceToken,从而影响APN推送。
3559 0
|
开发工具 Android开发 iOS开发
搞定iOS推送SDK集成,看这篇文章就够了!
一次偶然的机会,公司的项目要用到推送,我自己本来就很懒,不愿意去弄整套APNS的流程,刚好之前跟朋友聊起过他们的产品中集成了个推的Android推送,说是体验还可以,那这次我就试一下他们的iOS推送。
3109 0