推送通知分本地推送和远程推送通知。
——— 推送流程
对于远程推送通知,我们是基于APNs与苹果设备在联网时进行长连接。开发人员需要将设备的UDID和和应用的唯一标识AppID传给APNs服务器从而换取设备的deviceToken。然后将deviceToken交给公司的服务器去管理(极光推送服务器)。服务器将deviceToken传给APNs服务器,它将内容信息推送到对应的设备的应用上。请看下图。
为了减少APNs的工作量和开发程度,我们一般会优先选择极光推送。在此我们需要在苹果开发者官网准备一堆的证书配置。是为了让我们的“电脑,真机,应用”都有具备推送的资格。 在这里我只有简单的说下而已了。
下来虾米在本地自拟推送 编了一段代码。
在storyBoard上添加按钮和控制器 如图:
应用在后台,当点击了推送通知时 会push到正文的控制器。
话不多说,实现代码如下:
//
// JHViewController.m
// 本地推送通知JH
//
// Created by cjj on 15-10-23.
// Copyright (c) 2015年 jh.chen. All rights reserved.
//
#import "JHViewController.h"
#import "JHDetailController.h"
@interface JHViewController ()
- (IBAction)schedule;
- (IBAction)cancel;
@end
@implementation JHViewController
- (void)viewDidLoad
{
[super viewDidLoad];
}
/**
* 自己虚拟一个服务器发送远程推送通知
*/
- (IBAction)schedule
{
// 创建本地推送通知对象
UILocalNotification *ln = [[UILocalNotification alloc] init];
// 音效文件名
ln.soundName = @"whale.wav";
// 锁屏显示的小标题
ln.alertAction = @"查看新闻吧";
// 通知的具体内容
ln.alertBody = @"最近新闻:Xcodeghost事件引起苹果APP安全性问题。。。";
// 通知第一次发出的时间
ln.fireDate = [NSDate dateWithTimeIntervalSinceNow:7.0];
// 设置时区
ln.timeZone = [NSTimeZone defaultTimeZone];
// 设置APP图标数字
ln.applicationIconBadgeNumber = 10;
// 设置通知的额外信息
ln.userInfo = @{
@"icon" : @"jj.png",
@"title" : @"重大新闻",
@"time" : @"2015 10 24",
@"boby" : @"JH.chen重返github"
};
// 调度通知 (启动任务)
[[UIApplication sharedApplication] scheduleLocalNotification:ln];
}
- (IBAction)cancel
{
NSArray *note = [[UIApplication sharedApplication] scheduledLocalNotifications];
NSLog(@"%----@----",note);
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UILocalNotification *)note
{
JHDetailController *detailVc = segue.destinationViewController;
detailVc.userinfo = note.userInfo;
}
@end
//
// JHAppDelegate.m
// 本地推送通知JH
//
// Created by cjj on 15-10-23.
// Copyright (c) 2015年 jh.chen. All rights reserved.
//
#import "JHAppDelegate.h"
#import "JHViewController.h"
@interface JHAppDelegate()
@property (nonatomic, weak) UILabel *label;
@end
@implementation JHAppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UILabel *label = [[UILabel alloc] init];
label.backgroundColor = [UIColor greenColor];
label.font = [UIFont systemFontOfSize:11];
label.numberOfLines = 0;
label.text = [launchOptions description];
label.frame = CGRectMake(115, 100, 100, 100);
// [self.window.rootViewController.view addSubview:label];
[[[self.window.rootViewController.childViewControllers firstObject] view] addSubview:label];
self.label = label;
UILocalNotification *note = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
if (note) {
label.text = @"点击本地通知启动程序";
JHViewController *homeVc = [self.window.rootViewController.childViewControllers firstObject];
[homeVc performSegueWithIdentifier:@"home2detai" sender:note];
} else {
label.text = @"直接点击APP图标启动程序";
}
return YES;
}
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
// 程序正处在前台运行,直接返回
if(application.applicationState == UIApplicationStateActive) return;
JHViewController *homeVc = [self.window.rootViewController.childViewControllers firstObject];
// push到下一个控制器
[homeVc performSegueWithIdentifier:@"home2detai" sender:notification];
}
如果大虾看了。 有什么好的建议 请提醒下虾米 或者联系虾米 ^_^ !!
本人联系方式
QQ:584837022
微信:foreverlovewillgoon