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文件,命令行如下,合并的时候会让输入密码,密码就是我们上面设置的密码:
openssl pkcs12 -clcerts -nokeys -out a.pem -in aps_test_cer.p12
openssl pkcs12 -nocerts -out b.pem -in aps_test_key.p12
cat a.pem b.pem > end.pem
6、将生成的end.pem文件上传到SAE上的云推送服务上即可,我们在SAE上可以通过文件的id进行访问:

二、服务器端代码编写:
SAE上云推送所用到的PHP代码如下:
<?php $cert_id =你的证书序号;
$device_token = 你的deviceToken;
$message = "hello world"; //这个是简单的例子,更复杂的消息格式请查看苹果官方文档
$body = array(
'aps' => array( 'alert' => $message)
);
$apns = new SaeAPNS();
//push消息到SAE推送服务器
$result = $apns->push( $cert_id , $body , $device_token ); if( $result && is_array($result) ){
echo '发送成功';
var_dump( $result );
} else {
echo '发送失败';
var_dump($apns->errno(), $apns->errmsg());
} //查看消息发送的汇总信息,返回值包括当天发送成功的消息数,以及因各类原因发送失败的消息数。
$result = $apns->getInfo($cert_id);
if ($result === false) {
echo "getInfo失败";
var_dump($apns->errno(), $apns->errmsg());
} else {
echo "getInfo成功";
var_dump($result);
} ?>
三、客户端代码如下:
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.获取设备令牌的回调方法
//注册远程推送后获取设备令牌 -(void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{ NSLog(@"%@",deviceToken);
}
3.注册错误回调的方法:
-(void) application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
NSLog(@"%@",[error localizedDescription]);
}
4.在Build Settings中的Code Signing中中我们的推送证书和描述文件

到这儿,调用服务器上的php文件就可以给我们的设备发送通知了。
iOS开发之远程推送的更多相关文章
- 李洪强iOS开发之极光推送JPush
		
李洪强iOS开发之极光推送JPush
 - IOS本地,APNS远程推送(具体过程)
		
添加本地推送 ///本地添加 -(void)addLocalPushNotification:(UIButton*)sender; { NSLog(@"%s",__FUNCTION ...
 - iOS开发:创建推送开发证书和生产证书,以及往极光推送官网上传证书的步骤方法
		
在极光官网上面上传应用的极光推送证书的实质其实就是上传导出的p12文件,在极光推送应用管理里面,需要上传两个p12文件,一个是生产证书,一个是开发证书 ,缺一不可,具体如下所示: 在开发者账号里面创建 ...
 - iOS开发资源:推送通知相关开源项目--PushSharp、APNS-PHP以及Pyapns等
		
PushSharp (github) PushSharp是一个实现了由服务器端向移动客户端推送消息的开源C#库,支持 iOS (iPhone/iPad APNS). Android (C2DM/GC ...
 - ios 开发之本地推送
		
网络推送可能被人最为重视,但是本地推送有时候项目中也会运用到: 闲话少叙,代码如下: 1.添加根视图 self.window.rootViewController = [[UINavigationCo ...
 - iOS开发——百度云推送
		
由于公司项目是集成的极光推送,详见下一篇博客. 集成百度推送大体相当,最好都参考官方文档集成,官方文档或官方网站教程是最好的博客. 百度Push服务SDK用户手册(iOS版) http://push. ...
 - ios 开发之 -- 极光推送,发送自定义消息,进入制定页面
		
在进行极光推送时候,发现版本有所更新,以前截取didfinish入口方法里面的launchOptions,获取一个本地的通知内容,进行本地展示不可用了,通过查询官方文档和网上的资料才发现,方法改变了, ...
 - iOS开发笔记10:圆点缩放动画、强制更新、远程推送加语音提醒及UIView截屏
		
1.使用CAReplicatorLayer制作等待动画 CALayer+CABasicAnimation可以制作很多简单的动画效果,之前的博客中介绍的“两个动画”,一个是利用一张渐变色图片+CABas ...
 - iOS开发中的远程推送实现(最新,支持iOS9)
		
我的个人项目<丁丁印记>中加入了远程推送功能,按照操作说明去做还是比较容易实现的,但是学的不够不系统,而且iOS8之后的推送和之前的版本是有所不同的,因此这篇文章希望总结一下最新的iOS推 ...
 
随机推荐
- java空指针异常:java.lang.NullPointException
			
一.什么是java空指针异常 我们都知道java是没有指针的,这里说的"java指针"指的就是java的引用,我们不在这里讨论叫指针究竟合不合适,而只是针对这个异常本身进行分析.空 ...
 - 《社交网络》里的评分公式——ELO排名系统
			
<社交网络>里的Mark Zackburg被女朋友甩后,在舍友的启发下,充分发挥了技术宅男自娱自乐的恶搞天分,做出了Facemash网站,对学校女生的相貌进行排名打分,结果网站访问流量过大 ...
 - Win32 OpenProcess打开进程失败,返回5无权限操作
			
Win32 OpenProcess打开进程失败,返回5无权限操作,相信你会碰到这样的事,在IDE中可以,单独却不可以了,其实这时就需要提权了,否则是无法打开的,OpenProcess提权至Debug即 ...
 - CF2.D
			
D. Santa Claus and a Palindrome time limit per test 2 seconds memory limit per test 256 megabytes in ...
 - Javascript中call和apply的区别和用法
			
JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别.其实就是更改对象的内部指针,即改变对象的this指向的内容.这在面向对象的js编程过程中有时是很有用的.call ...
 - Des与3Des加密解密
			
/// <summary> /// Des和3Des算法 /// </summary> public class Des { /// <summary> /// D ...
 - nginx-nginx脚本
			
#!/bin/bash #nx Startup script for the Nginx HTTP Server # it is v. version. # chkconfig: - # descri ...
 - SharePoint 2010中一些必须知道的限制
			
最大文件名长度是123个字符. 一个文档库(library)里最多可以存放10000个文档 一个视图(view)里最多显示5000个条目(item) 推荐的单个内容数据库(content databa ...
 - Window平台Grmon下如何使用gdb进行调试
			
Window平台Grmon下如何使用gdb进行调试 1输入cmd命令,打开其窗口,进入你要执行的文件目录下 2.连接开发板,输入grmon –altjtag –u 3.连上后,输入gdb命令 4.再输 ...
 - HDFS 架构解析
			
本文以 Hadoop 提供的分布式文件系统(HDFS)为例来进一步展开解析分布式存储服务架构设计的要点. 架构目标 任何一种软件框架或服务都是为了解决特定问题而产生的.还记得我们在 <分布式存储 ...