zoukankan      html  css  js  c++  java
  • 自己动手搭建苹果推送Push服务器

    今天我们来说下怎么自己建一个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=1)
    apns.gateway_server.send_notification(token_hex, payload)

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

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

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

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

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

  • 相关阅读:
    [设计模式] 10 外观模式 facade
    [设计模式] 11 享元模式 Flyweight
    [设计模式] 9 装饰者模式 Decorator
    [设计模式] 8 组合模式 Composite
    float2int
    《ASP.NET》数据绑定——GridView
    Android Studio左边栏Project不见了?
    Linux下的五种I/O模型
    Shell编程入门(第二版)(下)
    Android訪问网络,使用HttpURLConnection还是HttpClient?
  • 原文地址:https://www.cnblogs.com/zhouxihi/p/6422252.html
Copyright © 2011-2022 走看看