远程推送/本地推送通知demo

推送通知分本地推送和远程推送通知。

——— 推送流程

对于远程推送通知,我们是基于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



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值