iOS远程通知详解

一、创建证书

1         点击钥匙图标

2         在菜单栏中依次选择:钥匙串访问?偏好设置?证书选项卡,下面两项全部选关闭

3         生成证书请求:钥匙串访问?证书助理?从证书颁发机构请求证书

4         输入两个电子邮件地址和常用名称。电子邮件地址是你注册AppleID。

a)   常用名称输入你在苹果网站注册的名称,其它名称没试过,不知道行不行。

b)   选择“存储到磁盘”。保存后的名称应该为:CertificateSigningRequest.certSigningRequest

c)   保存到磁盘后在你的钥匙串访问窗口应该会出两个密钥,一个公钥密钥,一个专用密钥,红色部分就是你在上面输入的常用名。

二、生成证书

1,在苹果开发者官网进入到下面这个页面,是Certificates,Identifiers&Profiles块,后面有链接(https://developer.apple.com/account/ios/certificate/certificateList.action)

后面点击添加,选择IOS Development,然后还会让你选择一个.certSigningRequest文件(就是刚才生成的机构证书)。完成后会生成开发者证书.cer文件,下载到mac电脑,双击安装。

openssl pkcs12 -in CertificateName.p12 -out CertificateName.pem -nodes

三,在开发者官网申请APP IDS

1,上面那个搞定了,这个就更容易了。注意一点Bundle ID的设置最后是要跟你app工程的Bundle Identifiler一致,命名规范“com.团队名.app名”。

下面我选择了wildcard App ID,Explicit App ID应该也是可以的

原理:这就是对应着你现在开发的app应用,有多少个应用,就该需要多少个app id

四,在开发者官网申请Devices授权

1,name就是你设备主人的名字,随便命名。

2,UDID就是你设备的id,很长。教你一个方法,用数据线插在mac上,打开xcode,进入到Window/Devices中,你就可以看到Identifier,复制,然后粘贴过去。

原理:就是添加可测试设备,有几台设备,就要添加多少次

五,在开发者官网生成描述配置文件 .mobileprovision文件

1,前面完成了,这个也不多说了,操作类似。就是要选择 cer,选择app id,选择devices。也就是这一步就是把你的mac,app,iphone连接起来的操作。

完成后,下载,双击安装。

六,开始配置xcode(3个地方)

1,配置Bundle Identifier,跟刚才在开发者官网设置的app IDS的identifier一致(刚才已经说过一次了)

2,配置Code Signing Identity,设置Debug为Iphone Developer

3,在左上角把模拟器换成真机,然后运行,就可以看到结果了

上面是创建证书的方法。参考:http://www.cnblogs.com/MartinLi841538513/articles/3831726.html/http://blog.csdn.net/quanqinyang/article/details/21695323

下面就开始我们的推送之路吧

1、首先到developer.apple.com上去下载自己创建的推送证书,certificate栏中。下载apns的证书(分为开发和生产),下载开发的证书可以了,app上线后把服务端的证书换成生产的就可以了。点击下载的证书就会出现在钥匙串中。

生成.p12文件如下图

生成pem格式的证书

打开终端,进入到你保存.p12文件的目录

openssl pkcs12 -in CertificateName.p12 -out CertificateName.pem -nodes

这样你就会看一个.pem文件,开发和生产一样的方法

2、到xcode中设置证书,Code Signing中设置成开发证书,这样是为了能接收到服务器发来的通知消息。

3、在Appdelegate.m文件中配置客户端的代码:

注册远程通知类型

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
    {
        [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings
                                                                             settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge)
                                                                             categories:nil]];
        [[UIApplication sharedApplication] registerForRemoteNotifications];
    }
    else
    {
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
         (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
    }

}

实现委托方法

<span style="color:#333333;">- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
    NSString *tokenString = [[[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]] stringByReplacingOccurrencesOfString:@" " withString:@""];
    // 向自己的服务器注册deviceToken

}</span>

失败回调方法

<span style="color:#333333;">- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
    NSLog(@"Failed to get device token, error: %@", error);
}</span>

处理接收到远程通知的方法

<span style="color:#333333;">- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    //这里可以根据userInfo中的内容作一些页面的跳转,最大256个字节

}</span>

清除通知的方法:

[UIApplication sharedApplication].applicationIconBadgeNumber = 0;

[[UIApplication sharedApplication] cancelAllLocalNotifications];

根据项目要求放到不同的方法中。

applicationDidBecomeActive和didFinishLaunchingWithOptions

ios8以下远程通知不支持在通知栏中单条清除,本地通知支持单条的清除

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification*)notification
{
    [[UIApplication sharedApplication] cancelLocalNotification:notification];

}

