iOS 远程推送的详细配置

首先,来说一下苹果的推送机制。顾名思义,推送,是指服务器向客户端发送消息,那么在iOS中,应用是被后台挂起的,并不能一直连接网络,那么服务器怎么才能把消息发送到客户端呢?这就用到推送,苹果的推送机制,是只能由APNS发送推送通知,所以你自己的后台服务器想给客户端推送通知,得把要推送的内容发送给APNS。

说到这里,如果还不了解苹果的推送机制,可以自行查看资料。总之整体的流程就是:APP启动的时候,获取本设备的device_token,然后把这个device_token告诉你自己的服务器,服务器拿到这个device_token后,使用证书文件,向苹果的APNS服务器发起一个SSL连接,连接成功后发送一个JSON串,JSON里面包含device_token、通知内容以及其他的一些东西。苹果的APNS得到JSON后,通过device_token查找设备推送消息。

那么,我们iOS前端的工作量是非常简单的,只需要获取device_token和接到通知后做什么事就可以。那么,怎么样获取设备的device_token,iOS8用到了新的方法。在APP启动的时候就调用,比如在 application: didFinishLaunchingWithOptions: 这个方法里,调用APP的注册远程推送申请方法。

[objc] view
plain
 copy

  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
  2. {
  3. UIUserNotificationSettings * s =[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge categories:nil];
  4. [[UIApplication sharedApplication] registerUserNotificationSettings:s];
  5. [application registerForRemoteNotifications];
  6. return YES;
  7. }

[objc] view
plain
 copy

  1. //若注册成功,则会回调一个方法
  2. - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
  3. {
  4. NSString *decToken = [NSString stringWithFormat:@"%@", deviceToken];
  5. //获取到之后要去掉尖括号和中间的空格
  6. NSMutableString *st = [NSMutableString stringWithString:decToken];
  7. [st deleteCharactersInRange:NSMakeRange(0, 1)];
  8. [st deleteCharactersInRange:NSMakeRange(st.length-1, 1)];
  9. NSString *string1 = [st stringByReplacingOccurrencesOfString:@" " withString:@""];
  10. //保存到本地
  11. NSUserDefaults *u = [NSUserDefaults standardUserDefaults];
  12. [u setObject:string1 forKey:@"deviceToken"];
  13. }

[objc] view
plain
 copy

  1. //当我们正在使用APP,收到了一条通知,那么APP会直接回调这个方法,不会去弹出通知。
  2. - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
  3. {
  4. NSLog(@"Receive remote notification : %@",userInfo);
  5. UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:userInfo[@"aps"][@"alert"] delegate:self cancelButtonTitle:@"好" otherButtonTitles:nil, nil nil];
  6. [alert show];
  7. }

在这个方法里面,处理我们接收到的消息即可。

前端的任务就这么多,别忘了把device_token交给你的服务端。

服务端的代码本来不用我们写,但是遇到不会写的,让他们去看苹果的官方文档就行。要是还看不懂,就找一个现成的代码研究一下。

程序猿攻城狮都是万能的,不仅会修电脑,还要会写后台。那么,我们就来看看后台是怎么实现的。

首先,按照上面流程来说,服务端获取到device_token后,使用证书向APNS发送推送请求,那么问题来了。挖掘机技术哪家强?

推送证书哪里来?

需要一个开发者账号。没错,和我们真机调试的证书一样,至少需要99刀。有了账号,我们就可以申请一个证书。下面,跟着一步一步看,比较麻烦。

1.需要在MacOS上生成一个CertificateSigningRequest.certSigningRequest文件。打开应用程序中的“钥匙串访问”,从菜单中选择“证书助理”-》“从证书颁发机构请求证书”

然后保存在本地就行。这样我们就获取了一个证书请求文件。

2.这里就要用到开发者账号了。进入developer.apple.com,选择numberCenter-》Certificates, Identifiers & Profiles-》Identifiers-》APP IDs。点右上角的+号,注册一个APPID,写id名,默认是Explicit App ID写个bundle名。还要勾选住App Services下的Push Notifications。这样就注册好了。

3.生成推送证书。点Certificates,右上角+,创建一个证书,以Development为例,选Apple Push Notification service SSL (Sandbox),然后直接下一步,会让你选一个APPID,选择你刚刚创建好的那个APPID,下一步,提交我们第一步生成的请求文件,然后求送证书就完成了。download下来即可。

