Python PyAPNs 实现消息推送

首先是一些解决问题时查阅过的参考资料,希望对大家有所帮助,减少花在这上面的时间。

苹果推送服务配置教程

IOS开发者中心

使用pyapns实现APNS推送

苹果信息推送服务

(这是另外一个pyapns,需要用twised.我试过了,python运行无错误但推送没反应,查看twised.log发现是一个什么clean up的错误。查StackOverflow无果,就没再弄下去了,如果有人成功请留言告诉我谢谢)

1、申请证书

这部分网上资源挺多的,随便找一下就能找到。

实用工具->钥匙串访问

这两个名字随便取。最后保存成CertificateSigningRequest.certSigningRequest文件

在这找到刚刚申请的证书,导出成.p12文件

登录苹果开发者中心
网上旧版的教程会让你找右边菜单的一个选项,改版后已经找不到了。不过自己稍微看着找就行。
IOS开发者中心

我们要配置的地方都在这3个菜单内。

2、添加APP ID

在Identifiers菜单找到App IDs项,添加App ID

其它配置没什么,直接Continue

3、创建APNS SSL Certificates

建好ID后,在APP ID处查看你刚建立的这个ID,它处于未激活状态,我们来激活它

创建这个Development SSL Certificate

选择之前生前的这个XXXX名字很长的文件 ,双击生成的aps_development导入钥匙串访问中。

4、创建Profiles

Provisioning Profiles菜单下的+号添加Profiles,Configure页选iOS App Development,Continue

选中刚刚创建的APP ID

生成Profiles并下载,双击导入Xcode(后面获取设备Token用)。

先看看我们的代码TestApns.py

from apns import APNs, Payload

apns = APNs(use_sandbox=True, cert_file=‘PushTest-cert.pem‘, key_file=‘PushTest-key-noec.pem‘)
token_hex = ‘c9abbb6b3b612e25426efe8364fac87a30e48ededc76d7147bd4cea98daef034‘
payload = Payload(alert="Hello Test3!", sound="default", badge=1)
apns.gateway_server.send_notification(token_hex, payload) 

需要一个设备的Toke和cert文件,key文件。

用这3个命令到相应路径,分别生成3个文件,最后一个是生成无加密的文件,这样就不用每推送一次都要输一次密码。

openssl pkcs12 -clcerts -nokeys -out PushTest-cert.pem -in PushTest.p12
openssl pkcs12 -nocerts -out PushTest-key.pem -in PushTest.p12
openssl rsa -in PushTest-key.pem -out PushTest-key-noec.pem

5、获取设备Token

到应用的info.plist找到这个Bundle ID,这里我们把后面那些全部去掉,改成之前申请APP ID时填的com.KPushTest

然后在Project和Target的code Signing设置自己的开发者账号,还有刚才生成的Profiles文件

以下代码放在AppDelegate.m里,应用启动时会询问是否允许推送消息,然后看输出,那段Token尖括号里的字符串就是我们要的东西了

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];
    ViewController *viewController = [[ViewController alloc] initWithNibName:nil bundle:nil];
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
    self.window.rootViewController = viewController;
    [self.window makeKeyAndVisible];

    NSLog(@"Registering for push notifications...");
    [[UIApplication sharedApplication]
     registerForRemoteNotificationTypes:
     (UIRemoteNotificationTypeAlert |
      UIRemoteNotificationTypeBadge |
      UIRemoteNotificationTypeSound)];

}

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

    NSString *str = [NSString
                     stringWithFormat:@"Device Token=%@",deviceToken];
    NSLog(@"%@",str);

}

- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {

    NSString *str = [NSString stringWithFormat: @"Error: %@", err];
    NSLog(@"%@",str);
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

    for (id key in userInfo) {
        NSLog(@"key: %@, value: %@", key, [userInfo objectForKey:key]);
    }

}

OK,2个文件和Token串都有了,把文件放到之前TestApns.py相应位置,运行它。一般情况你会听到推送悦耳的声音了。

补充说明:

配置中最容易出错的地方有3点
1.第二步中申请APP ID时,Bunndle ID跟应用内的不一致。
2.第三步中生成Profiles文件之前,忘记创建APNS SSL Certificates使App ID的Push Notifications服务处于Active状态
3.最后一步要,证书没有放对位置找不到文件。
前两步都是证书的问题,如果是Token字符串获得失败或者最后一步推送不成功,很有可能问题就出在前两步。
这时候不要慌,打开StackOverflow,查你出现的问题相关信息,肯定能找到相应的解决方案,笔者就是在这重复的过程中折腾了3、4次才成功的。

