●  什么是远程推送通知

●  顾名思义,就是从远程服务器推送给客户端的通知(需要联网)

●  远程推送服务,又称为APNs(Apple Push Notification Services)

●  为什么需要远程推送通知?

●  传统获取数据的局限性

• 只要用户关闭了app,就无法跟app的服务器沟通,无法从服务器上获得最新的 数据内容

● 远程推送通知可以解决以上问题
• 不管用户打开还是关闭app,只要联网了,都能接收到服务器推送的远程通知

远程推送通知使用须知

● 所有的苹果设备,在联网状态下,都会与苹果的服务器建立长连接

● 什么是长连接
• 只要联网了,就一直建立连接

● 长连接的作用
• 时间校准
• 系统升级
• 查找我的iPhone
• .....

● 长连接的好处
• 数据传输速度快
• 数据保持最新状态

远程推送流程

获得DeviceToken的流程

1.准备一堆证书(在哪台电脑上用哪台设备调试哪个应用)

>1. CertificateSigningRequest.certSigningRequest:存储着电脑的信息

>2. ios_development.cer :让电脑具备真机调试的功能

>3. 利用设备UDID标识在Devices一栏中注册设备

>4. 创建App ID(应用的唯一标识,Bundle Identifier)

>5. 电脑调试证书 + 设备的UDID + App ID == 描述文件(mobileprovision)

>6. 安装证书: ios_development.cer:电脑能真机调试

                     apple_mj_iphone5_heima_qq.mobileprovision

能做的事情:
能在某条电脑上利用某条设备调试某个应用 >7. 让某个应用增加推送功能(用到App ID + certSigningRequest) >8.
App ID + certSigningRequest == aps_development.cer
App ID + certSigningRequest == aps_production.cer

最终会产生5个文件
CertificateSigningRequest.certSigningRequest:描述电脑信息
ios_development.cer:电脑调试证书(让电脑具备真机调试功能)
apple_mj_iphone5_heima_qq.mobileprovision:描述文件

(在哪台电脑上利用哪台设备调试哪个应用)、

aps_development.cer:推送调试证书(在哪台电脑调试哪个应用的推送服务)

aps_production.cer:推送发布证书

 

配置应用的Bundle Identifier

证书配置01 – 创建App ID

●  注意

●  远程推送只能在真机上测试!因此先要保证真机调试的环境没有问题!

●  远程推送的第一步是要创建App ID

●  目的是说明哪个App需要使用推送服务

●  为远程推送服务创建的App ID一定要是全称,不能带有*

证书配置02 – 为App ID创建APNs SSL证书

● 真机调试用的APNs SSL证书:要在哪台电脑上调试具有推送服务的App

最终得到2个APNs SSL证书
APNs Development iOS:真机调试用的证书
APNs Production iOS:发布程序用的证书
 

证书配置03 – 生成描述文件

证书配置04 – 安装

● 最终会得到3个文件
● aps_development.cer:真机调试用的
● aps_production.cer:发布程序用的
● netease_news_iphone5_home.mobileprovision:描述文件

● 建议:先安装cer文件,再安装mobileprovision文件

注册远程推送通知

● 客户端如果想接收APNs的远程推送通知,必须先注册(得到用户的授权)
● 一般在App启动完毕后就马上注册

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

{

// 注册远程通知
UIRemoteNotificationType type = UIRemoteNotificationTypeAlert |
UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound;
   [application registerForRemoteNotificationTypes:type];
return YES;

}

● 注册成功后会调用AppDelegate的下面方法,得到设备的deviceToken

- (void)application:(UIApplication *)application

didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
NSLog(@"%@", deviceToken);
 }

接收远程推送通知

● 当设备接收到远程推送通知时
● 如果程序是处于关闭状态,系统会在给用户展示远程推送通知的同时,将程序启动

到后台,并调用AppDelegate的下面方法

- (void)application:(UIApplication *)application

didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

● 可以在这个方法中做些数据下载操作,争取在用户点击通知前,就将数据下载完毕

● 下载完毕要调用completionHandler这个block,告知下载完毕

completionHandler(UIBackgroundFetchResultNewData);

点击远程推送通知

● 当用户点击远程推送通知,会自动打开app,这里有2种情况

● app并没有关闭,一直隐藏在后台

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

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

● app已经被关闭(进程已死)
• 启动app,启动完毕会调用AppDelegate的下面方法

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

● launchOptions参数通过UIApplicationLaunchOptionsRemoteNotificationKey 取出远程推送通知对象

实例:
#import "HMAppDelegate.h"

@implementation HMAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 注册远程通知服务(第一次注册服务的时候会弹出提醒框,让用户授权)
[application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert]; UILabel *label = [[UILabel alloc] init];
label.backgroundColor = [UIColor lightGrayColor];
label.frame = CGRectMake(, , , );
label.font = [UIFont systemFontOfSize:];
label.numberOfLines = ;
[self.window.rootViewController.view addSubview:label]; NSDictionary *userInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];
if (userInfo) {
label.text = [userInfo description];
} else {
label.text = @"直接点击app图标启动的程序";
}
return YES;
} /**
* 获得了设备想DeviceToken
*/
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
NSLog(@"注册远程通知成功----%@", deviceToken);
/**
1.将deviceToken发送给公司的服务器
c330833f 248c4fed e87068b6 c4b90ee8 a2b57119 aac2b93d 3f2eb27f e7d44c8c
c330833f 248c4fed e87068b6 c4b90ee8 a2b57119 aac2b93d 3f2eb27f e7d44c8c
*/ /**
2.
*/
} /**
* 接收到远程推送通知时就会调用
*/
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
NSLog(@"接收到远程通知--%@", userInfo[@"userInfo"]);
}
@end