4.下载到的是一个cer文件,我们后台肯定不能直接使用。需要做一个整合。以下以PHP为例。双击证书,或者用拖拽,把证书放到钥匙串中。

这样,在钥匙串中找到这个推送证书,前面的名字是一样的,后面是你起的bundle名。接着,就是把cer证书转化成pem文件,供后台使用。右键点击这个证书,选择“导出”,放到本地。会得到一个后缀为p12的文件。然后打开MacOS下的命令行程序,运行以下几条命令,其中会让你输入密码,是不可见的,输入完回车就行,屏幕上是看不到输入的字符的,会输入好几次密码,所以建议每次密码都输一样的。

openssl pkcs12 -clcerts -nokeys -out 文件名A.pem -in 苹果证书.p12

openssl pkcs12 -nocerts -out 文件名B.pem -in 苹果证书.p12

文件名是要自己取的,苹果证书.12 即 对应的你生成的 .12后缀的文件。

最后把用证书拆出来的两个文件合到一起:cat 文件名A.pem 文件名B.pem > lltpush.pem

最终的这个lltpush.pem是我们需要的,给后台用。

这样,就基本完成了。再写后台代码之前,还需要去developer.apple.com上建一个证书和一个描述文件,一点要选支持push的那个APPID,就是我们刚才创建的那个。这样,我们才能真机调试。总结一下,要在developer.apple.com上获取三个东西。

开头说到,后台是搭建在SAE云端的,推送代码都不用些,只要调用SAE封装好的一个类就可以。那么,想要用SAE,自己去注册一个应用,然后进入到应用首页,得配置一下证书才能使用推送。这个很简单,看一下SAE的推送说明文档就OK。

到这个设置页面,把证书上传上去,密码写你在命令行合成时候填的密码。记住你的证书序号,因为写推送的时候,要选择用哪个证书发推送。

SAE就不多介绍了,自己看下文档。现在就开始写代码了,新建一个PHP页面出来。看以下的代码。

[php] view
plain
 copy

  1. <?php
  2. $cert_id = 1686;
  3. $device_token = $_REQUEST[‘device_token‘];
  4. $message = $_REQUEST[‘message‘];
  5. //这个是简单的例子,更复杂的消息格式请查看苹果官方文档
  6. $body = array(
  7. ‘aps‘ => array( ‘alert‘ => $message , ‘badge‘ => 1, ‘sound‘ => ‘in.mp3‘)
  8. );
  9. $apns = new SaeAPNS();
  10. //push消息到SAE推送服务器
  11. $result = $apns->push( $cert_id , $body , $device_token );
  12. if( $result && is_array($result) ){
  13. $dic = array(‘success‘ => ‘0‘);
  14. echo json_encode($dic);
  15. // var_dump( $result );
  16. } else {
  17. $dic = array(‘success‘ => ‘1‘);
  18. echo json_encode($dic);
  19. //var_dump($apns->errno(), $apns->errmsg());
  20. }
  21. ?>

这个接口呢,需要两个参数,一个是设备的device_token,还有就是你要推送的消息内容。然后调用SAE的方法就可以。发送成功返回JSON串。复杂的代码就不说了。

这只是个测试demo,真正的推送是后台判断的。不是我们去调接口。

就到这里吧。

时间: 2024-08-07 11:47:32

iOS 远程推送的详细配置的相关文章

iOS远程推送,从机制到实现,尽量详细

本人第一次写博客,写的不好的地方大家请见谅. 本文主要参考了http://blog.csdn.net/showhilllee/article/details/8631734,感谢showhilllee详细的讲解.因为在做的过程中有些自己的理解和变化,所以自己再写一遍关于推送的详细博客. 本文分为四部分介绍: 一.解释APNS远程推送 二.配置推送的证书 三.导出自己服务器可用的证书 四.代码实现设备注册推送.获取推送消息 好了,现在开始正式讲解推送. 一.首先上一个老图,苹果很早就给大家的,推送

IOS远程推送

