设为首页 收藏本站
查看: 1207|回复: 0

[经验分享] Python PyAPNs 实现消息推送

[复制链接]

尚未签到

发表于 2015-4-22 09:01:55 | 显示全部楼层 |阅读模式
  首先是一些解决问题时查阅过的参考资料,希望对大家有所帮助,减少花在这上面的时间。
  苹果推送服务配置教程
  IOS开发者中心
  使用pyapns实现APNS推送
  苹果信息推送服务
  (这是另外一个pyapns,需要用twised.我试过了,python运行无错误但推送没反应,查看twised.log发现是一个什么clean up的错误。查StackOverflow无果,就没再弄下去了,如果有人成功请留言告诉我谢谢)

1、申请证书
  这部分网上资源挺多的,随便找一下就能找到。
实用工具->钥匙串访问
DSC0000.jpg
  这两个名字随便取。最后保存成CertificateSigningRequest.certSigningRequest文件
DSC0001.jpg
  在这找到刚刚申请的证书,导出成.p12文件
  
  登录苹果开发者中心
网上旧版的教程会让你找右边菜单的一个选项,改版后已经找不到了。不过自己稍微看着找就行。
IOS开发者中心
我们要配置的地方都在这3个菜单内。
DSC0002.jpg

2、添加APP ID
  在Identifiers菜单找到App IDs项,添加App ID
DSC0003.jpg
  
DSC0004.jpg
  其它配置没什么,直接Continue
  

3、创建APNS SSL Certificates
  建好ID后,在APP ID处查看你刚建立的这个ID,它处于未激活状态,我们来激活它
DSC0005.jpg
  创建这个Development SSL Certificate
DSC0006.jpg
选择之前生前的这个XXXX名字很长的文件 ,双击生成的aps_development导入钥匙串访问中。

4、创建Profiles
  Provisioning Profiles菜单下的+号添加Profiles,Configure页选iOS App Development,Continue
  选中刚刚创建的APP ID
DSC0007.jpg
  生成Profiles并下载,双击导入Xcode(后面获取设备Token用)。
DSC0008.jpg
  
先看看我们的代码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
DSC0009.jpg
  然后在Project和Target的code Signing设置自己的开发者账号,还有刚才生成的Profiles文件
DSC00010.jpg
  以下代码放在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]);
}
}
DSC00011.jpg
  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次才成功的。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59464-1-1.html 上篇帖子: python 数据结构之单链表的实现 下篇帖子: 【python核心编程读书笔记】第7章--映射和集合
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表