ios8中新增不少功能,后面会在介绍。

时间: 2024-10-02 11:11:07

iOS远程通知详解的相关文章

ios开发——实用技术OC-Swift篇&amp;本地通知与远程通知详解

本地通知与远程通知详解 一:本地通知 Local Notification的作用 Local Notification(本地通知) :是根据本机状态做出的通知行为,因此,凡是仅需依赖本机状态即可判断需要发出通知的行为都可以或者说应该使用Local Notification来处理.比方说:iBeacon中进入了某个Beacon region,或者说自定义的一些定时提醒等. 构建Local Notification 在iOS中,构建LocalNotification非常简单,只需要掌握好NSLoca

iOS开发者证书-详解

iOS开发者证书-详解/生成/使用 本文假设你已经有一些基本的Xcode开发经验, 并注册了iOS开发者账号. 相关基础 加密算法 现代密码学中, 主要有两种加密算法: 对称密钥加密 和 公开密钥加密. 对称密钥加密 对称密钥加密(Symmetric-key algorithm)又称为对称加密, 私钥加密, 共享密钥加密. 这类算法在加密和解密时使用相同的密钥. 例如: 最常见的应用场景 - 系统登陆. 要成功登陆系统, 你必须输入正确的密码, 这密码是唯一的, 是与创建时一样的. 同样 的,

【Git】Git远程操作详解

Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多优势,其中之一就是远程操作非常简便.本文详细介绍5个Git命令,它们的概念和用法,理解了这些内容,你就会完全掌握Git远程操作. git clone git remote git fetch git pull git push 本文针对初级用户,从最简单的讲起,但是需要读者对Git的基本用法有所了解.同时,本文覆盖了上面5个命令的几乎所有的常用用法,所以对于熟练用户也有参考价值. 一.git clone 远程操作

转:iOS中socket详解

一.网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作媒体层,是网络工程师所研究的对象: 传输层.会话层.表示层和应用层则被称作主机层,是用户所面向和关心的内容. http协议   对应于应用层 tcp协议    对应于传输层 ip协议     对应于网络层 三者本质上没有可比性.  何况HTTP协议是基于TCP连接的. TCP/IP是传输层协议,主要解决数据如何在网络

2、自动化运维之SaltStack远程执行详解

SaltStack远程执行详解 ●目标(Targeting) ●模块(Module) ●返回(Returnners) 混合模式-C 选项 主机名设置参照: redis-node1-redis03-idc04-soa.example.com(电商) 1.1模块介绍 [[email protected] salt]# salt '*' service.available sshd linux-node1.zhurui.com: True linux-node2.zhurui.com: True 服务

iOS UIView动画详解(Objective-C)

我在之前的一篇博客中<iOS UIView动画详解(Swift)>讲解了使用Swift来实现UIView类下面提供的多种动画效果,如位置动画.旋转动画.缩放动画.颜色动画.透明度动画等等.为了这个题目的完整性,今天我使用Objective-C来完全重写以上的所有的动画.项目案例已经上传至:https://github.com/chenyufeng1991/iOS-UIView-Animation  中的Animation-OC文件夹下,另一个目录下则是Swift实现的动画. (1)位置动画 P

[转]Git远程操作详解

Git 是目前最流行的版本管理系统,学会 Git 几乎成了开发者的必备技能. Git 有很多优势,其中之一就是远程操作非常简便.本文详细介绍 5 个 Git 命令,它们的概念和用法,理解了这些内容,你就会完全掌握 Git 远程操作. git clone git remote git fetch git pull git push 本文针对初级用户,从最简单的讲起,但是需要读者对 Git 的基本用法有所了解.同时,本文覆盖了上面 5 个命令的几乎所有的常用用法,所以对于熟练用户也有参考价值. 一.

Android Notification通知详解

Android Notification通知详解 Notification: (一).简介: 显示在手机状态栏的通知.Notification所代表的是一种具有全局效果的通知,程序一般通过NotificationManager服务来发送Notification. Android3.0增加了Notification.Builder类,该类可以轻松地创建Notification对象. (二).Notification.Builder类中提供的方法: builder.setAutoCancel();

Android基础入门教程——2.5.2 Notification(状态栏通知)详解

Android基础入门教程--2.5.2 Notification(状态栏通知)详解 标签(空格分隔): Android基础入门教程 本节引言: 本节带来的是Android中用于在状态栏显示通知信息的控件:Notification,相信大部分 学Android都对他都很熟悉,而网上很多关于Notification的使用教程都是基于2.x的,而 现在普遍的Android设备基本都在4.x以上,甚至是5.0以上的都有:他们各自的Notification 都是不一样的!而本节给大家讲解的是基于4.x以