说到远程推送,应该用的也挺多的,今天就基于SEA的云推送服务,作一个推送的小demo,来了解一下iOS中的远程推送是怎么一回事儿,首先你得有苹果的开发者帐号,好咸蛋也差很少了,主要内容走起。php
1、准备阶段服务器
1.在苹果开发官网上申请推送证书以前须要一个名字叫作certSigningRequest文件。该文件在MAC系统中生成,用于在Apple网站上申请推送证书文件,下面是利用钥匙串生成该文件的步骤:app
(1).打开Mac下的钥匙串-》钥匙串访问-》证书助理-》从证书颁发机构请求证书,以下图所示:ide
(2).通过上一步会出现下面的对话框,邮箱和名称随便填写,而后选择保存到磁盘,就能够在本地生成一个CertificateSigningRequest.certSigningRequest文件。以下图:网站
2.去苹果开发者的网站上申请推送证书,步骤以下:ui
(1)、用开发者帐号登录后,进入Member Center,入下图所示:spa
(2)、进入member Center后点击下面截图的连接:命令行
(3)、注册一个支持推送的AppId,在identifiers下面的App IDs选项中点击添加按钮,添加一个新的AppIDs,入下图:3d
(4)、填写你的AppId的名字code
(5)、绑定你应用的Bundle ID
(6)、选中Push Notifications,使本AppID支持消息推送:
三、用上面的AppID申请推送证书
(1)、点击证书,选中开发模式,而后单选推送服务
(2)、选中咱们刚才建立的AppID,以下:
(3)、上传咱们刚才在本地用钥匙串建立的文件:
(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
六、将生成的end.pem文件上传到SAE上的云推送服务上便可,咱们在SAE上能够经过文件的id进行访问:
2、服务器端代码编写:
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 ?>
3、客户端代码以下:
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文件就能够给咱们的设备发送通知了。