iOS-远程推送
说到远程推送,应该用的也挺多的,今天就基于SEA的云推送服务,做一个推送的小demo,来了解一下iOS中的远程推送是怎么一回事儿,首先你得有苹果的开发者账号,好咸蛋也差不多了,主要内容走起。
一、准备阶段
1.在苹果开发官网上申请推送证书之前需要一个名字叫做certSigningRequest文件。该文件在MAC系统中生成,用于在Apple网站上申请推送证书文件,下面是利用钥匙串生成该文件的步骤:
(1).打开Mac下的钥匙串-》钥匙串访问-》证书助理-》从证书颁发机构请求证书,如下图所示:
(2).经过上一步会出现下面的对话框,邮箱和名称随便填写,然后选择保存到磁盘,就可以在本地生成一个CertificateSigningRequest.certSigningRequest文件。如下图:
2.去苹果开发者的网站上申请推送证书,步骤如下:
(1)、用开发者账号登陆后,进入Member Center,入下图所示:
(2)、进入member Center后点击下面截图的链接:
(3)、注册一个支持推送的AppId,在identifiers下面的App IDs选项中点击添加按钮,添加一个新的AppIDs,入下图:
(4)、填写你的AppId的名字
(5)、绑定你应用的Bundle ID
(6)、选中Push Notifications,使本AppID支持消息推送:
3、用上面的AppID申请推送证书
(1)、点击证书,选中开发模式,然后单选推送服务
(2)、选中我们刚才创建的AppID,如下:
(3)、上传我们刚才在本地用钥匙串创建的文件:
(4)、接下来就可以下载并使用我们的推送证书了
4、用我们的AppID创建一个Provisioning Profiles文件,如下:
5.由上面的证书,生成php用的pem文件过程如下:
(1).由钥匙串打开上面我们生成的CSR文件,单击右键导出p12文件,如下图:
(2).设置访问密码:
(3)、在终端下切换到存有刚才我们导出的p12文件夹下,进行命令行生成pem文件,命令行如下,合并的时候会让输入密码,密码就是我们上面设置的密码:
1 openssl pkcs12 -clcerts -nokeys -out a.pem -in aps_test_cer.p12
2 openssl pkcs12 -nocerts -out b.pem -in aps_test_key.p12
3 cat a.pem b.pem > end.pem
6、将生成的end.pem文件上传到SAE上的云推送服务上即可,我们在SAE上可以通过文件的id进行访问:
二、服务器端代码编写:
SAE上云推送所用到的PHP代码如下:

1 <?php
2
3 $cert_id =你的证书序号;
4 $device_token = 你的deviceToken;
5 $message = "hello world";
6
7 //这个是简单的例子,更复杂的消息格式请查看苹果官方文档
8 $body = array(
9 'aps' => array( 'alert' => $message)
10 );
11 $apns = new SaeAPNS();
12 //push消息到SAE推送服务器
13 $result = $apns->push( $cert_id , $body , $device_token );
14
15 if( $result && is_array($result) ){
16 echo '发送成功';
17 var_dump( $result );
18 } else {
19 echo '发送失败';
20 var_dump($apns->errno(), $apns->errmsg());
21 }
22
23 //查看消息发送的汇总信息,返回值包括当天发送成功的消息数,以及因各类原因发送失败的消息数。
24 $result = $apns->getInfo($cert_id);
25 if ($result === false) {
26 echo "getInfo失败";
27 var_dump($apns->errno(), $apns->errmsg());
28 } else {
29 echo "getInfo成功";
30 var_dump($result);
31 }
32
33 ?>

三、客户端代码如下:
1.在Appdelegate中注册推送:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//注册远程通知
[application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
[application registerForRemoteNotifications];
return YES;
}

2.获取设备令牌的回调方法

