说到远程推送,应该用的也挺多的,今天就基于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. 1 openssl pkcs12 -clcerts -nokeys -out a.pem -in aps_test_cer.p12
  2. 2 openssl pkcs12 -nocerts -out b.pem -in aps_test_key.p12
  3. 3 cat a.pem b.pem > end.pem

    6、将生成的end.pem文件上传到SAE上的云推送服务上即可,我们在SAE上可以通过文件的id进行访问:

    

  二、服务器端代码编写:

    SAE上云推送所用到的PHP代码如下:

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

  三、客户端代码如下:

    1.在Appdelegate中注册推送:

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

  

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

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

    3.注册错误回调的方法:

  1. -(void) application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
  2. {
  3. NSLog(@"%@",[error localizedDescription]);
  4. }

    4.在Build Settings中的Code Signing中中我们的推送证书和描述文件

  到这儿,调用服务器上的php文件就可以给我们的设备发送通知了。

iOS-远程推送的更多相关文章

  1. IOS远程推送

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

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

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

  3. iOS 远程推送通知

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

  4. iOS远程推送1

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

  5. iOS远程推送之友盟Push

    更新记录: 1.2015年10月23日上午10:10分更新,优化了该类,去除了不必要的方法. ----------------------------------------------------- ...

  6. iOS 远程推送消息解析及逻辑处理

    关于远程推送的相关配置网上已经有足够多的教程,这里就不复述了.这里讲述当客户端收到推送消息后,应怎样对其进行相应的逻辑处理. 工程的AppDelegate.m文件里提供了如下方法: //当应用程序启动 ...

  7. iOS 远程推送通知 详解

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

  8. IOS 远程推送通知(UIRemoteNotification)

    ●  什么是远程推送通知 ●  顾名思义,就是从远程服务器推送给客户端的通知(需要联网) ●  远程推送服务,又称为APNs(Apple Push Notification Services) ●   ...

  9. ios远程推送和python版push server相关笔记

    今天研究了下ios的远程推送,网上的相关教程很多,做了一遍下来记录一下遇到的问题和注意事项(转载请注明) 1.证书及乱七八糟的配置 公钥:app id管理那儿的“Development Push SS ...

  10. [iOS 高级] iOS远程推送与本地推送大致流程

    本地推送: UILocalNotification *notification=[[UILocalNotification alloc] init]; if (notification!=nil) { ...

随机推荐

  1. http状态码全解

    1**(信息类):表示接收到请求并且继续处理 100--客户必须继续发出请求 101--客户要求服务器根据请求转换HTTP协议版本 2**(响应成功):表示动作被成功接收.理解和接受 200--表明该 ...

  2. 电子科技大学第八届ACM趣味程序设计竞赛第四场(正式赛)题解

    A. Picking&Dancing 有一列n个石子,两人交替取石子,每次只能取连续的两个,取走后,剩下的石子仍然排成1列.问最后剩下的石子数量是奇数还是偶数. 读懂题意就没什么好说的. #i ...

  3. IE跨域访问问题

    可能出现的症状: 1.跨域无法登录. 2.同一页面请求同一域名SESSION无法获取.(SESSION_ID一直在变) 一般情况下在方法前加上以下代码: header("P3P: CP=CU ...

  4. Mini projects #3 ---- Stopwatch: The Game

    课程全名:An Introduction to Interactive Programming in Python,来自 Rice University 授课教授:Joe Warren, Scott ...

  5. js二级导航下拉菜单

    <!DOCTYPE html> <html> <head> <title>导航列表</title> <meta http-equiv= ...

  6. 关于css3媒体查询和响应式布局

    响应式设计 响应式设计可根据所显示的屏幕大小而改变, 它呈现的每个屏幕看起来并不相同.按照可用的屏幕属性,响应式设计提供了 UI 的最佳效果. 例如,如果网站布局上有一个占据 25% 的屏幕宽度的侧边 ...

  7. zoj 3717 - Balloon(2-SAT)

    裸的2-SAT,详见刘汝佳训练指南P-323 不过此题有个特别需要注意的地方:You should promise that there is still no overlap for any two ...

  8. typeid详解(转)

    (http://www.cppblog.com/smagle/archive/2010/05/14/115286.html) 在揭开typeid神秘面纱之前,我们先来了解一下RTTI(Run-Time ...

  9. 强大好用的"文本"编辑器

    1 editplugs 说明:EditPlus是一款由韩国 Sangil Kim (ES-Computing)出品的小巧但是功能强大的可处理文本.HTML和程序语言的Windows编辑器,你甚至可以通 ...

  10. Ubuntu 下安装Mysql 需要注意的地方.

    安装卸载 sudo apt-get autoremove --purge mysql-server-5.0sudo apt-get remove mysql-serversudo apt-get au ...