今天我们来说下怎么自己建一个Push推送服务器, 当然还是用的苹果的APNS 这里我们讲的的自己服务器端的实现

在做推送服务器之前我们要先做一些准备动作

#1. 确保你的App ID有启用PushNotifications

这个可以在你的开发者账号中心里面看看你的App ID的Push Notification是否为Enable

如果不是的话就点Edit设置并创建自己的证书, 具体怎么设置和创建证书大家可以看:

http://www.fx114.net/qa-202-108331.aspx

按照上面做完后, 我们把自己的推送证书下载下来, 如果是开发证书下载的名字应该是:aps_development.cer

双击安装, 然后在钥匙串中找到他并导出为p12格式, 这里我们取名: DevelopPush.p12

好了现在我们有一个cer证书跟一个p12文件,

现在我们要用openssl来合成PEM证书, 应为python apns要用PEM格式证书

在终端输入openssl试试看, 如果报错的话就安装一下

sudo easy_install pyOpenSSL

合成PEM证书

  1)转换公钥

openssl x509 -in aps_developer.cer -inform der -out public.pem

  2)转换私钥

openssl pkcs12 -nocerts -in DevelopPush.p12 -out private.pem

  (这时候要输入密码的)

  有了这两个pem文件其实就可以测试一下能否连通苹果的服务器了,网上有,就简写了

telnet gateway.sandbox.push.apple.com 2195 (测试是否能连通苹果的推送测试服务器)
Trying 17.172.232.226...
Connected to gateway.sandbox.push-apple.com.akadns.net.
Escape character is '^]'.

  要是出现上面的结果就ok了,然后测试刚才的两个pem:

openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert public.pem -key private.pem

  输完密码之后,要是输出一堆提示信息就算是ok了

下面我们开始准备写推送服务器

首先安装apns

sudo easy_install apns

然后在证书的路径下创建一个pushservice.py, 代码如下:

import time
from apns import APNs, Frame, Payload apns = APNs(use_sandbox=True, cert_file='public.pem', key_file='private.pem') # Send a notification
token_hex = 'aefa14337e084a6423529dd262f36de607a019529f4a0a4e2b5e5ae885dec578'
payload = Payload(alert="Hello World!", sound="default", badge=)
apns.gateway_server.send_notification(token_hex, payload)

执行看看, 如果客户端没有收到通知的话就检查以下三点

1. 证书是否正确, 重新下载aps_developement.cer试试看

2. 手机设置中通知功能是否有打开

3. 项目中以下部分是否有打开

目前我们已经实现了推送一个alert, 剩下的我们下次再看看

自己动手搭建苹果推送Push服务器的更多相关文章

  1. (转)苹果推送通知服务教程 Apple Push Notification Services Tutorial

    本文译自http://www.raywenderlich.com/.原文由iOS教程团队 Matthijs Hollemans 撰写,经原网站管理员授权本博翻译. 在iOS系统,考虑到手机电池电量,应 ...

  2. 苹果推送(APNs)ios push小结

    把app删除后就推送不成功了,可以看出deviceToken应该是设备+app来一起识别的,重新安装后仍然为同一个 简介 推送服务APNs(Apple Push Notification servic ...

  3. IOS学习笔记—苹果推送机制APNs

    转自:唐韧_Ryan http://blog.csdn.net/ryantang03/article/details/8482259 推送是解决轮询所造成的流量消耗和 电量消耗的一个比较好的解决方案, ...

  4. 苹果推送通知服务APNs编程(转)

    add by zhj: 下面的几篇文章也非常好, http://www.raywenderlich.com/32960/apple-push-notification-services-in-ios- ...

  5. 苹果推送服务器端证书配置.pem生成

    做苹果推送服务器,很重要的一步,就是生成与苹果APNS连接的证书,一般是.pem文件: 首先在苹果开发者中心 生成 aps_devlopment.cer文件:然后下载:双击导入钥匙串: 打开钥匙串 - ...

  6. 本地git仓库推送到服务器自建的git仓库实现目录文件同步教程

    首先,先在服务器上安装git,如果有git的话就不用走这一步了 yum安装git [root@iZuf6fazwjb6lb3z82smzoZ ~]# cd src/ [root@iZuf6fazwjb ...

  7. Android 与 iOS 推送 Push Notification 的区别

    Android 安卓使用 GCM (Google Cloud Messaging) 接收推送,然后应用根据实际情况决定做什么反应,比如显示一个 Notification. 所以安卓下,推送 Push ...

  8. 信鸽推送Push API

    目录 信鸽推送 push API 0. 基本 push 1. 根据 token list,推送到android和ios 2. 推送到android和ios 所有用户 信鸽推送 push API 参考: ...

  9. Git撤回已经推送(push)至远程仓库提交(commit)的版本

    背景 所以,经常会遇到已经提交远程仓库,但是又不是我想要的版本,要撤下来. 回退版本一般使用git reset,又分为: # 不删除工作空间改动代码,撤销commit,不撤销git add . git ...

随机推荐

  1. USB入门基础知识(转)

    源:USB入门基础知识 相关名词: 主机(Host) 设备(Device) 接口(Interface) 管道(Pipe) 管道是主机与设备端点数据传输的连接通道,代表了主机的数据缓冲区与设备端点之间交 ...

  2. STM32——timer

    原文地址: http://blog.sina.com.cn/s/blog_49cb42490100s6ud.html   1.     STM32的Timer简介 STM32中一共有11个定时器,其中 ...

  3. [osg]osg显示中文信息

    转自:http://www.cnblogs.com/feixiang-peng/articles/3152754.html 写好了在osg中实时显示中文信息的效果.中间遇到两个问题,一个是中文显示,一 ...

  4. 3)Javascript设计模式:Observer模式

    Observer模式 var Observer = (function() { var instance = null; function Observe() { this.events = {} } ...

  5. poi2007

    序:为什么写poi,zy说poi都是思路题目,不像hnoi妈的数据结构队..... 1.bzoj1102 题目大意:定义了一个山谷和山峰,求他们数量. 题解:这种题bfs咯,在bfs的时候记录一下相邻 ...

  6. Robocopy 轉帖

    实例一:文件,想怎么复制就怎么复制 [实现效果] 随时将源文件夹中的纯文本(TXT).Word文档(DOC)还有BMP.TIF图像文件复制到目标文件夹中 ,这是在"资源管理器"中直 ...

  7. JS判断doctype文档模式-document.compatMode

    IE对盒模型的渲染在 Standards Mode和Quirks Mode是有很大差别的,在Standards Mode下对于盒模型的解释和其他的标准浏览器是一样,但在Quirks Mode模式下则有 ...

  8. inheritprototype原型继承封装及综合继承最简实例

    1.inheritprototype.js ;(function(){    var s = {        inheritObject:function(o){//对象继承封装           ...

  9. 判断移动端设备: navigator.userAgent.toLowerCase()

    判断你的浏览设备: navigator.userAgent.toLowerCase(); (返回当前用户所使用的是什么浏览器,将获得的信息变成小写) function browserRedirect( ...

  10. 如何使用php session

    学会php session可以在很多地方使用,比如做一个后台登录的功能,要让程序记住用户的session,其实很简单,看了下面的文章你就明白了.   PHP session用法其实很简单它可以把用户提 ...