时间: 2024-10-10 08:16:39

Python PyAPNs 实现消息推送的相关文章

android热门消息推送横向测评!

关于这个话题,已经不是什么新鲜事了.对于大多数中小型公司一般都是选择第三方的服务来实现.但是现在已经有很多提供推送服务的公司和产品,如何选择一个适合自己项目的服务呢?它们之间都有什么差别?在此为大家做了一个简单的调研,希望可以帮到大家. 简介: 手机推送服务是指服务器定向将信息实时送达手机的服务.推送服务,主要就是将最新资讯和最近的活动信息及时推送给用户,与用户保持互动,从而提高用户粘性,提升用户体验.例如,微信,新浪微博等APP的通知栏消息. 原理: 1)轮询(Pull)方式:应用程序应当阶段

Python Websocket消息推送---GoEasy

Goeasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送!个人感觉goeasy推送更稳定,推送速度快,代码简单易懂上手快浏览器兼容性:GoEasy推送支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等.支 持不同的开发语言:   GoEasy推送提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过RestfulAPI来实现后台实时推送.

友盟消息推送安卓文档、 python端sdk、demo代码

一,友盟消息推送python服务端sdk地址和文档地址 1.sdk地址:http://dev.umeng.com/system/resources/W1siZiIsIjIwMTYvMDgvMTkvMTdfNDFfMzhfNzg2X3B1c2hfc2VydmVyX3B5c2RrLnppcCJdXQ/push-server-pysdk.zip 2.文档:http://dev.umeng.com/push/android/api-doc 二.python官方sdk代码中的错误(没错!官方代码有错.)

C(++) Websocket消息推送---GoEasy

Goeasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送!个人感觉goeasy推送更稳定,推送速度快,代码简单易懂上手快浏览器兼容性:GoEasy推送支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等.支 持不同的开发语言:   GoEasy推送提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过RestfulAPI来实现后台实时推送.

node.js Websocket消息推送---GoEasy

Goeasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送!个人感觉goeasy推送更稳定,推送速度快,代码简单易懂上手快浏览器兼容性:GoEasy推送支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等.支 持不同的开发语言:   GoEasy推送提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过RestfulAPI来实现后台实时推送.

PHP Websocket消息推送---GoEasy

Goeasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送!个人感觉goeasy推送更稳定,推送速度快,代码简单易懂上手快浏览器兼容性:GoEasy推送支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等.支 持不同的开发语言:   GoEasy推送提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过RestfulAPI来实现后台实时推送.

Android开发笔记(一百零四)消息推送SDK

推送的集成 常用概念 推送:从服务器把消息实时发到客户端app上,这就是推送,推送可用于发送系统通知.发送推荐信息.发送聊天消息等等. 别名:用于给移动设备取个好记的名字,比如电脑有计算机名,可以把别名理解为开发者给移送设备起的外号.不过,多个移动设备可以起一样的别名,这几个设备就会同时收到发给该别名的消息. 标记:用于给移动设备打标签,可以理解为分类,比如超市里的泰国大米既可以打上"粮食制品"的标签,也可以打上"进口商品"的标签.服务器可以统一给某个种类的移动设备

.NET手记-友盟消息推送服务器端加密算法的实现

最近为App开发消息推送功能,这里我们采用了友盟的消息推送服务,但其后台简陋,可定制化程度低,所以决定接入服务器端API,在自己的服务器上部署一套推送服务. 其中涉及到很多问题,首先要解决的就是与友盟服务器的加密验证问题. 官方示例 友盟官方的加密算法使用Python实现的,核心是MD5算法,如下: import hashlib import json def md5(s): print s m = hashlib.md5(s) return m.hexdigest() appkey = '你的

Delphi消息推送

移动端的消息推送大家都体验过,智能手机上一大堆广告等各种消息会不时从消息栏中弹出来骚扰你. PC程序中我们有时也会用到消息推送,比如通知之类.通常我们使用的方法可能更多地使用Socket之类来处理,有时效率更低的方法是做数据库的轮询.如果终端多.消息多,数据库的轮询方式是肯定不能被接受的. 现在比较流行的消息服务器有很多,像Apache的ActiveMQ,升级产品是Apollo,RabbitMQ,还有号称速度最快的ZeroMQ,等等很多.这些消息服务器大多支持各种平台,如Java,PHP,Pyt