码迷,mamicode.com
首页 > 其他好文 > 详细

本地推送的使用(干货)

时间:2016-04-27 00:22:21      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:

一、推送通知有5种不同的呈现效果

 

1、在屏幕顶部显示一块横幅(显示具体内容)

2、在屏幕中间弹出一个UIAlertView(显示具体内容)

3、在锁屏界面显示一块横幅(锁屏状态下,显示具体内容)

4、更新app图标的数字(说明新内容的数量)

5、播放音效(提醒作用)

 

 

二、如何发出本地推送通知

 

1、创建本地推送通知对象

UILocalNotification *ln = [[UILocalNotification alloc] init];

 

2、设置本地推送通知属性

 

(1)推送通知的触发时间(何时发出推送通知)

@property(nonatomic,copy) NSDate *fireDate;

 

(2)推送通知的具体内容

@property(nonatomic,copy) NSString *alertBody;

 

(3)在锁屏时显示的动作标题(完整标题:“滑动来” + alertAction)

@property(nonatomic,copy) NSString *alertAction;

 

(4)音效文件名

@property(nonatomic,copy) NSString *soundName;

 

(5)app图标数字

@property(nonatomic) NSInteger applicationIconBadgeNumber;

 

(6)每隔多久重复发一次推送通知

@property(nonatomic) NSCalendarUnit repeatInterval;

 

(7)点击推送通知打开app时显示的启动图片

@property(nonatomic,copy) NSString *alertLaunchImage;

 

(8)附加的额外信息

@property(nonatomic,copy) NSDictionary *userInfo;

 

(9)时区

@property(nonatomic,copy) NSTimeZone *timeZone;

(一般设置为[NSTimeZone defaultTimeZone] ,跟随手机的时区)

 

(10)在通知中心里显示的标题

@property(nonatomic,copy) NSString *title;

 

 

(11)显示滑动解锁的按钮:设置成no,则显示“滑动来查看”,不显示用户设定的内容

@property(nonatomic) BOOL *hasAction;

 

3、推送通知的发出

 

(1)调度本地推送通知(调度完毕后,推送通知会在特地时间fireDate发出)

[[UIApplication sharedApplication] scheduleLocalNotification:ln];

 

(2)获得被调度(定制)的所有本地推送通知

@property(nonatomic,copy) NSArray *scheduledLocalNotifications;

(已经发出且过期的推送通知就算调度结束,会自动从这个数组中移除)

 

(3)取消调度本地推送通知

- (void)cancelLocalNotification:(UILocalNotification *)notification;

- (void)cancelAllLocalNotifications;

 

(4)立即发出本地推送通知

- (void)presentLocalNotificationNow:(UILocalNotification *)notification;

 

 

 

三、点击本地推送通知

 

1、当用户点击本地推送通知,会自动打开app,这里有2种情况

 

(1) 状态:app并没有关闭,一直隐藏在后台

     操作:让app进入前台,并会调用AppDelegate的下面方法(并非重新启动app)  

 - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification;

 

(2) 状态:app已经被关闭(进程已死)

         操作:启动app,启动完毕会调用AppDelegate的下面方法

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

  launchOptions参数通过UIApplicationLaunchOptionsLocalNotificationKey取出本地推送通知对象

 

 

2、关于页面跳转的逻辑判断(要进行程序所处状态的逻辑判断)

 

(1)程序在前台运行时,不需要根据本地推送进行跳转操作

 

(2)程序在后台运行时,跳转到通知逻辑指定的页面

 

(3)程序关闭时,跳转到通知逻辑指定的页面

 

(4)程序第一次运行(本地推送还没有发生),是不需要加载推送通知逻辑的

 

 

 

四、关于注册通知(获得许可)

 

1、在iOS 8.0中,如果要使用本地通知,需要得到用户的许可

 

2、设置方式

 

(1)设置setting

 

UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];

 

(2)应用程序对象注册推送

 

[[UIApplication sharedApplication] registerUserNotificationSettings:settings];

 

(3)关于分类categories

 

通过分类可以给推送通知添加快捷回复,包括按钮和文本框

 

 

五、category的设置

 

1、在通知处显示按钮,可以点击进行快捷回复,默认会回到程序中。另外可以设置快捷回复的文本框,进行信息发送。

   

2、设置

 

(1)配置可变的category对象

 

UIMutableUserNotificationCategory *category = [[UIMutableUserNotificationCategory alloc]init];

    

(2)设置标识符

 

category.identifier = @"cate";

    

(3)为category 准备 action(动作按钮),这点类似  alertViewController

 

 UIMutableUserNotificationAction*action = [[UIMutableUserNotificationAction alloc]init];

    action.title = @“已阅读”;

    action.identifier = @"action1”;

 //让按钮的响应在后台处理,不用跳转到应用程序中去

    action.activationMode = UIUserNotificationActivationModeBackground;

//true时,用户在点击动作之前必须确认自己的身份

    action.authenticationRequired = NO;

 //在通知中心显示不同背景颜色

    action.destructive = NO;

 

    

 

(4)设置快捷回复的文本框,点击按钮出现输入文本框进行快捷回复

 

    action.behavior = UIUserNotificationActionBehaviorTextInput;

    

 

(5)添加动作到分类

    [category setActions:@[action1,action2] forContext:UIUserNotificationActionContextDefault];

 

(6) 在注册通知的时候,添加分类进去

    UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound |  UIUserNotificationTypeAlert  categories:[NSSet setWithObjects:category, nil]];

    

    [[UIApplication sharedApplication]registerUserNotificationSettings:setting];

 

 

3、动作按钮的响应(application的代理方法)

 

(1)动作按钮的响应事件————不带文本框信息

 

- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification completionHandler:(void (^)())completionHandler

    if ([identifier isEqualToString:@"action1”]) { //点击了标记已读

        NSLog(@"点击了标记已读");

    }

    if ([identifier isEqualToString:@"action2”]) { //点击了删除

        NSLog(@"点击了删除");

    }

//这里执行一下block

    completionHandler();

}

 

 

(2)动作按钮的响应事件————快捷回复带文本框信息

 

- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void (^)())completionHandler

{

    if ([identifier isEqualToString:@"action2”]) { //点击了标记已读

//注意key

        NSLog(@"%@",responseInfo[UIUserNotificationActionResponseTypedTextKey]);

    } 

    completionHandler();

}

 

本地推送的使用(干货)

标签:

原文地址:http://www.cnblogs.com/cleven/p/5437108.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!