1 //注册远程推送后获取设备令牌
2
3 -(void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
4 {
5
6 NSLog(@"%@",deviceToken);
7 }

3.注册错误回调的方法:
-(void) application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
NSLog(@"%@",[error localizedDescription]);
}
4.在Build Settings中的Code Signing中中我们的推送证书和描述文件
到这儿,调用服务器上的php文件就可以给我们的设备发送通知了。
iOS-远程推送的更多相关文章
- IOS远程推送
IOS远程推送 一.关于推送通知 推送通知,也被叫做远程通知,是在iOS 3.0以后被引入的功能.是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径,是从外部服务器发送到应用程序上的.一般说 ...
- iOS远程推送原理及实现过程
➠更多技术干货请戳:听云博客 推送通知,是现在的应用必不可少的功能.那么在 iOS 中,我们是如何实现远程推送的呢?iOS 的远程推送原理又是什么呢?在做 iOS 远程推送时,我们会遇到各种各样的问题 ...
- iOS 远程推送通知
1.什么是推送通知 在某些特殊情况下,应用程序被动收到的以不同种界面形式出现的提醒信息 推送通知的作用:可以让不在前台运行的app通知app发生了改变 iOS中得推送通知种类 远程推送通知(Remot ...
- iOS远程推送1
一.APNS 远程推送 1.所有的苹果设备,在联网状态下,都会与苹果服务器建立长连接. 2.长连接:就是只要联网了,就一直建立连接. 3.长连接的作用:时间校准,系统升级,查找我的iPhone. 4. ...
- iOS远程推送之友盟Push
更新记录: 1.2015年10月23日上午10:10分更新,优化了该类,去除了不必要的方法. ----------------------------------------------------- ...
- iOS 远程推送消息解析及逻辑处理
关于远程推送的相关配置网上已经有足够多的教程,这里就不复述了.这里讲述当客户端收到推送消息后,应怎样对其进行相应的逻辑处理. 工程的AppDelegate.m文件里提供了如下方法: //当应用程序启动 ...
- iOS 远程推送通知 详解
1: ios本地通知和远程通知 http://wangjun.easymorse.com/?p=1482 2: 苹果远程通知服务申请激活例图 (外国佬写的.) http://mobiforge.com ...
- IOS 远程推送通知(UIRemoteNotification)
● 什么是远程推送通知 ● 顾名思义,就是从远程服务器推送给客户端的通知(需要联网) ● 远程推送服务,又称为APNs(Apple Push Notification Services) ● ...
- ios远程推送和python版push server相关笔记
今天研究了下ios的远程推送,网上的相关教程很多,做了一遍下来记录一下遇到的问题和注意事项(转载请注明) 1.证书及乱七八糟的配置 公钥:app id管理那儿的“Development Push SS ...
- [iOS 高级] iOS远程推送与本地推送大致流程
本地推送: UILocalNotification *notification=[[UILocalNotification alloc] init]; if (notification!=nil) { ...
随机推荐
- python面向对象中的__init__方法怎么理解?
我们在学习python类的时候,总会碰见书上的类中有__init__()这样一个函数,很多同学百思不得其解,其实它就是python的构造方法. 构造方法类似于类似init()这种初始化方法,来初始化新 ...
- 第二章:k-近邻算法
本章内容k-近邻分类算法从文本文件中解析和导人数据 使用Matplotlib创建扩散图归一化数值 2.1 k-近邻算法概述简单地说,k-近邻算法采用测量不同特征值之间的距离方法进行分类.
- Angular JS将数据显示为两列(html)
(数据为Array数组)使用AngularJS中ng-show="{{}}",其将数据按行分为奇数行和偶数行,$even是判断是否为奇数行[如果是则为true,不是则为false] ...
- Excel里内嵌在线翻译
本来寻思着继续写点系统运行日志跟踪技术的,但早晨哥家领导从单位打来电话,让帮助她的闺蜜搞一个excel翻译的问题,总部IT搞不定.我过去是用excel做了几年工作,却都是些数学计算,跟翻译也扯不上啊: ...
- 【转】Backbone使用总结
转自 http://www.pchou.info/javascript/2014/06/26/backbone-summary-01.html 开始在项目中大规模使用backbone,一路磕磕碰碰, ...
- Effecvive Java读书笔记(一):创建和销毁对象
I.考虑静态工厂方法替代构造器 优势:1.有清晰的方法名称,方便调用:多参数构造器易出现调用错误 2.不必每次调用都创建新对象 3.可以返回原返回类型的任何子类型 4.创建参数化类型实例的时候,代码简 ...
- chrome浏览器root用户运行
vim /usr/bin/google-chrome 58 exec -a "$0" "$HERE/chrome" "$PROFILE_DIRECTO ...
- CPU与内存的关系
至今才对cpu和内存有一定了解了,下面有几个比喻的理解,很形象呦~ 1# 例如你要吃东西时,硬盘是锅,内存是碗,CPU是你,浅显点就是这样子了~ 2# 例如电脑是企业,内存是车间,cpu是生产线,硬盘 ...
- JavaScript中String的math方法与RegExp的exec方法的区别
1.exec是正则表达式的方法,方法参数为字符串.match为字符串的方法,参数为正则表达式对象. 2.match与exec都返回数组.如果调用exec方法的正则表达式没有分组内容,则返回第一个匹配的 ...
- linux-15基础命令之-用户与用户组(useradd,userdel,usermod,passwd,groupadd)
1.useradd 命令用于创建新的用户,格式为:useradd[选项] 用户名 useradd参数 参数 作用 -d 指定用户的家目录(默认/home/username) -D 展示默认值 -e 帐 ...