IOS 远程推送通知(UIRemoteNotification)的更多相关文章

  1. iOS 远程推送通知

    1.什么是推送通知 在某些特殊情况下,应用程序被动收到的以不同种界面形式出现的提醒信息 推送通知的作用:可以让不在前台运行的app通知app发生了改变 iOS中得推送通知种类 远程推送通知(Remot ...

  2. iOS 远程推送通知 详解

    1: ios本地通知和远程通知 http://wangjun.easymorse.com/?p=1482 2: 苹果远程通知服务申请激活例图 (外国佬写的.) http://mobiforge.com ...

  3. 转:IOS远程推送通知

    在ios系统中,app应用程序无法在后台完成较多的任务,仅仅允许程序做一些有限的任务(如音视频播放.地理位置信息.voip).然而,如果你想做 一些有趣的事情,并且告知用户,甚至用户没有使用你的app ...

  4. IOS之推送通知(本地推送和远程推送)

    推送通知和NSNotification是有区别的: NSNotification:是看不到的 推送通知:是可以看到的 IOS中提供了两种推送通知 本地推送通知:(Local Notification) ...

  5. IOS远程推送

    IOS远程推送 一.关于推送通知 推送通知,也被叫做远程通知,是在iOS 3.0以后被引入的功能.是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径,是从外部服务器发送到应用程序上的.一般说 ...

  6. iOS远程推送原理及实现过程

    ➠更多技术干货请戳:听云博客 推送通知,是现在的应用必不可少的功能.那么在 iOS 中,我们是如何实现远程推送的呢?iOS 的远程推送原理又是什么呢?在做 iOS 远程推送时,我们会遇到各种各样的问题 ...

  7. iOS远程推送1

    一.APNS 远程推送 1.所有的苹果设备,在联网状态下,都会与苹果服务器建立长连接. 2.长连接:就是只要联网了,就一直建立连接. 3.长连接的作用:时间校准,系统升级,查找我的iPhone. 4. ...

  8. iOS 10推送通知开发

    原文地址:Developing Push Notifications for iOS 10,译者:李剑飞 虽然通知经常被过度使用,但是通知确实是一种获得用户关注和通知他们需要更新或行动的有效方式.iO ...

  9. (七十三)iOS本地推送通知的实现

    iOS的推送通知分为本地推送和网络推送两种,如果App处于挂起状态,是可以发送本地通知的,如果已经被杀掉,则只有定时通知可以被执行,而类似于QQ的那种网络消息推送就无法实现了,因为App的网络模块在被 ...

随机推荐

  1. [V1-Team] 第一周总结

    第一周总结 写在前面 会议名称 会议时间 会议时长 会议地点 第一次周例会 2019/4/1 19:00 70min F楼2层沙发休息处 附Github仓库:WEDO 例会照片 工作情况总结 人员 上 ...

  2. jquery将日期转换成指定格式的字符串

    引用jquery文件,如<script type="text/javascript" src="jquery-1.8.3.min.js"></ ...

  3. echarts Y轴数据类型不同怎么让折线图显示差距不大

    如果希望在同一grid中展示不同数据类型的折线(1000或10%),那么展现出来的折线肯定显示差距很大,那么怎么让这两条折线显示效果差不多,在之前的项目中碰到了这个问题 每条折线对应的是不同的数据组, ...

  4. oracle 日志文件

    --Oracel Grid 11.2的Agent有多个,其中有两个最重要:orarootagent.oraagent --它们有各自的日志文件,这些Agent的日志文件位于: $grid_home/l ...

  5. linux运维配置讲解--sshd-config

    文件配置: 1, /etc/ssh/sshd_config ssh配置文件 2, /etc/shadow 密码文件 3, /etc/sudoers 授权用户管理文件 4, /etc/issue 系统信 ...

  6. ubuntu系统在安装好mysql后,出现ERROR 2002(HY000: Can't to local MySQL server through socket '/var/run/mysqld/mysqld.sock')(2)(图文详解)

    不多说,直接上干货! 问题详情 我在写此博客之前,看了网上各种资料,写的太冗余和繁琐杂乱.最简单的解决方法莫过于我这篇博客.直接如下. 这是liux套接字网络的特性,win平台不会有这个问题. 解决方 ...

  7. Beam概念学习系列之PTransform数据处理

    不多说,直接上干货! PTransform数据处理 PTransform对PCollection进行并行处理,每次处理1条,例如Filter过滤.Groupby分组.Combine统计.Join关联等 ...

  8. 024-cxf.xml配置文件模板

    版本一 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://ww ...

  9. js.css嵌入dll

    处理请求,返回 public ActionResult Get() { //传递一个部分名称 var n = Request["n"]; n = n.Replace('/', '. ...

  10. scss-@import

    css有一个特别不常用的特性,即@import规则,它允许在一个css文件中导入其他css文件.然而,后果是只有执行到@import时,浏览器才会去下载其他css文件,这导致页面加载起来 特别慢. s ...