一.关于推送通知 推送通知,也被叫做远程通知,是在iOS 3.0以后被引入的功能.是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径,是从外部服务器发送到应用程序上的.一般说来,当要显示消息或下载数据的时候,通知是由远程服务器(程序的提供者)发送,然后通过苹果的推送通知服务(Apple Push Notification Service,简称apns)推送到设备的程序上. 推送的新消息可能是一条信息.一项即将到期的日程或是一份远程服务器上的新数据.在系统上展现的时候,可以显示警告信息或

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

推送通知,是现在的应用必不可少的功能.那么在 iOS 中,我们是如何实现远程推送的呢?iOS 的远程推送原理又是什么呢?在做 iOS 远程推送时,我们会遇到各种各样的问题.那么首先让我们准备一些做推送需要的东西.我们需要一个付费的苹果开发者账号(免费的不可以做远程推送),有了开发者账号,我们可以去苹果开发者网站,配置自己所需要的推送的相关证书.然后下载证书,供我们后面使用,详细的证书配置过程,我们下面再说. 首先我们要说说iOS推送通知的基本原理: 苹果的推送服务通知是由自己专门的推送服务器AP

iOS 远程推送 根据后台推送内容的不同跳转指定页面

转发自:http://www.jianshu.com/p/4531bd6e3a01 iOS 远程推送,根据后台推送内容的不同, 跳转指定页面 我目前的需求是总体分为两类: 1:私信.关注.点赞一类,只需跳转到对应的tabbar 中的某一项 2:每日精品文章项目推送,分两个子类 (1)如果当前已经打开 文章项目页面,则直接刷新,不推出新页面 (2)如果当前未打开此页面,则push出新的文章项目页面 iOS 推送情况分为 应用未启动的 情况: 打开应用 ,推送信息 会通过 - (BOOL)appli

ios远程推送的各种坑,啊吼吼吼~APNs

来源链接:http://blog.csdn.net/showhilllee/article/details/8631734?reload 远程推送写的最详细的就是这位啦,鉴于我反反复复搞了四五遍,我就不连字带图的转了,再也难不倒我╭(╯^╰)╮ 主要写各种坑: 1.证书Certificates 开发或者发布ipa肯定都申请过证书,不过当时真是迷迷糊糊的,拿着公司账号各种晕,里面一堆的id,带*的不带*的,各种证书也不知道哪些能用哪些不能用.反正就是各种试,能用的赶紧用了再说. 在这里,先说一下,

iOS 远程推送的实现

iOS的推送可以用下图简单的概括: 这里 Provider 是指某个应用的Developer,当然如果开发者使用AVOS Cloud的服务,把发送消息的请求委托给我们,那么这里的Provider就是AVOS Cloud的推送服务程序了.上图可以分为三步: 第一步:AVOS Cloud推送服务程序把要发送的消息.目的设备的唯一标识打包,发给APNs. 第二步:APNs在自身的已注册Push服务的应用列表中,查找有相应标识的设备,并把消息发送到设备. 第三步:iOS系统把发来的消息传递给相应的应用程

iOS远程推送之友盟Push

入职后的一个任务,就是做远程推送,听老大说用的是友盟Push.所以就看了一下友盟push,具体的集成以及证书的生成请参照这里.具体的就不再多说了,主要是自己重新封装了一下UMessage,具体的内容如下: // // ZGUmessagePush.h // NotePad // // Created by zhanggui on 15/10/19. // Copyright © 2015年 xiaoguizi. All rights reserved. // #import <Foundatio

iOS 远程推送通知 详解

1: ios本地通知和远程通知 http://wangjun.easymorse.com/?p=1482 2: 苹果远程通知服务申请激活例图 (外国佬写的.) http://mobiforge.com/developing/story/programming-apple-push-notification-services 3:书籍参考:iPhone 开发秘籍 第16章 推送通知. 好了,进入正文: 首先是申请证书的网址 https://developer.apple.com/ios/manag

IOS远程推送证书的制作步骤

今天还在看环信的使用方法,在环信的官网上发现了这组制作远程推送证书的一组图片,正好之前本人没有写过关于远程证书的笔记,这里要写一篇博文,整理一下远程推送证书的制作流程,尽管如此,本篇博文依然是作者原创,方便自己学习.参考使用.(声明本文的图片全部来自网络,是为了节省时间) (1)打开开发者中心,并登陆自己的开发者账号(或者公司的开发者账号) (2)从Member Center进入Certificates, Identifiers & Profiles (3)选择要制作的证书为推送证书 对于开发环